X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fdevice.cpp;h=b9ce376dbe93419e42bad291038f785e47914d8e;hb=f842432ad7cfd7f530188e2a4848aea3da03719e;hp=3b5b9b9f76d1b820c755e6580b71d7db9bd9dd51;hpb=3394d6066c9092a5444c9273f52cea01e2eaf10f;p=guile-irrlicht.git diff --git a/src/device.cpp b/src/device.cpp index 3b5b9b9..b9ce376 100644 --- a/src/device.cpp +++ b/src/device.cpp @@ -25,19 +25,31 @@ #include "device.h" #include "dimension2d.h" #include "driver-types.h" +#include "event-receiver.h" +#include "gsubr.h" +#include "timer.h" #include "wchar.h" #include "wrapped.h" +using namespace irr; + extern "C" { void init_device (void) { init_device_type (); - scm_c_define_gsubr ("create-device", 0, 0, 1, (scm_t_subr)irr_createDevice); - scm_c_define_gsubr ("run", 1, 0, 0, (scm_t_subr)irr_run); - scm_c_define_gsubr ("set-window-caption!", 2, 0, 0, (scm_t_subr)irr_setWindowCaption); - scm_c_export ("create-device", "run", "set-window-caption!", NULL); + DEFINE_GSUBR ("irr_createDevice", 7, 0, 0, irr_createDevice); + DEFINE_GSUBR ("irr_IrrlichtDevice_getVideoDriver", 1, 0, 0, + irr_IrrlichtDevice_getVideoDriver); + DEFINE_GSUBR ("irr_IrrlichtDevice_setWindowCaption", 2, 0, 0, + irr_IrrlichtDevice_setWindowCaption); + DEFINE_GSUBR ("get-timer", 1, 0, 0, irr_getTimer); + DEFINE_GSUBR ("is-window-active?", 1, 0, 0, irr_isWindowActive); + DEFINE_GSUBR ("run", 1, 0, 0, irr_run); + DEFINE_GSUBR ("set-event-receiver!", 2, 0, 0, irr_setEventReceiver); + DEFINE_GSUBR ("set-resizable!", 2, 0, 0, irr_setResizable); + DEFINE_GSUBR ("yield", 1, 0, 0, irr_yield); } DEFINE_WRAPPED_TYPE (irr::IrrlichtDevice*, "device", @@ -45,35 +57,54 @@ extern "C" { wrap_device, unwrap_device); SCM - irr_createDevice (SCM rest) + irr_createDevice (SCM device_type, + SCM window_size, + SCM bits, + SCM fullscreen, + SCM stencilbuffer, + SCM vsync, + SCM receiver) + { + IrrlichtDevice* device = + createDevice (scm_to_driver_type (device_type), + scm_to_dimension2d_u32 (window_size), + scm_to_uint32 (bits), + scm_to_bool (fullscreen), + scm_to_bool (stencilbuffer), + scm_to_bool (vsync), + (IEventReceiver*)scm_to_pointer (receiver)); + return scm_from_pointer ((void*)device, NULL); + } + + SCM + irr_IrrlichtDevice_getVideoDriver (SCM device) + { + video::IVideoDriver* driver = + ((IrrlichtDevice*)scm_to_pointer (device))->getVideoDriver (); + return scm_from_pointer ((void*)driver, NULL); + } + + SCM + irr_IrrlichtDevice_setWindowCaption (SCM device, + SCM text) + { + ((IrrlichtDevice*)scm_to_pointer (device))-> + setWindowCaption (scm_to_wide_char_string (text)); + return SCM_UNSPECIFIED; + } + + SCM + irr_getTimer (SCM wrapped_device) + { + irr::IrrlichtDevice* device = unwrap_device (wrapped_device); + return wrap_timer (device->getTimer ()); + } + + SCM + irr_isWindowActive (SCM wrapped_device) { - SCM device_type = scm_from_utf8_symbol ("software"); - SCM window_size = scm_list_2 (scm_from_uint32 (640), - scm_from_uint32 (480)); - SCM bits = scm_from_uint32 (16); - SCM fullscreen = scm_from_bool (0); - SCM stencilbuffer = scm_from_bool (0); - SCM vsync = scm_from_bool (0); - SCM receiver = scm_from_bool (0); - - scm_c_bind_keyword_arguments ("create-device", rest, (scm_t_keyword_arguments_flags)0, - scm_from_utf8_keyword ("device-type"), &device_type, - scm_from_utf8_keyword ("window-size"), &window_size, - scm_from_utf8_keyword ("bits"), &bits, - scm_from_utf8_keyword ("fullscreen"), &fullscreen, - scm_from_utf8_keyword ("stencilbuffer"), &stencilbuffer, - scm_from_utf8_keyword ("vsync"), &vsync, - scm_from_utf8_keyword ("receiver"), &receiver, - SCM_UNDEFINED); - - irr::IrrlichtDevice* device = - irr::createDevice (scm_to_driver_type (device_type), - scm_to_dimension2d_u32 (window_size), - scm_to_uint32 (bits), - scm_to_bool (fullscreen), - scm_to_bool (stencilbuffer), - scm_to_bool (vsync)); - return wrap_device (device); + irr::IrrlichtDevice* device = unwrap_device (wrapped_device); + return scm_from_bool (device->isWindowActive ()); } SCM @@ -84,11 +115,28 @@ extern "C" { } SCM - irr_setWindowCaption (SCM wrapped_device, - SCM text) + irr_setEventReceiver (SCM wrapped_device, + SCM receiver) + { + irr::IrrlichtDevice* device = unwrap_device (wrapped_device); + device->setEventReceiver (unwrap_event_receiver (receiver)); + return SCM_UNSPECIFIED; + } + + SCM + irr_setResizable (SCM wrapped_device, + SCM resize) + { + irr::IrrlichtDevice* device = unwrap_device (wrapped_device); + device->setResizable (scm_to_bool (resize)); + return SCM_UNSPECIFIED; + } + + SCM + irr_yield (SCM wrapped_device) { irr::IrrlichtDevice* device = unwrap_device (wrapped_device); - device->setWindowCaption (scm_to_wide_char_string (text)); + device->yield (); return SCM_UNSPECIFIED; }