aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/sci/event.cpp32
-rw-r--r--engines/sci/event.h9
-rw-r--r--engines/sci/graphics/controls32.cpp10
-rw-r--r--engines/sci/graphics/menu.cpp6
-rw-r--r--engines/sci/graphics/portrait.cpp4
5 files changed, 28 insertions, 33 deletions
diff --git a/engines/sci/event.cpp b/engines/sci/event.cpp
index d3225612a2..8a5d67d935 100644
--- a/engines/sci/event.cpp
+++ b/engines/sci/event.cpp
@@ -133,8 +133,8 @@ static int altify(int ch) {
}
SciEvent EventManager::getScummVMEvent() {
- SciEvent input = { SCI_EVENT_NONE, 0, 0, 0, Common::Point(0, 0) };
- SciEvent noEvent = { SCI_EVENT_NONE, 0, 0, 0, Common::Point(0, 0) };
+ SciEvent input = { SCI_EVENT_NONE, 0, 0, Common::Point(0, 0) };
+ SciEvent noEvent = { SCI_EVENT_NONE, 0, 0, Common::Point(0, 0) };
Common::EventManager *em = g_system->getEventManager();
Common::Event ev;
@@ -225,12 +225,14 @@ SciEvent EventManager::getScummVMEvent() {
bool numlockOn = (ev.kbd.flags & Common::KBD_NUM);
- input.data = ev.kbd.keycode;
+ Common::KeyCode scummVMKeycode = ev.kbd.keycode;
+ byte scummVMKeyFlags = ev.kbd.flags;
+
input.character = ev.kbd.ascii;
input.type = SCI_EVENT_KEYBOARD;
- if (input.data >= Common::KEYCODE_KP0 && input.data <= Common::KEYCODE_KP9) {
- if (!(ev.kbd.flags & Common::KBD_NUM)) {
+ if (scummVMKeycode >= Common::KEYCODE_KP0 && scummVMKeycode <= Common::KEYCODE_KP9) {
+ if (!(scummVMKeyFlags & Common::KBD_NUM)) {
// HACK: Num-Lock not enabled
// We shouldn't get a valid ascii code in these cases. We fix it here, so that cursor keys
// on the numpad work properly.
@@ -254,24 +256,24 @@ SciEvent EventManager::getScummVMEvent() {
// multilingual SCI01 games
input.character = codepagemap_88591toDOS[input.character & 0x7f];
}
- if (input.data == Common::KEYCODE_TAB) {
- input.character = input.data = SCI_KEY_TAB;
+ if (scummVMKeycode == Common::KEYCODE_TAB) {
+ input.character = SCI_KEY_TAB;
if (ourModifiers & Common::KBD_SHIFT)
input.character = SCI_KEY_SHIFT_TAB;
}
- if (input.data == Common::KEYCODE_DELETE)
- input.data = input.character = SCI_KEY_DELETE;
- } else if ((input.data >= Common::KEYCODE_F1) && input.data <= Common::KEYCODE_F10) {
+ if (scummVMKeycode == Common::KEYCODE_DELETE)
+ input.character = SCI_KEY_DELETE;
+ } else if ((scummVMKeycode >= Common::KEYCODE_F1) && scummVMKeycode <= Common::KEYCODE_F10) {
// SCI_K_F1 == 59 << 8
// SCI_K_SHIFT_F1 == 84 << 8
- input.character = input.data = SCI_KEY_F1 + ((input.data - Common::KEYCODE_F1)<<8);
+ input.character = SCI_KEY_F1 + ((scummVMKeycode - Common::KEYCODE_F1)<<8);
if (ourModifiers & Common::KBD_SHIFT)
- input.character = input.data + 0x1900;
+ input.character = scummVMKeycode + 0x1900;
} else {
// Special keys that need conversion
for (int i = 0; i < ARRAYSIZE(keyMappings); i++) {
- if (keyMappings[i].scummVMKey == ev.kbd.keycode) {
- input.character = input.data = numlockOn ? keyMappings[i].sciKeyNumlockOn : keyMappings[i].sciKeyNumlockOff;
+ if (keyMappings[i].scummVMKey == scummVMKeycode) {
+ input.character = numlockOn ? keyMappings[i].sciKeyNumlockOn : keyMappings[i].sciKeyNumlockOff;
break;
}
}
@@ -315,7 +317,7 @@ void EventManager::updateScreen() {
}
SciEvent EventManager::getSciEvent(unsigned int mask) {
- SciEvent event = { 0, 0, 0, 0, Common::Point(0, 0) };
+ SciEvent event = { SCI_EVENT_NONE, 0, 0, Common::Point(0, 0) };
EventManager::updateScreen();
diff --git a/engines/sci/event.h b/engines/sci/event.h
index 885ddcef03..1e76f8e6f6 100644
--- a/engines/sci/event.h
+++ b/engines/sci/event.h
@@ -30,16 +30,9 @@ namespace Sci {
struct SciEvent {
short type;
- short data; // holds the ScummVM system keycode TODO: rename
short modifiers;
/**
- * For keyboard events: 'data' after applying
- * the effects of 'modifiers', e.g. if
- * type == SCI_EVT_KEYBOARD
- * data == 'a'
- * buckybits == SCI_EVM_LSHIFT
- * then
- * character == 'A'
+ * For keyboard events: the actual character of the key that was pressed
* For 'Alt', characters are interpreted by their
* PC keyboard scancodes.
*/
diff --git a/engines/sci/graphics/controls32.cpp b/engines/sci/graphics/controls32.cpp
index 90b5cd558c..1bd497ce98 100644
--- a/engines/sci/graphics/controls32.cpp
+++ b/engines/sci/graphics/controls32.cpp
@@ -79,7 +79,7 @@ void GfxControls32::kernelTexteditChange(reg_t controlObject) {
// TODO: Implement mouse support for cursor change
break;
case SCI_EVENT_KEYBOARD:
- switch (curEvent.data) {
+ switch (curEvent.character) {
case SCI_KEY_BACKSPACE:
if (cursorPos > 0) {
cursorPos--; text.deleteChar(cursorPos);
@@ -131,12 +131,12 @@ void GfxControls32::kernelTexteditChange(reg_t controlObject) {
captureEvents = false;
break;
default:
- if ((curEvent.modifiers & SCI_KEYMOD_CTRL) && curEvent.data == 99) {
+ if ((curEvent.modifiers & SCI_KEYMOD_CTRL) && curEvent.character == 'c') {
// Control-C in earlier SCI games (SCI0 - SCI1 middle)
// Control-C erases the whole line
cursorPos = 0; text.clear();
textChanged = true;
- } else if (curEvent.data > 31 && curEvent.data < 256 && textSize < maxChars) {
+ } else if (curEvent.character > 31 && curEvent.character < 256 && textSize < maxChars) {
// insert pressed character
textAddChar = true;
textChanged = true;
@@ -158,14 +158,14 @@ void GfxControls32::kernelTexteditChange(reg_t controlObject) {
uint16 textWidth = 0;
while (*textPtr)
textWidth += font->getCharWidth((byte)*textPtr++);
- textWidth += font->getCharWidth(curEvent.data);
+ textWidth += font->getCharWidth(curEvent.character);
// Does it fit?
if (textWidth >= rect.width()) {
return;
}
- text.insertChar(curEvent.data, cursorPos++);
+ text.insertChar(curEvent.character, cursorPos++);
// Note: the following checkAltInput call might make the text
// too wide to fit, but SSCI fails to check that too.
diff --git a/engines/sci/graphics/menu.cpp b/engines/sci/graphics/menu.cpp
index 9d92039111..eb3f5888c7 100644
--- a/engines/sci/graphics/menu.cpp
+++ b/engines/sci/graphics/menu.cpp
@@ -747,7 +747,7 @@ GuiMenuItemEntry *GfxMenu::interactiveWithKeyboard() {
// - sierra didn't wrap around when changing item id
// - sierra allowed item id to be 0, which didn't make any sense
do {
- switch (curEvent.data) {
+ switch (curEvent.character) {
case SCI_KEY_ESC:
_curMenuId = curItemEntry->menuId; _curItemId = curItemEntry->id;
return NULL;
@@ -776,10 +776,10 @@ GuiMenuItemEntry *GfxMenu::interactiveWithKeyboard() {
newMenuId = newItemEntry->menuId; newItemId = newItemEntry->id;
// if we do this step again because of a separator line -> don't repeat left/right, but go down
- switch (curEvent.data) {
+ switch (curEvent.character) {
case SCI_KEY_LEFT:
case SCI_KEY_RIGHT:
- curEvent.data = SCI_KEY_DOWN;
+ curEvent.character = SCI_KEY_DOWN;
}
}
} while (newItemEntry->separatorLine);
diff --git a/engines/sci/graphics/portrait.cpp b/engines/sci/graphics/portrait.cpp
index cb425f3be9..045a923569 100644
--- a/engines/sci/graphics/portrait.cpp
+++ b/engines/sci/graphics/portrait.cpp
@@ -316,7 +316,7 @@ void Portrait::doit(Common::Point position, uint16 resourceId, uint16 noun, uint
g_sci->getEngineState()->wait(1);
curEvent = _event->getSciEvent(SCI_EVENT_ANY);
if (curEvent.type == SCI_EVENT_MOUSE_PRESS ||
- (curEvent.type == SCI_EVENT_KEYBOARD && curEvent.data == SCI_KEY_ESC) ||
+ (curEvent.type == SCI_EVENT_KEYBOARD && curEvent.character == SCI_KEY_ESC) ||
g_sci->getEngineState()->abortScriptProcessing == kAbortQuitGame ||
g_sci->getEngineState()->_delayedRestoreGame)
userAbort = true;
@@ -339,7 +339,7 @@ void Portrait::doit(Common::Point position, uint16 resourceId, uint16 noun, uint
g_sci->getEngineState()->wait(1);
curEvent = _event->getSciEvent(SCI_EVENT_ANY);
if (curEvent.type == SCI_EVENT_MOUSE_PRESS ||
- (curEvent.type == SCI_EVENT_KEYBOARD && curEvent.data == SCI_KEY_ESC) ||
+ (curEvent.type == SCI_EVENT_KEYBOARD && curEvent.character == SCI_KEY_ESC) ||
g_sci->getEngineState()->abortScriptProcessing == kAbortQuitGame)
userAbort = true;
curPosition = _audio->getAudioPosition();