Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Deaton <rdeaton@udel.edu>2012-04-10 00:51:30 (GMT)
committer Robert Deaton <rdeaton@udel.edu>2012-04-10 00:51:30 (GMT)
commit44544562360aa77eea381b92afff9e3eb9eeda8e (patch)
tree53c412bc8cba68bf90aa7f8b96f86e4d5b14d5be
parentdb3f934e9aea80f9effc98ba68516d69e7856a81 (diff)
A fix for a timing error with keys and modifier keys.
Signed-off-by: Robert Deaton <rdeaton@udel.edu>
-rw-r--r--sugargame/event.py11
1 files changed, 7 insertions, 4 deletions
diff --git a/sugargame/event.py b/sugargame/event.py
index cd8f925..d3d4881 100644
--- a/sugargame/event.py
+++ b/sugargame/event.py
@@ -82,6 +82,7 @@ class Translator(object):
self.__held = set()
self.__held_time_left = {}
self.__held_last_time = {}
+ self.__held_last_value = {}
self.__tick_id = None
def hook_pygame(self):
@@ -115,24 +116,26 @@ class Translator(object):
pygame.event.post(pygame.event.Event(pygame.QUIT))
def _keydown_cb(self, widget, event):
- key = event.keyval
+ key = event.hardware_keycode
+ keyval = event.keyval
if key in self.__held:
return True
else:
if self.__repeat[0] is not None:
self.__held_last_time[key] = pygame.time.get_ticks()
self.__held_time_left[key] = self.__repeat[0]
+ self.__held_last_value[key] = keyval
self.__held.add(key)
-
return self._keyevent(widget, event, pygame.KEYDOWN)
def _keyup_cb(self, widget, event):
- key = event.keyval
+ key = event.hardware_keycode
if self.__repeat[0] is not None:
if key in self.__held:
# This is possibly false if set_repeat() is called with a key held
del self.__held_time_left[key]
del self.__held_last_time[key]
+ del self.__held_last_value[key]
self.__held.discard(key)
return self._keyevent(widget, event, pygame.KEYUP)
@@ -229,7 +232,7 @@ class Translator(object):
self.__held_time_left[key] -= delta
if self.__held_time_left[key] <= 0:
self.__held_time_left[key] = self.__repeat[1]
- self._keyevent(None, _MockEvent(key), pygame.KEYDOWN)
+ self._keyevent(None, _MockEvent(self.__held_last_value[key]), pygame.KEYDOWN)
return True