CGE: Improve keyboard behavior for non-US layouts

This commit is contained in:
Strangerke 2011-07-31 09:38:08 +02:00
parent 55df4d0635
commit f898da53a4
2 changed files with 9 additions and 4 deletions

View File

@ -99,11 +99,16 @@ Sprite *Keyboard::setClient(Sprite *spr) {
return spr;
}
bool Keyboard::getKey(uint16 keycode, int &cgeCode) {
bool Keyboard::getKey(Common::Event &event, int &cgeCode) {
Common::KeyCode keycode = event.kbd.keycode;
if ((keycode == Common::KEYCODE_LCTRL) || (keycode == Common::KEYCODE_RCTRL)) {
cgeCode = 29;
return true;
}
if ((keycode == Common::KEYCODE_LALT) || (keycode == Common::KEYCODE_RALT)) {
cgeCode = 56;
return true;
}
if (keycode == Common::KEYCODE_KP_ENTER) {
cgeCode = 28;
return true;
@ -111,7 +116,7 @@ bool Keyboard::getKey(uint16 keycode, int &cgeCode) {
// Scan through the ScummVM mapping list
for (int idx = 0; idx < 0x60; idx++) {
if (_scummVmCodes[idx] == keycode) {
if (_scummVmCodes[idx] == event.kbd.ascii) {
cgeCode = idx;
return true;
}
@ -122,7 +127,7 @@ bool Keyboard::getKey(uint16 keycode, int &cgeCode) {
void Keyboard::newKeyboard(Common::Event &event) {
int keycode;
if (!getKey(event.kbd.keycode, keycode))
if (!getKey(event, keycode))
return;
if (event.type == Common::EVENT_KEYUP) {

View File

@ -47,7 +47,7 @@ namespace CGE {
class Keyboard {
private:
bool getKey(uint16 keycode, int &cgeCode);
bool getKey(Common::Event &event, int &cgeCode);
public:
static const uint16 _code[0x60];
static const uint16 _scummVmCodes[0x60];