[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