[Scummvm-git-logs] scummvm master -> b2b8b17133823a618a78379d92d20908f9b1bc65
dreammaster
dreammaster at scummvm.org
Mon Apr 12 02:55:39 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
b2b8b17133 AGS: Fix handling of extended keypresses
Commit: b2b8b17133823a618a78379d92d20908f9b1bc65
https://github.com/scummvm/scummvm/commit/b2b8b17133823a618a78379d92d20908f9b1bc65
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2021-04-11T19:55:21-07:00
Commit Message:
AGS: Fix handling of extended keypresses
Changed paths:
engines/ags/engine/ac/keycode.h
engines/ags/engine/ac/sys_events.cpp
engines/ags/events.cpp
engines/ags/events.h
diff --git a/engines/ags/engine/ac/keycode.h b/engines/ags/engine/ac/keycode.h
index b1086a9214..4008603749 100644
--- a/engines/ags/engine/ac/keycode.h
+++ b/engines/ags/engine/ac/keycode.h
@@ -28,7 +28,6 @@
namespace AGS3 {
#define EXTENDED_KEY_CODE ('\0')
-#define EXTENDED_KEY_CODE_MACOS ('?')
#define AGS_EXT_KEY_SHIFT 300
diff --git a/engines/ags/engine/ac/sys_events.cpp b/engines/ags/engine/ac/sys_events.cpp
index 5f3ecc6176..d406055b66 100644
--- a/engines/ags/engine/ac/sys_events.cpp
+++ b/engines/ags/engine/ac/sys_events.cpp
@@ -98,21 +98,6 @@ int ags_getch() {
const int ascii = (gott & 0x00ff);
bool is_extended = (ascii == EXTENDED_KEY_CODE);
- // On macos, the extended keycode is the ascii character '?' or '\0' if alt-key
- // so check it's not actually the character '?'
-#if AGS_PLATFORM_OS_MACOS && ! AGS_PLATFORM_OS_IOS
- is_extended = is_extended || ((ascii == EXTENDED_KEY_CODE_MACOS) && (scancode != __allegro_KEY_SLASH));
-#endif
-
- /* char message[200];
- sprintf(message, "Scancode: %04X", gott);
- Debug::Printf(message);*/
-
- /*if ((scancode >= KEY_0_PAD) && (scancode <= KEY_9_PAD)) {
- // fix numeric pad keys if numlock is off (allegro 4.2 changed this behaviour)
- if ((_G(key_shifts) & KB_NUMLOCK_FLAG) == 0)
- gott = (gott & 0xff00) | EXTENDED_KEY_CODE;
- }*/
if (gott == READKEY_CODE_ALT_TAB) {
// Alt+Tab, it gets stuck down unless we do this
diff --git a/engines/ags/events.cpp b/engines/ags/events.cpp
index 704065d230..673e189925 100644
--- a/engines/ags/events.cpp
+++ b/engines/ags/events.cpp
@@ -23,6 +23,7 @@
#include "ags/events.h"
#include "common/system.h"
#include "ags/globals.h"
+#include "ags/engine/ac/keycode.h"
namespace AGS {
@@ -81,9 +82,15 @@ int EventsManager::readKey() {
Common::KeyState keyState = _pendingKeys.pop();
- int code = getScancode(keyState.keycode) << 8;
- if (keyState.ascii <= 127)
- code = keyState.ascii;
+ int scancode = getScancode(keyState.keycode);
+ int code = scancode << 8;
+
+ if (isExtendedKey(keyState.keycode))
+ code |= EXTENDED_KEY_CODE;
+ else if (keyState.flags == 0)
+ code |= keyState.ascii;
+ else
+ code |= scancode;
return code;
}
@@ -106,6 +113,33 @@ bool EventsManager::isModifierKey(const Common::KeyCode &keycode) const {
|| keycode == Common::KEYCODE_SCROLLOCK;
}
+bool EventsManager::isExtendedKey(const Common::KeyCode &keycode) const {
+ const Common::KeyCode EXTENDED_KEYS[] = {
+ Common::KEYCODE_F1, Common::KEYCODE_F2, Common::KEYCODE_F3,
+ Common::KEYCODE_F4, Common::KEYCODE_F5, Common::KEYCODE_F6,
+ Common::KEYCODE_F7, Common::KEYCODE_F8, Common::KEYCODE_F9,
+ Common::KEYCODE_F10, Common::KEYCODE_F11, Common::KEYCODE_F12,
+ Common::KEYCODE_KP0, Common::KEYCODE_KP1, Common::KEYCODE_KP2,
+ Common::KEYCODE_KP3, Common::KEYCODE_KP4, Common::KEYCODE_KP5,
+ Common::KEYCODE_KP6, Common::KEYCODE_KP7, Common::KEYCODE_KP8,
+ Common::KEYCODE_KP9, Common::KEYCODE_KP_PERIOD,
+ Common::KEYCODE_INSERT, Common::KEYCODE_DELETE,
+ Common::KEYCODE_HOME, Common::KEYCODE_END,
+ Common::KEYCODE_PAGEUP, Common::KEYCODE_PAGEDOWN,
+ Common::KEYCODE_LEFT, Common::KEYCODE_RIGHT,
+ Common::KEYCODE_UP, Common::KEYCODE_DOWN,
+ Common::KEYCODE_INVALID
+ };
+
+ for (const Common::KeyCode *kc = EXTENDED_KEYS;
+ *kc != Common::KEYCODE_INVALID; ++kc) {
+ if (keycode == *kc)
+ return true;
+ }
+
+ return false;
+}
+
int EventsManager::getScancode(Common::KeyCode keycode) const {
if (keycode >= Common::KEYCODE_a && keycode <= Common::KEYCODE_z)
return (int)keycode - Common::KEYCODE_a + AGS3::__allegro_KEY_A;
diff --git a/engines/ags/events.h b/engines/ags/events.h
index 4f361c0093..def00a1a1c 100644
--- a/engines/ags/events.h
+++ b/engines/ags/events.h
@@ -37,7 +37,7 @@ private:
Common::Array<bool> _keys;
bool isModifierKey(const Common::KeyCode &keycode) const;
-
+ bool isExtendedKey(const Common::KeyCode &keycode) const;
int getScancode(Common::KeyCode keycode) const;
void updateKeys(const Common::KeyState &keyState, bool isDown);
More information about the Scummvm-git-logs
mailing list