X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2FIrrlichtDevice.cpp;h=9cccd58067803b28daf69f74bd232e233ca1793d;hb=a8ec20de5146479a15d388393b37bbf3e346f619;hp=aa492e15da58fa3b9e42f0eada092d8d8e13842b;hpb=84e93e7eac45dde889fc436a247838da3c87edf6;p=guile-irrlicht.git diff --git a/src/IrrlichtDevice.cpp b/src/IrrlichtDevice.cpp index aa492e1..9cccd58 100644 --- a/src/IrrlichtDevice.cpp +++ b/src/IrrlichtDevice.cpp @@ -21,7 +21,6 @@ #include #include -#include #include "dimension2d.h" #include "EDriverTypes.h" @@ -29,6 +28,8 @@ #include "IrrlichtDevice.h" #include "ISceneManager.h" #include "IVideoDriver.h" +#include "wchar.h" +#include "wrapped.h" extern "C" { @@ -43,34 +44,9 @@ extern "C" { 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, @@ -92,42 +68,35 @@ extern "C" { } SCM - irr_getGUIEnvironment (SCM device_obj) + irr_getGUIEnvironment (SCM wrapped_device) { - irr::IrrlichtDevice* device = unwrap_device (device_obj); - irr::gui::IGUIEnvironment* gui_environment = device->getGUIEnvironment(); + irr::IrrlichtDevice* device = unwrap_device (wrapped_device); + irr::gui::IGUIEnvironment* gui_environment = device->getGUIEnvironment (); return wrap_gui_environment (gui_environment); } SCM - irr_getSceneManager (SCM device_obj) + irr_getSceneManager (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::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; }