diff options
Diffstat (limited to 'backends/platform/PalmOS/Src/base_event.cpp')
-rw-r--r-- | backends/platform/PalmOS/Src/base_event.cpp | 225 |
1 files changed, 146 insertions, 79 deletions
diff --git a/backends/platform/PalmOS/Src/base_event.cpp b/backends/platform/PalmOS/Src/base_event.cpp index d28fd913c0..a3913529b6 100644 --- a/backends/platform/PalmOS/Src/base_event.cpp +++ b/backends/platform/PalmOS/Src/base_event.cpp @@ -93,73 +93,137 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) { sound_handler(); for(;;) { + // check for hardkey repeat for mouse emulation + keyCurrentState = KeyCurrentState(); + // if it was a key pressed, let the keyup event raise - if (_wasKey) { - // check for hardkey repeat for mouse emulation - keyCurrentState = KeyCurrentState(); - - if (!(keyCurrentState & _keyExtraMask)) { - _lastKeyRepeat = 0; - - } else if (getMillis() >= (_keyExtraRepeat + _keyExtraDelay)) { - _keyExtraRepeat = getMillis(); - - if (gVars->arrowKeys) { -/* if HARD_KEY(Up, chrUpArrow) - else if HARD_KEY(Down, chrDownArrow) - else if HARD_KEY(Left, chrLeftArrow) - else if HARD_KEY(Right, chrRightArrow) -*/ - } else { - // button released ? - if (_keyExtraPressed) { - if (_keyExtraPressed & _keyExtra.bitActionA) { - if (!(keyCurrentState & _keyExtra.bitActionA)) { - _keyExtraPressed &= ~_keyExtra.bitActionA; - - event.type = Common::EVENT_LBUTTONUP; - event.mouse.x = _mouseCurState.x; - event.mouse.y = _mouseCurState.y; - return true; - } - } - - if (_keyExtraPressed & _keyExtra.bitActionB) { - if (!(keyCurrentState & _keyExtra.bitActionB)) { - _keyExtraPressed &= ~_keyExtra.bitActionB; - - event.type = Common::EVENT_RBUTTONUP; - event.mouse.x = _mouseCurState.x; - event.mouse.y = _mouseCurState.y; - return true; - } - } + if (_keyExtraPressed) { + if (gVars->arrowKeys) { + if (_keyExtraPressed & _keyExtra.bitLeft) { + if (!(keyCurrentState & _keyExtra.bitLeft)) { + _keyExtraPressed &= ~_keyExtra.bitLeft; + + event.type = Common::EVENT_KEYUP; + event.kbd.keycode = Common::KEYCODE_LEFT; + event.kbd.ascii = event.kbd.keycode; + event.kbd.flags = 0; + return true; + } + } + if (_keyExtraPressed & _keyExtra.bitRight) { + if (!(keyCurrentState & _keyExtra.bitRight)) { + _keyExtraPressed &= ~_keyExtra.bitRight; + + event.type = Common::EVENT_KEYUP; + event.kbd.keycode = Common::KEYCODE_RIGHT; + event.kbd.ascii = event.kbd.keycode; + event.kbd.flags = 0; + return true; + } + } + if (_keyExtraPressed & _keyExtra.bitUp) { + if (!(keyCurrentState & _keyExtra.bitUp)) { + _keyExtraPressed &= ~_keyExtra.bitUp; + + event.type = Common::EVENT_KEYUP; + event.kbd.keycode = Common::KEYCODE_UP; + event.kbd.ascii = event.kbd.keycode; + event.kbd.flags = 0; + return true; + } + } + if (_keyExtraPressed & _keyExtra.bitDown) { + if (!(keyCurrentState & _keyExtra.bitDown)) { + _keyExtraPressed &= ~_keyExtra.bitDown; + + event.type = Common::EVENT_KEYUP; + event.kbd.keycode = Common::KEYCODE_DOWN; + event.kbd.ascii = event.kbd.keycode; + event.kbd.flags = 0; + return true; } + } + } - Int8 sx = 0; - Int8 sy = 0; - - if (keyCurrentState & _keyExtra.bitUp) - sy = -1; - else if (keyCurrentState & _keyExtra.bitDown) - sy = +1; - - if (keyCurrentState & _keyExtra.bitLeft) - sx = -1; - else if (keyCurrentState & _keyExtra.bitRight) - sx = +1; - - if (sx || sy) { - simulate_mouse(event, sx, sy, &x, &y); - event.type = Common::EVENT_MOUSEMOVE; - event.mouse.x = x; - event.mouse.y = y; - warpMouse(x, y); + if (_keyExtraPressed & _keyExtra.bitActionA) { + if (!(keyCurrentState & _keyExtra.bitActionA)) { + _keyExtraPressed &= ~_keyExtra.bitActionA; - return true; - } + event.type = Common::EVENT_LBUTTONUP; + event.mouse.x = _mouseCurState.x; + event.mouse.y = _mouseCurState.y; + return true; + } + } + + if (_keyExtraPressed & _keyExtra.bitActionB) { + if (!(keyCurrentState & _keyExtra.bitActionB)) { + _keyExtraPressed &= ~_keyExtra.bitActionB; + + event.type = Common::EVENT_RBUTTONUP; + event.mouse.x = _mouseCurState.x; + event.mouse.y = _mouseCurState.y; + return true; } } + + // no more event till up is raised + return false; + } + + if (!(keyCurrentState & _keyExtraMask)) { + _lastKeyRepeat = 0; + + } else if (getMillis() >= (_keyExtraRepeat + _keyExtraDelay)) { + _keyExtraRepeat = getMillis(); + + if (gVars->arrowKeys) { + if (keyCurrentState & _keyExtra.bitLeft) { + _keyExtraPressed |= _keyExtra.bitLeft; + event.kbd.keycode = Common::KEYCODE_LEFT; + + } else if (keyCurrentState & _keyExtra.bitRight) { + _keyExtraPressed |= _keyExtra.bitRight; + event.kbd.keycode = Common::KEYCODE_RIGHT; + + } else if (keyCurrentState & _keyExtra.bitUp) { + _keyExtraPressed |= _keyExtra.bitUp; + event.kbd.keycode = Common::EVENT_KEYUP; + + } else if (keyCurrentState & _keyExtra.bitDown) { + _keyExtraPressed |= _keyExtra.bitDown; + event.kbd.keycode = Common::KEYCODE_DOWN; + } + + event.type = Common::EVENT_KEYDOWN; + event.kbd.ascii = event.kbd.keycode; + event.kbd.flags = 0; + return true; + + } else { + Int8 sx = 0; + Int8 sy = 0; + + if (keyCurrentState & _keyExtra.bitUp) + sy = -1; + else if (keyCurrentState & _keyExtra.bitDown) + sy = +1; + + if (keyCurrentState & _keyExtra.bitLeft) + sx = -1; + else if (keyCurrentState & _keyExtra.bitRight) + sx = +1; + + if (sx || sy) { + simulate_mouse(event, sx, sy, &x, &y); + event.type = Common::EVENT_MOUSEMOVE; + event.mouse.x = x; + event.mouse.y = y; + warpMouse(x, y); + + return true; + } + } } #if defined(COMPILE_OS5) && defined(PALMOS_ARM) @@ -174,13 +238,13 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) { // arrow keys case chrUpArrow: - k = 273; break; + k = Common::KEYCODE_UP; break; case chrDownArrow: - k = 274; break; - case chrLeftArrow: - k = 275; break; + k = Common::KEYCODE_DOWN; break; case chrRightArrow: - k = 276; break; + k = Common::KEYCODE_RIGHT; break; + case chrLeftArrow: + k = Common::KEYCODE_LEFT; break; } if (k) { @@ -197,16 +261,16 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) { // ESC key case vchrLaunch: event.type = Common::EVENT_KEYDOWN; - event.kbd.keycode = 27; - event.kbd.ascii = 27; + event.kbd.keycode = Common::KEYCODE_ESCAPE; + event.kbd.ascii = Common::ASCII_ESCAPE; event.kbd.flags = 0; return true; // F5 = menu case vchrMenu: event.type = Common::EVENT_KEYDOWN; - event.kbd.keycode = 319; - event.kbd.ascii = 319; + event.kbd.keycode = Common::KEYCODE_F5; + event.kbd.ascii = Common::ASCII_F5; event.kbd.flags = 0; return true; @@ -222,13 +286,13 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) { // arrow keys case chrUpArrow: - k = 273; break; + k = Common::KEYCODE_UP; break; case chrDownArrow: - k = 274; break; - case chrLeftArrow: - k = 275; break; + k = Common::KEYCODE_DOWN; break; case chrRightArrow: - k = 276; break; + k = Common::KEYCODE_RIGHT; break; + case chrLeftArrow: + k = Common::KEYCODE_LEFT; break; } if (k) { @@ -249,13 +313,11 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) { ((ev.data.keyDown.chr == vchrAttnStateChanged) || (ev.data.keyDown.chr == vchrAttnUnsnooze))); - // graffiti strokes, auto-off, etc... if (!handled) if (SysHandleEvent(&ev)) continue; - switch(ev.eType) { case penMoveEvent: get_coordinates(&ev, x, y); @@ -349,8 +411,13 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) { // F1 -> F10 key if (key >= '0' && key <= '9' && mask == (Common::KBD_CTRL|Common::KBD_ALT)) { - key = (key == '0') ? 324 : (315 + key - '1'); - mask = 0; + key = (key - '0' + 10 - 1) % 10; // '0' -> 9, '1' -> 0, '2' -> 1, ... + _wasKey = true; + event.type = Common::EVENT_KEYDOWN; + event.kbd.keycode = Common::KEYCODE_F1 + key; + event.kbd.ascii = Common::ASCII_F1 + key; + event.kbd.flags = 0; + return true; #ifdef STDLIB_TRACE_MEMORY // print memory |