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