Update GUI::Key constructs
svn-id: r27643
This commit is contained in:
parent
05a70fc8e4
commit
f97cbb8294
9 changed files with 85 additions and 82 deletions
|
@ -59,7 +59,7 @@ static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode)
|
|||
return key;
|
||||
} else if (unicode) {
|
||||
return unicode;
|
||||
} else if (key >= 'a' && key <= 'z' && mod & KMOD_SHIFT) {
|
||||
} else if (key >= 'a' && key <= 'z' && (mod & KMOD_SHIFT)) {
|
||||
return key & ~0x20;
|
||||
} else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) {
|
||||
return 0;
|
||||
|
|
|
@ -122,7 +122,7 @@ void SymbianActions::initInstanceMain(OSystem *mainSystem) {
|
|||
|
||||
// Skip
|
||||
_action_enabled[ACTION_SKIP] = true;
|
||||
_key_action[ACTION_SKIP].setAscii(SDLK_ESCAPE);
|
||||
_key_action[ACTION_SKIP].setKey(SDLK_ESCAPE);
|
||||
}
|
||||
|
||||
void SymbianActions::initInstanceGame() {
|
||||
|
@ -150,28 +150,27 @@ void SymbianActions::initInstanceGame() {
|
|||
_action_enabled[ACTION_SAVE] = true;
|
||||
|
||||
if (is_queen) {
|
||||
_key_action[ACTION_SAVE].setAscii(SDLK_F1); // F1 key for FOTAQ
|
||||
_key_action[ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F1 key for FOTAQ
|
||||
} else if (is_sky) {
|
||||
_key_action[ACTION_SAVE].setAscii(63);
|
||||
_key_action[ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5);
|
||||
} else if (is_cine) {
|
||||
_key_action[ACTION_SAVE].setAscii(SDLK_F10); // F10
|
||||
_key_action[ACTION_SAVE].setKey(Common::ASCII_F10, SDLK_F10); // F10
|
||||
} else if (is_agi) {
|
||||
_key_action[ACTION_SAVE].setAscii(SDLK_ESCAPE);
|
||||
_key_action[ACTION_SAVE].setKey(Common::ASCII_ESCAPE, SDLK_ESCAPE);
|
||||
} else if (is_parallaction) {
|
||||
_key_action[ACTION_SAVE].setAscii(SDLK_s);
|
||||
_key_action[ACTION_SAVE].setKey('s', SDLK_s);
|
||||
} else {
|
||||
_key_action[ACTION_SAVE].setAscii(SDLK_F5); // F5 key
|
||||
_key_action[ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F5 key
|
||||
}
|
||||
}
|
||||
|
||||
// Enable fast mode
|
||||
_action_enabled[ACTION_FASTMODE] = true;
|
||||
_key_action[ACTION_FASTMODE].setAscii('f');
|
||||
_key_action[ACTION_FASTMODE].setFlags(KMOD_CTRL);
|
||||
_key_action[ACTION_FASTMODE].setKey('f', SDLK_f, KMOD_CTRL);
|
||||
|
||||
// Swap character
|
||||
_action_enabled[ACTION_SWAPCHAR] = true;
|
||||
_key_action[ACTION_SWAPCHAR].setAscii('b'); // b
|
||||
_key_action[ACTION_SWAPCHAR].setKey('b'); // b
|
||||
|
||||
// Zone
|
||||
_action_enabled[ACTION_ZONE] = true;
|
||||
|
@ -179,31 +178,30 @@ void SymbianActions::initInstanceGame() {
|
|||
// Multi function key
|
||||
_action_enabled[ACTION_MULTI] = true;
|
||||
if (is_agi)
|
||||
_key_action[ACTION_MULTI].setAscii(SDLK_PAUSE); // agi: show predictive dialog
|
||||
_key_action[ACTION_MULTI].setKey(SDLK_PAUSE); // agi: show predictive dialog
|
||||
else if (is_gob)
|
||||
_key_action[ACTION_MULTI].setAscii(315); // bargon : F1 to start
|
||||
_key_action[ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
|
||||
else if (gameid == "atlantis")
|
||||
_key_action[ACTION_MULTI].setAscii(SDLK_KP0); // fate of atlantis : Ins to sucker-punch
|
||||
_key_action[ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
|
||||
else
|
||||
_key_action[ACTION_MULTI].setAscii(86); // FT cheat : shift-V
|
||||
_key_action[ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
|
||||
|
||||
// Enable debugger
|
||||
_action_enabled[ACTION_DEBUGGER] = true;
|
||||
_key_action[ACTION_DEBUGGER].setAscii('d');
|
||||
_key_action[ACTION_DEBUGGER].setFlags(KMOD_CTRL);
|
||||
_key_action[ACTION_DEBUGGER].setKey('d', SDLK_d, KMOD_CTRL);
|
||||
|
||||
// Skip text
|
||||
if (!is_cine)
|
||||
_action_enabled[ACTION_SKIP_TEXT] = true;
|
||||
|
||||
if (is_queen) {
|
||||
_key_action[ACTION_SKIP_TEXT].setAscii(SDLK_SPACE);
|
||||
_key_action[ACTION_SKIP_TEXT].setKey(SDLK_SPACE);
|
||||
} else {
|
||||
_key_action[ACTION_SKIP_TEXT].setAscii(SDLK_PERIOD);
|
||||
_key_action[ACTION_SKIP_TEXT].setKey(SDLK_PERIOD);
|
||||
}
|
||||
|
||||
// Pause
|
||||
_key_action[ACTION_PAUSE].setAscii(' ');
|
||||
_key_action[ACTION_PAUSE].setKey(' ');
|
||||
_action_enabled[ACTION_PAUSE] = true;
|
||||
|
||||
// Quit
|
||||
|
|
|
@ -141,29 +141,29 @@ void CEActionsPocket::initInstanceGame() {
|
|||
|
||||
// Initialize keys for different actions
|
||||
// Pause
|
||||
_key_action[POCKET_ACTION_PAUSE].setAscii(VK_SPACE);
|
||||
_key_action[POCKET_ACTION_PAUSE].setKey(VK_SPACE);
|
||||
_action_enabled[POCKET_ACTION_PAUSE] = true;
|
||||
// Save
|
||||
if (is_simon || is_sword2 || is_gob || is_kyra || is_touche)
|
||||
_action_enabled[POCKET_ACTION_SAVE] = false;
|
||||
else if (is_queen) {
|
||||
_action_enabled[POCKET_ACTION_SAVE] = true;
|
||||
_key_action[POCKET_ACTION_SAVE].setAscii(286); // F1 key for FOTAQ
|
||||
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F1 key for FOTAQ
|
||||
} else if (is_sky) {
|
||||
_action_enabled[POCKET_ACTION_SAVE] = true;
|
||||
_key_action[POCKET_ACTION_SAVE].setAscii(63);
|
||||
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5);
|
||||
} else if (is_cine) {
|
||||
_action_enabled[POCKET_ACTION_SAVE] = true;
|
||||
_key_action[POCKET_ACTION_SAVE].setAscii(291); // F10
|
||||
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F10, SDLK_F10); // F10
|
||||
} else if (is_agi) {
|
||||
_action_enabled[POCKET_ACTION_SAVE] = true;
|
||||
_key_action[POCKET_ACTION_SAVE].setAscii(SDLK_ESCAPE);
|
||||
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_ESCAPE, SDLK_ESCAPE);
|
||||
} else if (is_parallaction) {
|
||||
_action_enabled[POCKET_ACTION_SAVE] = true;
|
||||
_key_action[POCKET_ACTION_SAVE].setAscii(SDLK_s);
|
||||
_key_action[POCKET_ACTION_SAVE].setKey('s', SDLK_s);
|
||||
} else {
|
||||
_action_enabled[POCKET_ACTION_SAVE] = true;
|
||||
_key_action[POCKET_ACTION_SAVE].setAscii(319); // F5 key
|
||||
_key_action[POCKET_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F5 key
|
||||
}
|
||||
// Quit
|
||||
_action_enabled[POCKET_ACTION_QUIT] = true;
|
||||
|
@ -171,9 +171,9 @@ void CEActionsPocket::initInstanceGame() {
|
|||
if (!is_cine && !is_parallaction)
|
||||
_action_enabled[POCKET_ACTION_SKIP] = true;
|
||||
if (is_simon || is_sky || is_sword2 || is_queen || is_sword1 || is_gob || is_saga || is_kyra || is_touche)
|
||||
_key_action[POCKET_ACTION_SKIP].setAscii(VK_ESCAPE);
|
||||
_key_action[POCKET_ACTION_SKIP].setKey(VK_ESCAPE);
|
||||
else
|
||||
_key_action[POCKET_ACTION_SKIP].setAscii(KEY_ALL_SKIP);
|
||||
_key_action[POCKET_ACTION_SKIP].setKey(KEY_ALL_SKIP);
|
||||
// Hide
|
||||
_action_enabled[POCKET_ACTION_HIDE] = true;
|
||||
// Keyboard
|
||||
|
@ -195,13 +195,13 @@ void CEActionsPocket::initInstanceGame() {
|
|||
// Multi function key
|
||||
_action_enabled[POCKET_ACTION_MULTI] = true;
|
||||
if (is_agi)
|
||||
_key_action[POCKET_ACTION_MULTI].setAscii(SDLK_PAUSE); // agi: show predictive dialog
|
||||
_key_action[POCKET_ACTION_MULTI].setKey(SDLK_PAUSE); // agi: show predictive dialog
|
||||
else if (is_gob)
|
||||
_key_action[POCKET_ACTION_MULTI].setAscii(315); // bargon : F1 to start
|
||||
_key_action[POCKET_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1); // bargon : F1 to start
|
||||
else if (gameid == "atlantis")
|
||||
_key_action[POCKET_ACTION_MULTI].setAscii(SDLK_KP0); // fate of atlantis : Ins to sucker-punch
|
||||
_key_action[POCKET_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
|
||||
else
|
||||
_key_action[POCKET_ACTION_MULTI].setAscii(86); // FT cheat : shift-V
|
||||
_key_action[POCKET_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
|
||||
// Key bind method
|
||||
_action_enabled[POCKET_ACTION_BINDKEYS] = true;
|
||||
}
|
||||
|
@ -242,9 +242,9 @@ bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) {
|
|||
// Note that the user can accomplish this via the virtual keyboard as well, this is just for convenience
|
||||
GUI::MessageDialog alert("Do you want to load or save the game?", "Load", "Save");
|
||||
if (alert.runModal() == GUI::kMessageOK)
|
||||
_key_action[action].setAscii(SDLK_l);
|
||||
_key_action[action].setKey(SDLK_l);
|
||||
else
|
||||
_key_action[action].setAscii(SDLK_s);
|
||||
_key_action[action].setKey(SDLK_s);
|
||||
}
|
||||
EventsBuffer::simulateKey(&_key_action[action], true);
|
||||
return true;
|
||||
|
|
|
@ -131,41 +131,41 @@ void CEActionsSmartphone::initInstanceGame() {
|
|||
_action_enabled[SMARTPHONE_ACTION_SAVE] = false;
|
||||
else if (is_queen) {
|
||||
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
||||
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(SDLK_F5); // F1 key for FOTAQ
|
||||
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F1 key for FOTAQ
|
||||
} else if (is_sky) {
|
||||
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
||||
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(SDLK_QUESTION);
|
||||
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5);
|
||||
} else if (is_cine) {
|
||||
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
||||
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(SDLK_F10); //F10
|
||||
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F10, SDLK_F10); //F10
|
||||
} else if (is_agi) {
|
||||
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
||||
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(SDLK_ESCAPE);
|
||||
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_ESCAPE, SDLK_ESCAPE);
|
||||
} else if (is_parallaction) {
|
||||
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
||||
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(SDLK_s);
|
||||
_key_action[SMARTPHONE_ACTION_SAVE].setKey('s', SDLK_s);
|
||||
} else {
|
||||
_action_enabled[SMARTPHONE_ACTION_SAVE] = true;
|
||||
_key_action[SMARTPHONE_ACTION_SAVE].setAscii(Common::ASCII_F5); // F5 key
|
||||
_key_action[SMARTPHONE_ACTION_SAVE].setKey(Common::ASCII_F5, SDLK_F5); // F5 key
|
||||
}
|
||||
// Skip
|
||||
_action_enabled[SMARTPHONE_ACTION_SKIP] = true;
|
||||
if (is_simon || is_sky || is_sword2 || is_queen || is_sword1 || is_gob || is_saga || is_kyra || is_touche)
|
||||
_key_action[SMARTPHONE_ACTION_SKIP].setAscii(VK_ESCAPE);
|
||||
_key_action[SMARTPHONE_ACTION_SKIP].setKey(VK_ESCAPE);
|
||||
else
|
||||
_key_action[SMARTPHONE_ACTION_SKIP].setAscii(KEY_ALL_SKIP);
|
||||
_key_action[SMARTPHONE_ACTION_SKIP].setKey(KEY_ALL_SKIP);
|
||||
// Zone
|
||||
_action_enabled[SMARTPHONE_ACTION_ZONE] = true;
|
||||
// Multi function key
|
||||
_action_enabled[SMARTPHONE_ACTION_MULTI] = true;
|
||||
if (is_agi)
|
||||
_key_action[SMARTPHONE_ACTION_MULTI].setAscii(SDLK_PAUSE); // agi: show predictive dialog
|
||||
_key_action[SMARTPHONE_ACTION_MULTI].setKey(SDLK_PAUSE); // agi: show predictive dialog
|
||||
else if (is_gob)
|
||||
_key_action[SMARTPHONE_ACTION_MULTI].setAscii(Common::ASCII_F1); // bargon : F1 to start
|
||||
_key_action[SMARTPHONE_ACTION_MULTI].setKey(Common::ASCII_F1, SDLK_F1) // bargon : F1 to start
|
||||
else if (gameid == "atlantis")
|
||||
_key_action[SMARTPHONE_ACTION_MULTI].setAscii(SDLK_KP0); // fate of atlantis : Ins to sucker-punch
|
||||
_key_action[SMARTPHONE_ACTION_MULTI].setKey(0, SDLK_KP0); // fate of atlantis : Ins to sucker-punch
|
||||
else
|
||||
_key_action[SMARTPHONE_ACTION_MULTI].setAscii(86); // FT cheat : shift-V
|
||||
_key_action[SMARTPHONE_ACTION_MULTI].setKey('V', SDLK_v, KMOD_SHIFT); // FT cheat : shift-V
|
||||
// Bind keys
|
||||
_action_enabled[SMARTPHONE_ACTION_BINDKEYS] = true;
|
||||
}
|
||||
|
@ -203,9 +203,9 @@ bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) {
|
|||
// Note that the user can accomplish this via the virtual keyboard as well, this is just for convenience
|
||||
GUI::MessageDialog alert("Do you want to load or save the game?", "Load", "Save");
|
||||
if (alert.runModal() == GUI::kMessageOK)
|
||||
_key_action[action].setAscii(SDLK_l);
|
||||
_key_action[action].setKey(SDLK_l);
|
||||
else
|
||||
_key_action[action].setAscii(SDLK_s);
|
||||
_key_action[action].setKey(SDLK_s);
|
||||
}
|
||||
EventsBuffer::simulateKey(&_key_action[action], true);
|
||||
return true;
|
||||
|
|
|
@ -36,8 +36,7 @@ namespace CEGUI {
|
|||
PanelKeyboard::PanelKeyboard(WORD reference) : Toolbar() {
|
||||
setBackground(reference);
|
||||
_state = false;
|
||||
_lastKey.setAscii(0);
|
||||
_lastKey.setKeycode(0);
|
||||
_lastKey.setKey(0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -78,25 +77,21 @@ namespace CEGUI {
|
|||
keyCode = _lastKey.keycode();
|
||||
}
|
||||
_state = pushed;
|
||||
_lastKey.setAscii(keyAscii);
|
||||
_lastKey.setKeycode(tolower(keyCode));
|
||||
_lastKey.setKey(keyAscii, tolower(keyCode));
|
||||
|
||||
key.setAscii(keyAscii);
|
||||
key.setKeycode(tolower(keyCode));
|
||||
key.setKey(keyAscii, tolower(keyCode));
|
||||
return EventsBuffer::simulateKey(&key, pushed);
|
||||
}
|
||||
else if (_state && !pushed) { // cursor is in some forbidden region and is up
|
||||
_state = false;
|
||||
key.setAscii(_lastKey.ascii());
|
||||
key.setKeycode(_lastKey.keycode());
|
||||
key = _lastKey;
|
||||
return EventsBuffer::simulateKey(&key, false);
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
else if (_state && !pushed) { // cursor left the keyboard area and is up
|
||||
_state = false;
|
||||
key.setAscii(_lastKey.ascii());
|
||||
key.setKeycode(_lastKey.keycode());
|
||||
key = _lastKey;
|
||||
return EventsBuffer::simulateKey(&key, false);
|
||||
} else
|
||||
return false;
|
||||
|
|
|
@ -32,10 +32,9 @@ namespace CEKEYS {
|
|||
SDL_Event ev = {0};
|
||||
|
||||
if (!key->keycode())
|
||||
key->setKeycode(key->ascii());
|
||||
|
||||
if (!key->ascii())
|
||||
key->setAscii(key->keycode());
|
||||
key->setKey(key->ascii(), key->ascii());
|
||||
else if (!key->ascii())
|
||||
key->setKey(key->keycode());
|
||||
|
||||
ev.type = (pushed ? SDL_KEYDOWN : SDL_KEYUP);
|
||||
ev.key.keysym.mod = (SDLMod)key->flags();
|
||||
|
|
|
@ -2105,7 +2105,7 @@ static int mapKeyCE(SDLKey key, SDLMod mod, Uint16 unicode, bool unfilter)
|
|||
return key;
|
||||
} else if (unicode) {
|
||||
return unicode;
|
||||
} else if (key >= 'a' && key <= 'z' && mod & KMOD_SHIFT) {
|
||||
} else if (key >= 'a' && key <= 'z' && (mod & KMOD_SHIFT)) {
|
||||
return key & ~0x20;
|
||||
} else if (key >= SDLK_NUMLOCK && key <= SDLK_EURO) {
|
||||
return 0;
|
||||
|
|
34
gui/Key.cpp
34
gui/Key.cpp
|
@ -32,10 +32,30 @@ Key::Key() :
|
|||
_ascii(0), _keycode(0), _flags(0) {
|
||||
}
|
||||
|
||||
Key::Key(int ascii) :
|
||||
_ascii(ascii), _keycode(ascii), _flags(0) {
|
||||
}
|
||||
|
||||
Key::Key(int ascii, int keycode, int flags) :
|
||||
_ascii(ascii), _keycode(keycode), _flags(flags) {
|
||||
}
|
||||
|
||||
void Key::setKey(int ascii) {
|
||||
_ascii = ascii;
|
||||
_keycode = ascii;
|
||||
}
|
||||
|
||||
void Key::setKey(int ascii, int keycode) {
|
||||
_ascii = ascii;
|
||||
_keycode = keycode;
|
||||
}
|
||||
|
||||
void Key::setKey(int ascii, int keycode, int flags) {
|
||||
_ascii = ascii;
|
||||
_keycode = keycode;
|
||||
_flags = flags;
|
||||
}
|
||||
|
||||
int Key::ascii() {
|
||||
return _ascii;
|
||||
}
|
||||
|
@ -48,18 +68,4 @@ int Key::flags() {
|
|||
return _flags;
|
||||
}
|
||||
|
||||
|
||||
void Key::setAscii(int ascii) {
|
||||
_ascii = ascii;
|
||||
_keycode = ascii; // default
|
||||
}
|
||||
|
||||
void Key::setKeycode(int keycode) {
|
||||
_keycode = keycode;
|
||||
}
|
||||
|
||||
void Key::setFlags(int flags) {
|
||||
_flags = flags;
|
||||
}
|
||||
|
||||
} // namespace GUI
|
||||
|
|
13
gui/Key.h
13
gui/Key.h
|
@ -32,13 +32,18 @@
|
|||
|
||||
namespace GUI {
|
||||
|
||||
// TODO/FIXME: Make use of Common::KeyState from common/keyboard.h
|
||||
|
||||
class Key {
|
||||
public:
|
||||
Key(int ascii, int keycode = 0, int flags = 0);
|
||||
Key(int ascii);
|
||||
Key(int ascii, int keycode, int flags = 0);
|
||||
Key();
|
||||
void setAscii(int ascii);
|
||||
void setKeycode(int keycode);
|
||||
void setFlags(int flags);
|
||||
|
||||
void setKey(int ascii);
|
||||
void setKey(int ascii, int keycode);
|
||||
void setKey(int ascii, int keycode, int flags);
|
||||
|
||||
int ascii();
|
||||
int keycode();
|
||||
int flags();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue