[Scummvm-cvs-logs] scummvm master -> 7aeadba863ed1893fa6095008d35b32ce5117749

m-kiewitz m_kiewitz at users.sourceforge.net
Tue Feb 2 11:34:09 CET 2016


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:
7aeadba863 SCI: Removed ".data" from SciEvent


Commit: 7aeadba863ed1893fa6095008d35b32ce5117749
    https://github.com/scummvm/scummvm/commit/7aeadba863ed1893fa6095008d35b32ce5117749
Author: Martin Kiewitz (m_kiewitz at users.sourceforge.net)
Date: 2016-02-02T11:33:40+01:00

Commit Message:
SCI: Removed ".data" from SciEvent

Was the ScummVM-system-Keycode, sometimes modified.
Changed Menu/Portrait/Controls32-code to use .character instead.
Cleaned up a bit of code in getScummVMEvent()

Changed paths:
    engines/sci/event.cpp
    engines/sci/event.h
    engines/sci/graphics/controls32.cpp
    engines/sci/graphics/menu.cpp
    engines/sci/graphics/portrait.cpp



diff --git a/engines/sci/event.cpp b/engines/sci/event.cpp
index d322561..8a5d67d 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 885ddce..1e76f8e 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 90b5cd5..1bd497c 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 9d92039..eb3f588 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 cb425f3..045a923 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();






More information about the Scummvm-git-logs mailing list