Author: Lars Wassermann <[email protected]>
Branch: 
Changeset: r278:d9517a43bf5e
Date: 2013-04-12 17:34 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/d9517a43bf5e/

Log:    renamed instance variable ary to contents changed mouse pointer
        tracking to comply with specifications switched bits of left and
        right mouse button

diff --git a/spyvm/display.py b/spyvm/display.py
--- a/spyvm/display.py
+++ b/spyvm/display.py
@@ -10,35 +10,41 @@
     def __init__(self, default, maxlen=10):
         assert default
         self.default = default
-        self.ary = []
+        self.contents = []
         self.maxlen = 10
 
     def push(self, event):
-        if len(self.ary) == self.maxlen:
-            self.ary.pop(0)
-        self.ary.append(event)
+        contents = self.contents
+        assert len(contents) <= self.maxlen
+        if len(contents) == self.maxlen:
+            contents.pop(0)
+        contents.append(event)
 
     def shift(self):
-        if not self.ary:
-            self.ary += self.default
-        return self.ary.pop(0)
+        contents = self.contents
+        assert len(contents) <= self.maxlen
+        if contents == []:
+            contents = list(self.default)
+        return contents.pop(0)
 
     def peek(self):
-        if self.ary:
-            return self.ary[0]
+        contents = self.contents
+        assert len(contents) <= self.maxlen
+        if contents:
+            return contents[0]
         else:
             return self.default[0]
 
     def size(self):
-        if not self.ary:
+        if not self.contents:
             return len(self.default)
         else:
-            return len(self.ary)
+            return len(self.contents)
 
 
 class SDLDisplay(object):
     _attrs_ = ["screen", "width", "height", "depth", "surface", "has_surface",
-               "last_mouse_position", "mouse_downs", "mouse_ups", "key_ups", 
"key_downs"]
+               "last_mouse_position", "last_mouse_buttons", "mouse_downs", 
"mouse_ups", "key_ups", "key_downs"]
 
     def __init__(self, title):
         assert RSDL.Init(RSDL.INIT_VIDEO) >= 0
@@ -46,6 +52,7 @@
         RSDL.EnableUNICODE(1)
         self.has_surface = False
         self.last_mouse_position = [0, 0]
+        self.last_mouse_buttons = 0
         self.mouse_downs = SDLEventQueue([0])
         self.mouse_ups = SDLEventQueue([0])
         self.key_ups = SDLEventQueue([0])
@@ -74,25 +81,31 @@
                 ok = rffi.cast(lltype.Signed, RSDL.PollEvent(event))
                 if ok == 1:
                     c_type = rffi.getintfield(event, 'c_type')
+                    print ' %d' % c_type,
                     if c_type == RSDL.MOUSEBUTTONDOWN or c_type == 
RSDL.MOUSEBUTTONUP:
                         b = rffi.cast(RSDL.MouseButtonEventPtr, event)
                         btn = rffi.getintfield(b, 'c_button')
                         if btn == RSDL.BUTTON_LEFT:
-                            btn = 1
+                            button = 4
                         elif btn == RSDL.BUTTON_MIDDLE:
-                            btn = 2
+                            button = 2
                         elif btn == RSDL.BUTTON_RIGHT:
-                            btn = 4
-
+                            button = 1
+                        else:
+                            assert 0
+                            button = 0
+                        
                         if c_type == RSDL.MOUSEBUTTONDOWN:
-                            self.mouse_downs.push(btn)
+                            self.mouse_downs.push(button)
+                            self.last_mouse_buttons |= button
                         else:
-                            self.mouse_ups.push(btn)
+                            self.mouse_ups.push(button)
+                            self.last_mouse_buttons &= ~button
                     elif c_type == RSDL.MOUSEMOTION:
                         m = rffi.cast(RSDL.MouseMotionEventPtr, event)
                         x = rffi.getintfield(m, "c_x")
                         y = rffi.getintfield(m, "c_y")
-                        self.last_mouse_position = [x, y]
+                        self.last_mouse_position = list([x, y])
                     elif c_type == RSDL.KEYUP or c_type == RSDL.KEYDOWN:
                         p = rffi.cast(RSDL.KeyboardEventPtr, event)
                         char = rffi.getintfield(p.c_keysym, 'c_unicode')
@@ -111,7 +124,7 @@
 
     def mouse_button(self):
         self.get_next_event()
-        return self.mouse_ups.shift()
+        return self.last_mouse_buttons
 
     def next_keycode(self):
         self.get_next_event()
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to