X-Git-Url: https://git.jsancho.org/?p=guile-irrlicht.git;a=blobdiff_plain;f=src%2Fevent-receiver.cpp;h=293f48f794f1a6b028003aa50c9b5ad2d438f11e;hp=e97263e243168de467089caeea0c067f3a6922ac;hb=19663b6c5766b06c73148fdf803ce3555052a23e;hpb=898d352f35f3f007dd4c1f49091f38bdeb012fd3 diff --git a/src/event-receiver.cpp b/src/event-receiver.cpp index e97263e..293f48f 100644 --- a/src/event-receiver.cpp +++ b/src/event-receiver.cpp @@ -21,108 +21,263 @@ #include #include - #include "event-receiver.h" #include "gsubr.h" #include "keycodes.h" -#include "wrapped.h" + + +using namespace irr; + + +SCM +IEventRecevier_make (SCM proc_on_event) +{ + class CustomReceiver : public IEventReceiver + { + SCM scm_on_event; + + public: + CustomReceiver (SCM on_event) + { + scm_on_event = on_event; + } + + virtual bool OnEvent (const SEvent& event) + { + return scm_to_bool (scm_call_1 (scm_on_event, scm_from_pointer ((void*)&event, NULL))); + } + }; + + CustomReceiver* receiver = new CustomReceiver (proc_on_event); + return scm_from_pointer ((void*)receiver, NULL); +} + + +SCM +SEvent_EventType (SCM event) +{ + return scm_from_event_type + (((SEvent*)scm_to_pointer (event))->EventType); +} + + +SCM +SEvent_SGUIEvent_Caller (SCM event) +{ + gui::IGUIElement* caller = + ((SEvent*)scm_to_pointer (event))->GUIEvent.Caller; + return scm_from_pointer ((void*)caller, NULL); +} + + +SCM +SEvent_SGUIEvent_EventType (SCM event) +{ + return scm_from_gui_event_type + (((SEvent*)scm_to_pointer (event))->GUIEvent.EventType); +} + + +SCM +SEvent_SKeyInput_Key (SCM event) +{ + return scm_from_key_code + (((SEvent*)scm_to_pointer (event))->KeyInput.Key); +} + + +SCM +SEvent_SKeyInput_PressedDown (SCM event) +{ + return scm_from_bool + (((SEvent*)scm_to_pointer (event))->KeyInput.PressedDown); +} + extern "C" { void init_event_receiver (void) { - init_event_receiver_type (); - init_event_type (); - DEFINE_GSUBR ("event-key-input-key", 1, 0, 0, event_type); - DEFINE_GSUBR ("event-key-input-pressed", 1, 0, 0, event_type); - DEFINE_GSUBR ("event-type", 1, 0, 0, event_type); - DEFINE_GSUBR ("make-event-receiver", 1, 0, 0, make_event_receiver); + DEFINE_GSUBR ("IEventRecevier_make", 1, 0, 0, IEventRecevier_make); + DEFINE_GSUBR ("SEvent_EventType", 1, 0, 0, SEvent_EventType); + DEFINE_GSUBR ("SEvent_SGUIEvent_Caller", 1, 0, 0, SEvent_SGUIEvent_Caller); + DEFINE_GSUBR ("SEvent_SGUIEvent_EventType", 1, 0, 0, SEvent_SGUIEvent_EventType); + DEFINE_GSUBR ("SEvent_SKeyInput_Key", 1, 0, 0, SEvent_SKeyInput_Key); + DEFINE_GSUBR ("SEvent_SKeyInput_PressedDown", 1, 0, 0, SEvent_SKeyInput_PressedDown); } - DEFINE_WRAPPED_TYPE (irr::IEventReceiver*, "event-receiver", - init_event_receiver_type, event_receiver_p, - wrap_event_receiver, unwrap_event_receiver); +} - DEFINE_WRAPPED_TYPE (irr::SEvent*, "event", - init_event_type, event_p, - wrap_event, unwrap_event); +SCM +scm_from_event_type (EEVENT_TYPE event_type) +{ + switch (event_type) + { + case EET_GUI_EVENT: + return scm_from_utf8_symbol ("gui-event"); + break; - SCM - event_key_input_key (SCM event) - { - return scm_from_key_code (unwrap_event (event)->KeyInput.Key); - } + case EET_MOUSE_INPUT_EVENT: + return scm_from_utf8_symbol ("mouse-input-event"); + break; - SCM - event_key_input_pressed (SCM event) - { - return scm_from_bool (unwrap_event (event)->KeyInput.PressedDown); - } + case EET_KEY_INPUT_EVENT: + return scm_from_utf8_symbol ("key-input-event"); + break; - SCM - event_type (SCM event) - { - return scm_from_event_type (unwrap_event (event)->EventType); - } + case EET_JOYSTICK_INPUT_EVENT: + return scm_from_utf8_symbol ("joystick-input-event"); + break; - SCM - make_event_receiver (SCM proc_on_event) - { - class CustomReceiver : public irr::IEventReceiver + case EET_LOG_TEXT_EVENT: + return scm_from_utf8_symbol ("log-text-event"); + break; + + case EET_USER_EVENT: + return scm_from_utf8_symbol ("user-event"); + break; + + default: + SCM type = scm_from_uint (event_type); + scm_error (scm_arg_type_key, NULL, "Wrong event type: ~S", + scm_list_1 (type), scm_list_1 (type)); + } +} + + +SCM +scm_from_gui_event_type (gui::EGUI_EVENT_TYPE gui_event_type) +{ + switch (gui_event_type) { - SCM scm_on_event; - - public: - CustomReceiver (SCM on_event) - { - scm_on_event = on_event; - } - - virtual bool OnEvent (const irr::SEvent& event) - { - return scm_to_bool (scm_call_1 (scm_on_event, wrap_event ((irr::SEvent*)&event))); - } - }; - - CustomReceiver* receiver = new CustomReceiver (proc_on_event); - return wrap_event_receiver (receiver); - } + case gui::EGET_ELEMENT_FOCUS_LOST: + return scm_from_utf8_symbol ("element-focus-lost"); + break; - SCM - scm_from_event_type (irr::EEVENT_TYPE event_type) - { - switch (event_type) - { - case irr::EET_GUI_EVENT: - return scm_from_utf8_symbol ("gui-event"); - break; - - case irr::EET_MOUSE_INPUT_EVENT: - return scm_from_utf8_symbol ("mouse-input-event"); - break; - - case irr::EET_KEY_INPUT_EVENT: - return scm_from_utf8_symbol ("key-input-event"); - break; - - case irr::EET_JOYSTICK_INPUT_EVENT: - return scm_from_utf8_symbol ("joystick-input-event"); - break; - - case irr::EET_LOG_TEXT_EVENT: - return scm_from_utf8_symbol ("log-text-event"); - break; - - case irr::EET_USER_EVENT: - return scm_from_utf8_symbol ("user-event"); - break; - - default: - SCM type = scm_from_uint (event_type); - scm_error (scm_arg_type_key, NULL, "Wrong event type: ~S", - scm_list_1 (type), scm_list_1 (type)); - } - } + case gui::EGET_ELEMENT_FOCUSED: + return scm_from_utf8_symbol ("element-focused"); + break; + + case gui::EGET_ELEMENT_HOVERED: + return scm_from_utf8_symbol ("element-hovered"); + break; + + case gui::EGET_ELEMENT_LEFT: + return scm_from_utf8_symbol ("element-left"); + break; + + case gui::EGET_ELEMENT_CLOSED: + return scm_from_utf8_symbol ("element-closed"); + break; + + case gui::EGET_BUTTON_CLICKED: + return scm_from_utf8_symbol ("button-clicked"); + break; + + case gui::EGET_SCROLL_BAR_CHANGED: + return scm_from_utf8_symbol ("scrollbar-changed"); + break; + + case gui::EGET_CHECKBOX_CHANGED: + return scm_from_utf8_symbol ("checkbox-changed"); + break; + + case gui::EGET_LISTBOX_CHANGED: + return scm_from_utf8_symbol ("listbox-changed"); + break; + + case gui::EGET_LISTBOX_SELECTED_AGAIN: + return scm_from_utf8_symbol ("listbox-selected-again"); + break; + + case gui::EGET_FILE_SELECTED: + return scm_from_utf8_symbol ("file-selected"); + break; + + case gui::EGET_DIRECTORY_SELECTED: + return scm_from_utf8_symbol ("directory-selected"); + break; + + case gui::EGET_FILE_CHOOSE_DIALOG_CANCELLED: + return scm_from_utf8_symbol ("file-choose-dialog-cancelled"); + break; + + case gui::EGET_MESSAGEBOX_YES: + return scm_from_utf8_symbol ("messagebox-yes"); + break; + + case gui::EGET_MESSAGEBOX_NO: + return scm_from_utf8_symbol ("messagebox-no"); + break; + + case gui::EGET_MESSAGEBOX_OK: + return scm_from_utf8_symbol ("messagebox-ok"); + break; + + case gui::EGET_MESSAGEBOX_CANCEL: + return scm_from_utf8_symbol ("messagebox-cancel"); + break; + + case gui::EGET_EDITBOX_ENTER: + return scm_from_utf8_symbol ("editbox-enter"); + break; + + case gui::EGET_EDITBOX_CHANGED: + return scm_from_utf8_symbol ("editbox-changed"); + break; + + case gui::EGET_EDITBOX_MARKING_CHANGED: + return scm_from_utf8_symbol ("editbox-marking-changed"); + break; + + case gui::EGET_TAB_CHANGED: + return scm_from_utf8_symbol ("tab-changed"); + break; + + case gui::EGET_MENU_ITEM_SELECTED: + return scm_from_utf8_symbol ("menu-item-selected"); + break; + + case gui::EGET_COMBO_BOX_CHANGED: + return scm_from_utf8_symbol ("combo-box-changed"); + break; + + case gui::EGET_SPINBOX_CHANGED: + return scm_from_utf8_symbol ("spinbox-changed"); + break; + + case gui::EGET_TABLE_CHANGED: + return scm_from_utf8_symbol ("table-changed"); + break; + + case gui::EGET_TABLE_HEADER_CHANGED: + return scm_from_utf8_symbol ("table-header-changed"); + break; + + case gui::EGET_TABLE_SELECTED_AGAIN: + return scm_from_utf8_symbol ("table-selected-again"); + break; + + case gui::EGET_TREEVIEW_NODE_DESELECT: + return scm_from_utf8_symbol ("treeview-node-deselect"); + break; + + case gui::EGET_TREEVIEW_NODE_SELECT: + return scm_from_utf8_symbol ("treeview-node-select"); + break; + + case gui::EGET_TREEVIEW_NODE_EXPAND: + return scm_from_utf8_symbol ("treeview-node-expand"); + break; + + case gui::EGET_TREEVIEW_NODE_COLLAPSE: + return scm_from_utf8_symbol ("treeview-node-collapse"); + break; + default: + SCM type = scm_from_uint (gui_event_type); + scm_error (scm_arg_type_key, NULL, "Wrong GUI event type: ~S", + scm_list_1 (type), scm_list_1 (type)); + } }