X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fdevice.cpp;h=0ecb69435ee3a9ce77b76248f9807ff0c7f47e2f;hb=c9c098c6a9363eb59f435eb195a4bc5b9098b1dd;hp=f9c0d6a11247e2ebc703b2bcfbefb928094e38ee;hpb=437db80e9b374e32d0bb5f7beeb4516fc1dd65c3;p=guile-irrlicht.git diff --git a/src/device.cpp b/src/device.cpp index f9c0d6a..0ecb694 100644 --- a/src/device.cpp +++ b/src/device.cpp @@ -27,6 +27,7 @@ #include "driver-types.h" #include "event-receiver.h" #include "gsubr.h" +#include "timer.h" #include "wchar.h" #include "wrapped.h" @@ -36,9 +37,12 @@ extern "C" { init_device (void) { init_device_type (); - DEFINE_GSUBR ("create-device", 0, 0, 1, irr_createDevice); + DEFINE_GSUBR ("irr_createDevice", 7, 0, 0, irr_createDevice); + 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 ("set-window-caption!", 2, 0, 0, irr_setWindowCaption); DEFINE_GSUBR ("yield", 1, 0, 0, irr_yield); } @@ -48,26 +52,15 @@ 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) { - 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_BOOL_F; - SCM stencilbuffer = SCM_BOOL_F; - SCM vsync = SCM_BOOL_F; - SCM receiver = SCM_BOOL_F; - - 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); + UNWRAP (receiver); irr::IrrlichtDevice* device = irr::createDevice (scm_to_driver_type (device_type), @@ -76,8 +69,15 @@ extern "C" { scm_to_bool (fullscreen), scm_to_bool (stencilbuffer), scm_to_bool (vsync), - scm_is_false (receiver) ? 0 : unwrap_event_receiver (receiver)); - return wrap_device (device); + UNWRAPPED (receiver)); + return scm_from_pointer (device, NULL); + } + + SCM + irr_getTimer (SCM wrapped_device) + { + irr::IrrlichtDevice* device = unwrap_device (wrapped_device); + return wrap_timer (device->getTimer ()); } SCM @@ -94,6 +94,24 @@ extern "C" { return scm_from_bool (device->run ()); } + SCM + 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_setWindowCaption (SCM wrapped_device, SCM text)