X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2FIrrlichtDevice.cpp;h=9cccd58067803b28daf69f74bd232e233ca1793d;hb=a8ec20de5146479a15d388393b37bbf3e346f619;hp=125163f060d11dfdd120a01dbd5c322053b1df55;hpb=2dd8c4827c6c6afaba10fd04f50ec1587a750be5;p=guile-irrlicht.git diff --git a/src/IrrlichtDevice.cpp b/src/IrrlichtDevice.cpp index 125163f..9cccd58 100644 --- a/src/IrrlichtDevice.cpp +++ b/src/IrrlichtDevice.cpp @@ -21,13 +21,15 @@ #include #include -#include #include "dimension2d.h" #include "EDriverTypes.h" +#include "IGUIEnvironment.h" #include "IrrlichtDevice.h" #include "ISceneManager.h" #include "IVideoDriver.h" +#include "wchar.h" +#include "wrapped.h" extern "C" { @@ -36,39 +38,15 @@ extern "C" { { init_device_type (); scm_c_define_gsubr ("create-device", 7, 0, 0, (scm_t_subr)irr_createDevice); + scm_c_define_gsubr ("get-gui-environment", 1, 0, 0, (scm_t_subr)irr_getGUIEnvironment); scm_c_define_gsubr ("get-scene-manager", 1, 0, 0, (scm_t_subr)irr_getSceneManager); scm_c_define_gsubr ("get-video-driver", 1, 0, 0, (scm_t_subr)irr_getVideoDriver); scm_c_define_gsubr ("set-window-caption!", 2, 0, 0, (scm_t_subr)irr_setWindowCaption); } - static SCM device_type; - - void - init_device_type (void) - { - SCM name, slots; - scm_t_struct_finalize finalizer; - - name = scm_from_utf8_symbol ("device"); - slots = scm_list_1 (scm_from_utf8_symbol ("data")); - finalizer = NULL; - - device_type = - scm_make_foreign_object_type (name, slots, finalizer); - } - - SCM - wrap_device (irr::IrrlichtDevice* device) - { - return scm_make_foreign_object_1 (device_type, device); - } - - irr::IrrlichtDevice* - unwrap_device (SCM device_obj) - { - scm_assert_foreign_object_type (device_type, device_obj); - return (irr::IrrlichtDevice*)scm_foreign_object_ref (device_obj, 0); - } + DEFINE_WRAPPED_TYPE (irr::IrrlichtDevice*, "device", + init_device_type, device_p, + wrap_device, unwrap_device); SCM irr_createDevice (SCM deviceType, @@ -90,34 +68,35 @@ extern "C" { } SCM - irr_getSceneManager (SCM device_obj) + irr_getGUIEnvironment (SCM wrapped_device) { - irr::IrrlichtDevice* device = unwrap_device (device_obj); - irr::scene::ISceneManager* scene_manager = device->getSceneManager(); + irr::IrrlichtDevice* device = unwrap_device (wrapped_device); + irr::gui::IGUIEnvironment* gui_environment = device->getGUIEnvironment (); + return wrap_gui_environment (gui_environment); + } + + SCM + irr_getSceneManager (SCM wrapped_device) + { + irr::IrrlichtDevice* device = unwrap_device (wrapped_device); + irr::scene::ISceneManager* scene_manager = device->getSceneManager (); return wrap_scene_manager (scene_manager); } SCM - irr_getVideoDriver (SCM device_obj) + irr_getVideoDriver (SCM wrapped_device) { - irr::IrrlichtDevice* device = unwrap_device (device_obj); - irr::video::IVideoDriver* driver = device->getVideoDriver(); + irr::IrrlichtDevice* device = unwrap_device (wrapped_device); + irr::video::IVideoDriver* driver = device->getVideoDriver (); return wrap_video_driver (driver); } SCM - irr_setWindowCaption (SCM device_obj, + irr_setWindowCaption (SCM wrapped_device, SCM text) { - irr::IrrlichtDevice* device = unwrap_device (device_obj); - char* ctext; - wchar_t* wtext; - - ctext = scm_to_utf8_stringn (text, NULL); - wtext = (wchar_t*)malloc ((strlen (ctext) + 1) * sizeof (wchar_t)); - mbstowcs (wtext, ctext, strlen (ctext) + 1); - - device->setWindowCaption (wtext); + irr::IrrlichtDevice* device = unwrap_device (wrapped_device); + device->setWindowCaption (scm_to_wide_char_string (text)); return SCM_UNSPECIFIED; }