aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorYotam Barnoy2010-02-21 04:04:13 +0000
committerYotam Barnoy2010-02-21 04:04:13 +0000
commitef330ed9b4e5d6252134ed137b042593f79d02a9 (patch)
tree919c4ae91efca10102936a1833251b48323b8983 /common
parentcebb052e2cfd963b95d7357b7c21dc8c437e058a (diff)
downloadscummvm-rg350-ef330ed9b4e5d6252134ed137b042593f79d02a9.tar.gz
scummvm-rg350-ef330ed9b4e5d6252134ed137b042593f79d02a9.tar.bz2
scummvm-rg350-ef330ed9b4e5d6252134ed137b042593f79d02a9.zip
Patch for bug 2943361 by littleboy, adding full kb modifier support to all engines + GUI and proper keypad handling
svn-id: r48101
Diffstat (limited to 'common')
-rw-r--r--common/keyboard.h29
1 files changed, 20 insertions, 9 deletions
diff --git a/common/keyboard.h b/common/keyboard.h
index cf595d4dd8..928b59d997 100644
--- a/common/keyboard.h
+++ b/common/keyboard.h
@@ -40,15 +40,15 @@ enum KeyCode {
KEYCODE_PAUSE = 19,
KEYCODE_ESCAPE = 27,
KEYCODE_SPACE = 32,
- KEYCODE_EXCLAIM = 33,
- KEYCODE_QUOTEDBL = 34,
- KEYCODE_HASH = 35,
- KEYCODE_DOLLAR = 36,
- KEYCODE_AMPERSAND = 38,
- KEYCODE_QUOTE = 39,
+ KEYCODE_EXCLAIM = 33, // !
+ KEYCODE_QUOTEDBL = 34, // "
+ KEYCODE_HASH = 35, // #
+ KEYCODE_DOLLAR = 36, // $
+ KEYCODE_AMPERSAND = 38, // &
+ KEYCODE_QUOTE = 39, // '
KEYCODE_LEFTPAREN = 40,
KEYCODE_RIGHTPAREN = 41,
- KEYCODE_ASTERISK = 42,
+ KEYCODE_ASTERISK = 42, // *
KEYCODE_PLUS = 43,
KEYCODE_COMMA = 44,
KEYCODE_MINUS = 45,
@@ -105,6 +105,7 @@ enum KeyCode {
KEYCODE_y = 121,
KEYCODE_z = 122,
KEYCODE_DELETE = 127,
+ KEYCODE_TILDE = 176, // ~
// Numeric keypad
KEYCODE_KP0 = 256,
@@ -215,7 +216,10 @@ enum {
enum {
KBD_CTRL = 1 << 0,
KBD_ALT = 1 << 1,
- KBD_SHIFT = 1 << 2
+ KBD_SHIFT = 1 << 2,
+ KBD_NUM = 1 << 3,
+ KBD_CAPS = 1 << 4,
+ KBD_SCRL = 1 << 5
};
/**
@@ -245,7 +249,7 @@ struct KeyState {
/**
* Status of the modifier keys. Bits are set in this for each
* pressed modifier
- * @see KBD_CTRL, KBD_ALT, KBD_SHIFT
+ * @see KBD_CTRL, KBD_ALT, KBD_SHIFT, KBD_NUM, KBD_CAPS, KBD_SCRL
*/
byte flags;
@@ -266,6 +270,13 @@ struct KeyState {
ascii = flags = 0;
}
+ /**
+ * Check for flags, ignoring the sticky flags (KBD_NUM, KBD_CAPS, KBD_SCRL)
+ */
+ bool hasFlags(byte f) {
+ return f == (flags & ~(KBD_NUM|KBD_CAPS|KBD_SCRL));
+ }
+
bool operator ==(const KeyState &x) const {
return keycode == x.keycode && ascii == x.ascii && flags == x.flags;
}