[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