]> git.jsancho.org Git - guile-irrlicht.git/blob - src/gui-environment.cpp
33a03e4dfb8d276e3e0046aa0342f1a763141ecd
[guile-irrlicht.git] / src / gui-environment.cpp
1 /* guile-irrlicht --- GNU Guile bindings for Irrlicht Engine
2
3    Copyright (C) 2020 Javier Sancho <jsf@jsancho.org>
4
5    This file is part of guile-irrlicht.
6
7    guile-irrlicht is free software; you can redistribute it and/or modify
8    it under the terms of the GNU Lesser General Public License as
9    published by the Free Software Foundation; either version 3 of the
10    License, or (at your option) any later version.
11
12    guile-irrlicht is distributed in the hope that it will be useful, but
13    WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    General Public License for more details.
16
17    You should have received a copy of the GNU Lesser General Public
18    License along with guile-irrlicht. If not, see
19    <http://www.gnu.org/licenses/>.
20 */
21
22 #include <irrlicht/irrlicht.h>
23 #include <libguile.h>
24 #include "gsubr.h"
25 #include "gui-environment.h"
26 #include "position2d.h"
27 #include "rect.h"
28 #include "wchar.h"
29 #include "wrapped.h"
30
31 using namespace irr;
32
33 template <typename TParent>
34 SCM
35 IGUIEnvironment_addButton (SCM gui_environment,
36                            SCM rectangle,
37                            SCM parent,
38                            SCM id,
39                            SCM text,
40                            SCM tooltiptext)
41 {
42   wchar_t* wtext = (wchar_t*) scm_to_utf32_string (text);
43   wchar_t* wtooltiptext = (wchar_t*) scm_to_utf32_string (tooltiptext);
44
45   gui::IGUIButton* button =
46     ((gui::IGUIEnvironment*)scm_to_irr_pointer (gui_environment))->
47     addButton (scm_to_rect_s32 (rectangle),
48                (TParent)scm_to_irr_pointer (parent),
49                scm_to_int32 (id),
50                wtext,
51                wtooltiptext);
52
53   free (wtext);
54   free (wtooltiptext);
55   return scm_from_irr_pointer ("<gui-button>", (void*) button);
56 }
57
58 template <typename TParent>
59 SCM
60 IGUIEnvironment_addEditBox (SCM gui_environment,
61                             SCM text,
62                             SCM rectangle,
63                             SCM border,
64                             SCM parent,
65                             SCM id)
66 {
67   wchar_t* wtext = (wchar_t*) scm_to_utf32_string (text);
68
69   gui::IGUIEditBox* editbox =
70     ((gui::IGUIEnvironment*)scm_to_irr_pointer (gui_environment))->
71     addEditBox (wtext,
72                 scm_to_rect_s32 (rectangle),
73                 scm_to_bool (border),
74                 (TParent)scm_to_irr_pointer (parent),
75                 scm_to_int32 (id));
76
77   free (wtext);
78   return scm_from_irr_pointer ("<gui-editbox>", (void*) editbox);
79 }
80
81 template <typename TParent>
82 SCM
83 IGUIEnvironment_addImage (SCM gui_environment,
84                           SCM image,
85                           SCM position,
86                           SCM use_alpha_channel,
87                           SCM parent,
88                           SCM id,
89                           SCM text)
90 {
91   gui::IGUIEnvironment* guienv = (gui::IGUIEnvironment*)scm_to_irr_pointer (gui_environment);
92   wchar_t* wtext = (wchar_t*) scm_to_utf32_string (text);
93
94   gui::IGUIImage* new_image =
95     guienv->addImage ((video::ITexture*)scm_to_irr_pointer (image),
96                       scm_to_position2d_s32 (position),
97                       scm_to_bool (use_alpha_channel),
98                       (TParent)scm_to_irr_pointer (parent),
99                       scm_to_int32 (id),
100                       wtext);
101
102   free (wtext);
103   return scm_from_irr_pointer ("<gui-image>", (void*) new_image);
104 }
105
106 template <typename TParent>
107 SCM
108 IGUIEnvironment_addListBox (SCM gui_environment,
109                             SCM rectangle,
110                             SCM parent,
111                             SCM id,
112                             SCM draw_background)
113 {
114   gui::IGUIListBox* listbox =
115     ((gui::IGUIEnvironment*)scm_to_irr_pointer (gui_environment))->
116     addListBox (scm_to_rect_s32 (rectangle),
117                 (TParent)scm_to_irr_pointer (parent),
118                 scm_to_int32 (id),
119                 scm_to_bool (draw_background));
120   return scm_from_irr_pointer ("<gui-listbox>", (void*) listbox);
121 }
122
123 template <typename TParent>
124 SCM
125 IGUIEnvironment_addScrollBar (SCM gui_environment,
126                               SCM horizontal,
127                               SCM rectangle,
128                               SCM parent,
129                               SCM id)
130 {
131   gui::IGUIScrollBar* scrollbar =
132     ((gui::IGUIEnvironment*)scm_to_irr_pointer (gui_environment))->
133     addScrollBar (scm_to_bool (horizontal),
134                   scm_to_rect_s32 (rectangle),
135                   (TParent)scm_to_irr_pointer (parent),
136                   scm_to_int32 (id));
137   return scm_from_irr_pointer ("<gui-scrollbar>", (void*) scrollbar);
138 }
139
140 template <typename TParent>
141 SCM
142 IGUIEnvironment_addStaticText (SCM gui_environment,
143                                SCM text,
144                                SCM rectangle,
145                                SCM border,
146                                SCM word_wrap,
147                                SCM parent,
148                                SCM id,
149                                SCM fill_background)
150 {
151   wchar_t* wtext = (wchar_t*) scm_to_utf32_string (text);
152
153   gui::IGUIStaticText* static_text =
154     ((gui::IGUIEnvironment*)scm_to_irr_pointer (gui_environment))->
155     addStaticText (wtext,
156                    scm_to_rect_s32 (rectangle),
157                    scm_to_bool (border),
158                    scm_to_bool (word_wrap),
159                    (TParent)scm_to_irr_pointer (parent),
160                    scm_to_int32 (id),
161                    scm_to_bool (fill_background));
162
163   free (wtext);
164   return scm_from_irr_pointer ("<gui-static-text>", (void*) static_text);
165 }
166
167 template <typename TParent>
168 SCM
169 IGUIEnvironment_addWindow (SCM gui_environment,
170                            SCM rectangle,
171                            SCM modal,
172                            SCM text,
173                            SCM parent,
174                            SCM id)
175 {
176   wchar_t* wtext = (wchar_t*) scm_to_utf32_string (text);
177
178   gui::IGUIWindow* window =
179     ((gui::IGUIEnvironment*)scm_to_irr_pointer (gui_environment))->
180     addWindow (scm_to_rect_s32 (rectangle),
181                scm_to_bool (modal),
182                wtext,
183                (TParent)scm_to_irr_pointer (parent),
184                scm_to_int32 (id));
185
186   free (wtext);
187   return scm_from_irr_pointer ("<gui-window>", (void*) window);
188 }
189
190 SCM
191 IGUIEnvironment_drawAll (SCM gui_environment)
192 {
193   ((gui::IGUIEnvironment*)scm_to_irr_pointer (gui_environment))->drawAll ();
194   return SCM_UNSPECIFIED;
195 }
196
197 SCM
198 IGUIEnvironment_getBuiltInFont (SCM gui_environment)
199 {
200   gui::IGUIFont* font =
201     ((gui::IGUIEnvironment*)scm_to_irr_pointer (gui_environment))->getBuiltInFont ();
202   return scm_from_irr_pointer ("<gui-font>", (void*) font);
203 }
204
205 SCM
206 IGUIEnvironment_getFont (SCM gui_environment,
207                          SCM filename)
208 {
209   char* cfilename = scm_to_utf8_string (filename);
210   gui::IGUIFont* font =
211     ((gui::IGUIEnvironment*)scm_to_irr_pointer (gui_environment))->getFont (cfilename);
212   free (cfilename);
213   return scm_from_irr_pointer ("<gui-font>", (void*) font);
214 }
215
216 SCM
217 IGUIEnvironment_getSkin (SCM gui_environment)
218 {
219   gui::IGUISkin* skin =
220     ((gui::IGUIEnvironment*)scm_to_irr_pointer (gui_environment))->getSkin ();
221   return scm_from_irr_pointer ("<gui-skin>", (void*) skin);
222 }
223
224 void
225 init_gui_environment (void)
226 {
227   DEFINE_GSUBR ("IGUIEnvironment_addButton_IGUIElement", 6, 0, 0,
228                 IGUIEnvironment_addButton<gui::IGUIElement*>);
229   DEFINE_GSUBR ("IGUIEnvironment_addEditBox_IGUIElement", 6, 0, 0,
230                 IGUIEnvironment_addEditBox<gui::IGUIElement*>);
231   DEFINE_GSUBR ("IGUIEnvironment_addImage_IGUIElement", 7, 0, 0,
232                 IGUIEnvironment_addImage<gui::IGUIElement*>);
233   DEFINE_GSUBR ("IGUIEnvironment_addListBox_IGUIElement", 5, 0, 0,
234                 IGUIEnvironment_addListBox<gui::IGUIElement*>);
235   DEFINE_GSUBR ("IGUIEnvironment_addScrollBar_IGUIElement", 5, 0, 0,
236                 IGUIEnvironment_addScrollBar<gui::IGUIElement*>);
237   DEFINE_GSUBR ("IGUIEnvironment_addStaticText_IGUIElement", 8, 0, 0,
238                 IGUIEnvironment_addStaticText<gui::IGUIElement*>);
239   DEFINE_GSUBR ("IGUIEnvironment_addStaticText_IGUIWindow", 8, 0, 0,
240                 IGUIEnvironment_addStaticText<gui::IGUIWindow*>);
241   DEFINE_GSUBR ("IGUIEnvironment_addWindow_IGUIElement", 6, 0, 0,
242                 IGUIEnvironment_addWindow<gui::IGUIElement*>);
243   DEFINE_GSUBR ("IGUIEnvironment_drawAll", 1, 0, 0, IGUIEnvironment_drawAll);
244   DEFINE_GSUBR ("IGUIEnvironment_getBuiltInFont", 1, 0, 0, IGUIEnvironment_getBuiltInFont);
245   DEFINE_GSUBR ("IGUIEnvironment_getFont", 2, 0, 0, IGUIEnvironment_getFont);
246   DEFINE_GSUBR ("IGUIEnvironment_getSkin", 1, 0, 0, IGUIEnvironment_getSkin);
247 }