diff options
Diffstat (limited to 'engines/gargoyle/events.cpp')
-rw-r--r-- | engines/gargoyle/events.cpp | 98 |
1 files changed, 97 insertions, 1 deletions
diff --git a/engines/gargoyle/events.cpp b/engines/gargoyle/events.cpp index 6fcf6340c8..00adce84ab 100644 --- a/engines/gargoyle/events.cpp +++ b/engines/gargoyle/events.cpp @@ -21,11 +21,35 @@ */ #include "gargoyle/events.h" +#include "gargoyle/clipboard.h" +#include "gargoyle/gargoyle.h" +#include "gargoyle/windows.h" namespace Gargoyle { void Events::getEvent(event_t *event, bool polled) { - // TODO + _currentEvent = event; + event->clear(); + + Common::Event ev; + dispatchEvent(*_currentEvent, polled); + + if (!polled) { + while (!g_vm->shouldQuit() && _currentEvent->type == evtype_None && !_timeouts) { + pollEvents(); + g_system->delayMillis(10); + + dispatchEvent(*_currentEvent, polled); + } + } + + if (_currentEvent->type == evtype_None && _timeouts) { + store(evtype_Timer, NULL, 0, 0); + dispatchEvent(*_currentEvent, polled); + _timeouts = false; + } + + _currentEvent = nullptr; } void Events::store(EvType type, Window *win, uint32 val1, uint32 val2) { @@ -60,4 +84,76 @@ void Events::dispatchEvent(Event &ev, bool polled) { ev = dispatch; } +void Events::pollEvents() { + Common::Event event; + + do { + g_system->getEventManager()->pollEvent(event); + + switch (event.type) { + case Common::EVENT_KEYDOWN: + handleKeyDown(event.kbd); + return; + default: + break; + } + } while (event.type == Common::EVENT_MOUSEMOVE); +} + +void Events::handleKeyDown(const Common::KeyState &ks) { + Clipboard &clipboard = *g_vm->_clipboard; + Windows &windows = *g_vm->_windows; + + if (ks.flags & Common::KBD_CTRL) { + if (ks.keycode == Common::KEYCODE_a) + windows.inputHandleKey(keycode_Home); + else if (ks.keycode == Common::KEYCODE_c) + clipboard.send(); + else if (ks.keycode == Common::KEYCODE_e) + windows.inputHandleKey(keycode_End); + else if (ks.keycode == Common::KEYCODE_u) + windows.inputHandleKey(keycode_Escape); + else if (ks.keycode == Common::KEYCODE_v) + clipboard.receive(); + else if (ks.keycode == Common::KEYCODE_x) + clipboard.send(); + else if (ks.keycode == Common::KEYCODE_LEFT || ks.keycode == Common::KEYCODE_KP4) + windows.inputHandleKey(keycode_SkipWordLeft); + else if (ks.keycode == Common::KEYCODE_RIGHT || ks.keycode == Common::KEYCODE_KP6) + windows.inputHandleKey(keycode_SkipWordRight); + + return; + } + + if (ks.flags & Common::KBD_ALT) + return; + + if (ks.keycode == Common::KEYCODE_RETURN) windows.inputHandleKey(keycode_Return); + else if (ks.keycode == Common::KEYCODE_BACKSPACE) windows.inputHandleKey(keycode_Delete); + else if (ks.keycode == Common::KEYCODE_DELETE) windows.inputHandleKey(keycode_Erase); + else if (ks.keycode == Common::KEYCODE_TAB) windows.inputHandleKey(keycode_Tab); + else if (ks.keycode == Common::KEYCODE_UP) windows.inputHandleKey(keycode_PageUp); + else if (ks.keycode == Common::KEYCODE_PAGEDOWN) windows.inputHandleKey(keycode_PageDown); + else if (ks.keycode == Common::KEYCODE_HOME) windows.inputHandleKey(keycode_Home); + else if (ks.keycode == Common::KEYCODE_END) windows.inputHandleKey(keycode_End); + else if (ks.keycode == Common::KEYCODE_LEFT) windows.inputHandleKey(keycode_Left); + else if (ks.keycode == Common::KEYCODE_RIGHT) windows.inputHandleKey(keycode_Right); + else if (ks.keycode == Common::KEYCODE_UP) windows.inputHandleKey(keycode_Up); + else if (ks.keycode == Common::KEYCODE_DOWN) windows.inputHandleKey(keycode_Down); + else if (ks.keycode == Common::KEYCODE_ESCAPE) windows.inputHandleKey(keycode_Escape); + else if (ks.keycode == Common::KEYCODE_F1) windows.inputHandleKey(keycode_Func1); + else if (ks.keycode == Common::KEYCODE_F2) windows.inputHandleKey(keycode_Func2); + else if (ks.keycode == Common::KEYCODE_F3) windows.inputHandleKey(keycode_Func3); + else if (ks.keycode == Common::KEYCODE_F4) windows.inputHandleKey(keycode_Func4); + else if (ks.keycode == Common::KEYCODE_F5) windows.inputHandleKey(keycode_Func5); + else if (ks.keycode == Common::KEYCODE_F6) windows.inputHandleKey(keycode_Func6); + else if (ks.keycode == Common::KEYCODE_F7) windows.inputHandleKey(keycode_Func7); + else if (ks.keycode == Common::KEYCODE_F8) windows.inputHandleKey(keycode_Func8); + else if (ks.keycode == Common::KEYCODE_F9) windows.inputHandleKey(keycode_Func9); + else if (ks.keycode == Common::KEYCODE_F10) windows.inputHandleKey(keycode_Func10); + else if (ks.keycode == Common::KEYCODE_F11) windows.inputHandleKey(keycode_Func11); + else if (ks.keycode == Common::KEYCODE_F12) windows.inputHandleKey(keycode_Func12); + else windows.inputHandleKey(ks.ascii); +} + } // End of namespace Gargoyle |