aboutsummaryrefslogtreecommitdiff
path: root/engines/gargoyle/events.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/gargoyle/events.cpp')
-rw-r--r--engines/gargoyle/events.cpp98
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