[Scummvm-cvs-logs] SF.net SVN: scummvm:[34115] scummvm/branches/gsoc2008-vkeybd

kenny-d at users.sourceforge.net kenny-d at users.sourceforge.net
Sat Aug 23 19:04:41 CEST 2008


Revision: 34115
          http://scummvm.svn.sourceforge.net/scummvm/?rev=34115&view=rev
Author:   kenny-d
Date:     2008-08-23 17:04:40 +0000 (Sat, 23 Aug 2008)

Log Message:
-----------
Proper fix for key repeat bug - r34094 caused different problems due to repeated key up events

Modified Paths:
--------------
    scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.h
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.cpp
    scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.h

Property Changed:
----------------
    scummvm/branches/gsoc2008-vkeybd/dists/msvc8/

Modified: scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp	2008-08-23 14:18:36 UTC (rev 34114)
+++ scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.cpp	2008-08-23 17:04:40 UTC (rev 34115)
@@ -110,7 +110,6 @@
 	_eventCount = 0;
 	_lastEventCount = 0;
 	_lastMillis = 0;
-	_artificialEventCounter = 0;
 
 	Common::String recordModeString = ConfMan.get("record_mode");
 	if (recordModeString.compareToIgnoreCase("record") == 0) {
@@ -364,19 +363,20 @@
 	_lastMillis = millis;
 	_boss->unlockMutex(_timeMutex);
 }
-
+#include "backends/vkeybd/keycode-descriptions.h"
 bool DefaultEventManager::pollEvent(Common::Event &event) {
 	uint32 time = _boss->getMillis();
 	bool result = false;
 	
 	// poll for pushed events
 	if (!_artificialEventQueue.empty()) {
-		// delay the feeding of artificial events
-		if (++_artificialEventCounter % kArtificialEventDelay == 0) {
-			event = _artificialEventQueue.pop();
-			result = true;
-			_artificialEventCounter = 0; 
-		}
+		event = _artificialEventQueue.pop();
+		result = true;
+		
+		if (event.type == Common::EVENT_KEYDOWN)
+			printf("ART. KEY DOWN: %d (%s)\n", event.kbd.keycode, keycodeDescTable[event.kbd.keycode]);
+		else if (event.type == Common::EVENT_KEYUP)
+			printf("ART. KEY UP: %d (%s)\n", event.kbd.keycode, keycodeDescTable[event.kbd.keycode]);
 	}
 	
 	// poll for event from backend
@@ -385,11 +385,21 @@
 		if (result) {
 			// send key press events to keymapper
 			if (event.type == Common::EVENT_KEYDOWN) {
-				if (_keymapper->mapKeyDown(event.kbd))
+				printf("KEY DOWN: %d (%s)", event.kbd.keycode, keycodeDescTable[event.kbd.keycode]);
+				if (_keymapper->mapKeyDown(event.kbd)) {
 					result = false;
+					printf(" - MAPPED!\n");
+				} else {
+					printf("\n");
+				}
 			} else if (event.type == Common::EVENT_KEYUP) {
-				if (_keymapper->mapKeyUp(event.kbd))
+				printf("KEY UP: %d (%s)", event.kbd.keycode, keycodeDescTable[event.kbd.keycode]);
+				if (_keymapper->mapKeyUp(event.kbd)) {
 					result = false;
+					printf(" - MAPPED!\n");
+				} else {
+					printf("\n");
+				}
 			}
 		}
 	}

Modified: scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.h	2008-08-23 14:18:36 UTC (rev 34114)
+++ scummvm/branches/gsoc2008-vkeybd/backends/events/default/default-events.h	2008-08-23 17:04:40 UTC (rev 34115)
@@ -55,10 +55,6 @@
 	bool _remap;
 
 	Common::Queue<Common::Event> _artificialEventQueue;
-	int _artificialEventCounter;
-	enum {
-		kArtificialEventDelay = 5
-	};
 
 	Common::Point _mousePos;
 	int _buttonState;

Modified: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.cpp
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.cpp	2008-08-23 14:18:36 UTC (rev 34114)
+++ scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.cpp	2008-08-23 17:04:40 UTC (rev 34115)
@@ -127,12 +127,6 @@
 }
 
 void Keymapper::pushKeymap(Keymap *newMap, bool inherit, bool global) {
-	List<KeyState>::iterator it;
-	for (it = _keysDown.begin(); it != _keysDown.end(); ++it) {
-		Action *action = getAction(*it);
-		if (action) executeAction(action, false);
-	}
-	_keysDown.clear();
 	MapRecord mr = {newMap, inherit, global};
 	_activeMaps.push(mr);
 }
@@ -154,25 +148,29 @@
 	if (!_enabled) return false;
 	if (_activeMaps.empty()) return false;
 
-	Action *action = getAction(key);
+	Action *action = 0;
+	if (keyDown) {
+		// Search for key in active keymap stack
+		for (int i = _activeMaps.size() - 1; i >= 0; --i) {
+			MapRecord mr = _activeMaps[i];
+			action = mr.keymap->getMappedAction(key);
+			if (action || mr.inherit == false) break;
+		}
+		if (action) _keysDown[key] = action;
+	} else {
+		HashMap<KeyState, Action*>::iterator it = _keysDown.find(key);
+		if (it != _keysDown.end()) {
+			action = it->_value;
+			_keysDown.erase(key);
+		}
+	}
 	if (!action) return false;
-
-	if (keyDown)
-		_keysDown.push_back(key);
-	else
-		_keysDown.remove(key);
-
 	executeAction(action, keyDown);
 	return true;
 }
 
 Action *Keymapper::getAction(const KeyState& key) {
 	Action *action = 0;
-	for (int i = _activeMaps.size() - 1; i >= 0; --i) {
-		MapRecord mr = _activeMaps[i];
-		action = mr.keymap->getMappedAction(key);
-		if (action || mr.inherit == false) break;
-	}
 	return action;
 }
 

Modified: scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.h
===================================================================
--- scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.h	2008-08-23 14:18:36 UTC (rev 34114)
+++ scummvm/branches/gsoc2008-vkeybd/backends/keymapper/keymapper.h	2008-08-23 17:04:40 UTC (rev 34115)
@@ -28,6 +28,7 @@
 
 #include "common/events.h"
 #include "common/list.h"
+#include "common/hashmap.h"
 #include "common/stack.h"
 #include "backends/keymapper/hardware-key.h"
 #include "backends/keymapper/keymap.h"
@@ -194,7 +195,7 @@
 	bool _enabled;
 
 	Stack<MapRecord> _activeMaps;
-	List<KeyState> _keysDown;
+	HashMap<KeyState, Action*> _keysDown;
 
 };
 


Property changes on: scummvm/branches/gsoc2008-vkeybd/dists/msvc8
___________________________________________________________________
Modified: svn:ignore
   - scumm_Debug
scumm_Release
scummvm_Debug
scummvm_Release
sky_Debug
sky_Release
sword1_Debug
sword1_Release
sword2_Debug
sword2_Release
tinsel_Debug
touche_Debug
touche_Release
agi_Debug
agi_Release
agos_Debug
agos_Release
cine_Debug
cine_Release
cruise_Debug
cruise_Release
drascula_Debug
drascula_Release
gob_Debug
gob_Release
igor_Debug
igor_Release
kyra_Debug
kyra_Release
lure_Debug
lure_Release
m4_Debug
m4_Release
made_Debug
made_Release
parallaction_Debug
parallaction_Release
queen_Debug
queen_Release
saga_Debug
saga_Release
*.user

   + scumm_Debug
scumm_Release
scummvm_Debug
scummvm_Release
sky_Debug
sky_Release
sword1_Debug
sword1_Release
sword2_Debug
sword2_Release
tinsel_Debug
touche_Debug
touche_Release
agi_Debug
agi_Release
agos_Debug
agos_Release
cine_Debug
cine_Release
cruise_Debug
cruise_Release
drascula_Debug
drascula_Release
gob_Debug
gob_Release
igor_Debug
igor_Release
kyra_Debug
kyra_Release
lure_Debug
lure_Release
m4_Debug
m4_Release
made_Debug
made_Release
parallaction_Debug
parallaction_Release
queen_Debug
queen_Release
saga_Debug
saga_Release
*.user
tinsel_Release
scummvm.suo
scummvm.ncb



This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list