From 37021c43a49aaaaa5f1c6866f9dddce961d842d9 Mon Sep 17 00:00:00 2001 From: Chris Apers Date: Sat, 16 Jun 2007 10:33:48 +0000 Subject: Fixed arrow keys (hard and emu) svn-id: r27453 --- backends/platform/PalmOS/Src/base_event.cpp | 196 ++++++++++++++++++---------- 1 file changed, 129 insertions(+), 67 deletions(-) (limited to 'backends/platform/PalmOS/Src/base_event.cpp') diff --git a/backends/platform/PalmOS/Src/base_event.cpp b/backends/platform/PalmOS/Src/base_event.cpp index d28fd913c0..c2220d56a1 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 = 276; + 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 = 275; + 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 = 273; + 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 = 274; + 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 = 276; + + } else if (keyCurrentState & _keyExtra.bitRight) { + _keyExtraPressed |= _keyExtra.bitRight; + event.kbd.keycode = 275; + + } else if (keyCurrentState & _keyExtra.bitUp) { + _keyExtraPressed |= _keyExtra.bitUp; + event.kbd.keycode = 273; + + } else if (keyCurrentState & _keyExtra.bitDown) { + _keyExtraPressed |= _keyExtra.bitDown; + event.kbd.keycode = 274; + } + + 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) @@ -177,9 +241,9 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) { k = 273; break; case chrDownArrow: k = 274; break; - case chrLeftArrow: - k = 275; break; case chrRightArrow: + k = 275; break; + case chrLeftArrow: k = 276; break; } @@ -225,9 +289,9 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) { k = 273; break; case chrDownArrow: k = 274; break; - case chrLeftArrow: - k = 275; break; case chrRightArrow: + k = 275; break; + case chrLeftArrow: k = 276; break; } @@ -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); -- cgit v1.2.3 From 2b23374468549722c8068d448d9bbf5e100d7301 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Fri, 22 Jun 2007 20:04:44 +0000 Subject: Converted lots of code to use Common::ASCII_* and COMMON::KEYCODE_* constants. This also revealed the evil mixing of keycodes and ascii we do in many places :-/ svn-id: r27616 --- backends/platform/PalmOS/Src/base_event.cpp | 42 ++++++++++++++--------------- 1 file changed, 21 insertions(+), 21 deletions(-) (limited to 'backends/platform/PalmOS/Src/base_event.cpp') diff --git a/backends/platform/PalmOS/Src/base_event.cpp b/backends/platform/PalmOS/Src/base_event.cpp index c2220d56a1..620195deeb 100644 --- a/backends/platform/PalmOS/Src/base_event.cpp +++ b/backends/platform/PalmOS/Src/base_event.cpp @@ -104,7 +104,7 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) { _keyExtraPressed &= ~_keyExtra.bitLeft; event.type = Common::EVENT_KEYUP; - event.kbd.keycode = 276; + event.kbd.keycode = Common::KEYCODE_LEFT; event.kbd.ascii = event.kbd.keycode; event.kbd.flags = 0; return true; @@ -115,7 +115,7 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) { _keyExtraPressed &= ~_keyExtra.bitRight; event.type = Common::EVENT_KEYUP; - event.kbd.keycode = 275; + event.kbd.keycode = Common::KEYCODE_RIGHT; event.kbd.ascii = event.kbd.keycode; event.kbd.flags = 0; return true; @@ -126,7 +126,7 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) { _keyExtraPressed &= ~_keyExtra.bitUp; event.type = Common::EVENT_KEYUP; - event.kbd.keycode = 273; + event.kbd.keycode = Common::KEYCODE_UP; event.kbd.ascii = event.kbd.keycode; event.kbd.flags = 0; return true; @@ -137,7 +137,7 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) { _keyExtraPressed &= ~_keyExtra.bitDown; event.type = Common::EVENT_KEYUP; - event.kbd.keycode = 274; + event.kbd.keycode = Common::KEYCODE_DOWN; event.kbd.ascii = event.kbd.keycode; event.kbd.flags = 0; return true; @@ -180,19 +180,19 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) { if (gVars->arrowKeys) { if (keyCurrentState & _keyExtra.bitLeft) { _keyExtraPressed |= _keyExtra.bitLeft; - event.kbd.keycode = 276; + event.kbd.keycode = Common::KEYCODE_LEFT; } else if (keyCurrentState & _keyExtra.bitRight) { _keyExtraPressed |= _keyExtra.bitRight; - event.kbd.keycode = 275; + event.kbd.keycode = Common::KEYCODE_RIGHT; } else if (keyCurrentState & _keyExtra.bitUp) { _keyExtraPressed |= _keyExtra.bitUp; - event.kbd.keycode = 273; + event.kbd.keycode = Common::EVENT_KEYUP; } else if (keyCurrentState & _keyExtra.bitDown) { _keyExtraPressed |= _keyExtra.bitDown; - event.kbd.keycode = 274; + event.kbd.keycode = Common::KEYCODE_DOWN; } event.type = Common::EVENT_KEYDOWN; @@ -238,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; + k = Common::KEYCODE_DOWN; break; case chrRightArrow: - k = 275; break; + k = Common::KEYCODE_RIGHT; break; case chrLeftArrow: - k = 276; break; + k = Common::KEYCODE_LEFT; break; } if (k) { @@ -261,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::KEYCODE_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::ASCII_F5; // FIXME: Should be changed to KEYCODE_F5 + event.kbd.ascii = Common::ASCII_F5; event.kbd.flags = 0; return true; @@ -286,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; + k = Common::KEYCODE_DOWN; break; case chrRightArrow: - k = 275; break; + k = Common::KEYCODE_RIGHT; break; case chrLeftArrow: - k = 276; break; + k = Common::KEYCODE_LEFT; break; } if (k) { @@ -411,7 +411,7 @@ 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'); + key = (key == '0') ? 324 : (Common::ASCII_F1 + key - '1'); mask = 0; #ifdef STDLIB_TRACE_MEMORY -- cgit v1.2.3 From 05a70fc8e404bd2003e8faa3bc1d4564918eca03 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Fri, 22 Jun 2007 23:43:17 +0000 Subject: Produce 'correct' keycode/ascii values for function keys svn-id: r27642 --- backends/platform/PalmOS/Src/base_event.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'backends/platform/PalmOS/Src/base_event.cpp') diff --git a/backends/platform/PalmOS/Src/base_event.cpp b/backends/platform/PalmOS/Src/base_event.cpp index 620195deeb..a3913529b6 100644 --- a/backends/platform/PalmOS/Src/base_event.cpp +++ b/backends/platform/PalmOS/Src/base_event.cpp @@ -262,14 +262,14 @@ bool OSystem_PalmBase::pollEvent(Common::Event &event) { case vchrLaunch: event.type = Common::EVENT_KEYDOWN; event.kbd.keycode = Common::KEYCODE_ESCAPE; - event.kbd.ascii = 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 = Common::ASCII_F5; // FIXME: Should be changed to KEYCODE_F5 + event.kbd.keycode = Common::KEYCODE_F5; event.kbd.ascii = Common::ASCII_F5; event.kbd.flags = 0; return true; @@ -411,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 : (Common::ASCII_F1 + 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 -- cgit v1.2.3