]> git.jsancho.org Git - guile-irrlicht.git/blob - src/IrrlichtDevice.cpp
set-window-caption!
[guile-irrlicht.git] / src / IrrlichtDevice.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 <wchar.h>
25 #include "EDriverTypes.h"
26 #include "IrrlichtDevice.h"
27 #include "dimension2d.h"
28
29 extern "C" {
30
31   void
32   init_irrlicht_device (void)
33   {
34     init_irrlicht_device_object ();
35     scm_c_define_gsubr ("create-device", 7, 0, 0, (scm_t_subr)irr_createDevice);
36     scm_c_define_gsubr ("set-window-caption!", 2, 0, 0, (scm_t_subr)irr_setWindowCaption);
37   }
38
39   static SCM irrlicht_device;
40
41   void
42   init_irrlicht_device_object (void)
43   {
44     SCM name, slots;
45     scm_t_struct_finalize finalizer;
46
47     name = scm_from_utf8_symbol ("device");
48     slots = scm_list_1 (scm_from_utf8_symbol ("data"));
49     finalizer = NULL;
50
51     irrlicht_device =
52       scm_make_foreign_object_type (name, slots, finalizer);
53   }
54
55   SCM
56   irr_createDevice (SCM deviceType,
57                     SCM windowSize,
58                     SCM bits,
59                     SCM fullscreen,
60                     SCM stencilbuffer,
61                     SCM vsync,
62                     SCM receiver)
63   {
64     irr::IrrlichtDevice* device =
65       irr::createDevice (scm_to_driver_type (deviceType),
66                          scm_to_dimension2d_u32 (windowSize),
67                          scm_to_uint32 (bits),
68                          scm_to_bool (fullscreen),
69                          scm_to_bool (stencilbuffer),
70                          scm_to_bool (vsync));
71     return scm_make_foreign_object_1 (irrlicht_device, device);
72   }
73
74   SCM
75   irr_setWindowCaption (SCM device_obj,
76                         SCM text)
77   {
78     irr::IrrlichtDevice* device;
79     char* ctext;
80     wchar_t* wtext;
81
82     scm_assert_foreign_object_type (irrlicht_device, device_obj);
83     device = (irr::IrrlichtDevice*)scm_foreign_object_ref (device_obj, 0);
84
85     ctext = scm_to_utf8_stringn (text, NULL);
86     wtext = (wchar_t*)malloc ((strlen (ctext) + 1) * sizeof (wchar_t));
87     mbstowcs (wtext, ctext, strlen (ctext) + 1);
88
89     device->setWindowCaption (wtext);
90     return SCM_UNSPECIFIED;
91   }
92
93 }