X-Git-Url: https://git.jsancho.org/?p=guile-irrlicht.git;a=blobdiff_plain;f=src%2Fdevice.cpp;h=63db119696fe5513bdd2c94238b903ad77db948f;hp=e578e057a9b04ac2f3857ca545f3a1ec54443636;hb=19663b6c5766b06c73148fdf803ce3555052a23e;hpb=9a256c6c6a756378cb53c89d42e362bbaa2fc5c0 diff --git a/src/device.cpp b/src/device.cpp index e578e05..63db119 100644 --- a/src/device.cpp +++ b/src/device.cpp @@ -21,53 +21,166 @@ #include #include - #include "device.h" #include "dimension2d.h" #include "driver-types.h" +#include "gsubr.h" #include "wchar.h" -#include "wrapped.h" + + +using namespace irr; + + +template +SCM +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), + (TEventReceiver)scm_to_pointer (receiver)); + return scm_from_pointer ((void*)device, NULL); +} + + +SCM +IrrlichtDevice_getCursorControl (SCM device) +{ + gui::ICursorControl* cursor_control = + ((IrrlichtDevice*)scm_to_pointer (device))->getCursorControl (); + return scm_from_pointer ((void*)cursor_control, NULL); +} + + +SCM +IrrlichtDevice_getFileSystem (SCM device) +{ + io::IFileSystem* file_system = + ((IrrlichtDevice*)scm_to_pointer (device))->getFileSystem (); + return scm_from_pointer ((void*)file_system, NULL); +} + + +SCM +IrrlichtDevice_getGUIEnvironment (SCM device) +{ + gui::IGUIEnvironment* gui_env = + ((IrrlichtDevice*)scm_to_pointer (device))->getGUIEnvironment (); + return scm_from_pointer ((void*)gui_env, NULL); +} + + +SCM +IrrlichtDevice_getSceneManager (SCM device) +{ + scene::ISceneManager* manager = + ((IrrlichtDevice*)scm_to_pointer (device))->getSceneManager (); + return scm_from_pointer ((void*)manager, NULL); +} + + +SCM +IrrlichtDevice_getTimer (SCM device) +{ + ITimer* timer = + ((IrrlichtDevice*)scm_to_pointer (device))->getTimer (); + return scm_from_pointer ((void*)timer, NULL); +} + + +SCM +IrrlichtDevice_getVideoDriver (SCM device) +{ + video::IVideoDriver* driver = + ((IrrlichtDevice*)scm_to_pointer (device))->getVideoDriver (); + return scm_from_pointer ((void*)driver, NULL); +} + + +SCM +IrrlichtDevice_isWindowActive (SCM device) +{ + return scm_from_bool + (((IrrlichtDevice*)scm_to_pointer (device))->isWindowActive ()); +} + + +SCM +IrrlichtDevice_run (SCM device) +{ + return scm_from_bool + (((IrrlichtDevice*)scm_to_pointer (device))->run ()); +} + + +template +SCM +IrrlichtDevice_setEventReceiver (SCM device, + SCM receiver) +{ + ((IrrlichtDevice*)scm_to_pointer (device))-> + setEventReceiver ((TEventReceiver)scm_to_pointer (receiver)); + return SCM_UNSPECIFIED; +} + + +SCM +IrrlichtDevice_setResizable (SCM device, + SCM resize) +{ + ((IrrlichtDevice*)scm_to_pointer (device))-> + setResizable (scm_to_bool (resize)); + return SCM_UNSPECIFIED; +} + + +SCM +IrrlichtDevice_setWindowCaption (SCM device, + SCM text) +{ + ((IrrlichtDevice*)scm_to_pointer (device))-> + setWindowCaption (scm_to_wide_char_string (text)); + return SCM_UNSPECIFIED; +} + + +SCM +IrrlichtDevice_yield (SCM device) +{ + ((IrrlichtDevice*)scm_to_pointer (device))->yield (); + return SCM_UNSPECIFIED; +} + extern "C" { void init_device (void) { - init_device_type (); - scm_c_define_gsubr ("create-device", 7, 0, 0, (scm_t_subr)irr_createDevice); - scm_c_define_gsubr ("set-window-caption!", 2, 0, 0, (scm_t_subr)irr_setWindowCaption); - } - - DEFINE_WRAPPED_TYPE (irr::IrrlichtDevice*, "device", - init_device_type, device_p, - wrap_device, unwrap_device); - - SCM - irr_createDevice (SCM deviceType, - SCM windowSize, - SCM bits, - SCM fullscreen, - SCM stencilbuffer, - SCM vsync, - SCM receiver) - { - irr::IrrlichtDevice* device = - irr::createDevice (scm_to_driver_type (deviceType), - scm_to_dimension2d_u32 (windowSize), - scm_to_uint32 (bits), - scm_to_bool (fullscreen), - scm_to_bool (stencilbuffer), - scm_to_bool (vsync)); - return wrap_device (device); - } - - SCM - irr_setWindowCaption (SCM wrapped_device, - SCM text) - { - irr::IrrlichtDevice* device = unwrap_device (wrapped_device); - device->setWindowCaption (scm_to_wide_char_string (text)); - return SCM_UNSPECIFIED; + DEFINE_GSUBR ("createDevice_IEventReceiver", 7, 0, 0, createDevice); + DEFINE_GSUBR ("IrrlichtDevice_getCursorControl", 1, 0, 0, IrrlichtDevice_getCursorControl); + DEFINE_GSUBR ("IrrlichtDevice_getFileSystem", 1, 0, 0, IrrlichtDevice_getFileSystem); + DEFINE_GSUBR ("IrrlichtDevice_getGUIEnvironment", 1, 0, 0, IrrlichtDevice_getGUIEnvironment); + DEFINE_GSUBR ("IrrlichtDevice_getSceneManager", 1, 0, 0, IrrlichtDevice_getSceneManager); + DEFINE_GSUBR ("IrrlichtDevice_getTimer", 1, 0, 0, IrrlichtDevice_getTimer); + DEFINE_GSUBR ("IrrlichtDevice_getVideoDriver", 1, 0, 0, IrrlichtDevice_getVideoDriver); + DEFINE_GSUBR ("IrrlichtDevice_isWindowActive", 1, 0, 0, IrrlichtDevice_isWindowActive); + DEFINE_GSUBR ("IrrlichtDevice_run", 1, 0, 0, IrrlichtDevice_run); + DEFINE_GSUBR ("IrrlichtDevice_setEventReceiver_IEventReceiver", 2, 0, 0, + IrrlichtDevice_setEventReceiver); + DEFINE_GSUBR ("IrrlichtDevice_setResizable", 2, 0, 0, IrrlichtDevice_setResizable); + DEFINE_GSUBR ("IrrlichtDevice_setWindowCaption", 2, 0, 0, IrrlichtDevice_setWindowCaption); + DEFINE_GSUBR ("IrrlichtDevice_yield", 1, 0, 0, IrrlichtDevice_yield); } }