tuikit/driver/curses.py
changeset 113 6796adfdc7eb
parent 109 105b1affc3c2
parent 106 abcadb7e2ef1
--- a/tuikit/driver/curses.py	Wed Sep 03 19:17:04 2014 +0200
+++ b/tuikit/driver/curses.py	Wed Sep 03 21:56:20 2014 +0200
@@ -3,6 +3,7 @@
 import logging
 
 from tuikit.driver.driver import Driver
+from tuikit.core.coords import Point
 
 
 class CursesDriver(Driver):
@@ -88,7 +89,7 @@
         self.colorstack = [] # pushcolor/popcolor puts or gets attributes from this
         self.inputqueue = []
         self.mbtnstack = []
-        self._mouse_last_pos = (None, None)
+        self._mouse_last_pos = None  # Point
         self._mouse_last_bstate = None
 
     ## initialization, finalization ##
@@ -280,15 +281,15 @@
         except curses.error:
             return []
 
+        pos = Point(x, y)
         out = []
 
         if bstate & curses.REPORT_MOUSE_POSITION:
-            if self._mouse_last_pos != (x, y):
-                if self._mouse_last_pos[0] is not None:
-                    relx = x - (self._mouse_last_pos[0] or 0)
-                    rely = y - (self._mouse_last_pos[1] or 0)
-                    out += [('mousemove', 0, x, y, relx, rely)]
-                self._mouse_last_pos = (x, y)
+            if self._mouse_last_pos != pos:
+                if self._mouse_last_pos:
+                    relpos = pos - self._mouse_last_pos
+                    out += [('mousemove', 0, pos, relpos)]
+                self._mouse_last_pos = pos
 
         # we are interested only in changes, not buttons already pressed before event
         if self._mouse_last_bstate is not None:
@@ -300,21 +301,21 @@
             self._mouse_last_bstate = bstate
 
         if bstate & curses.BUTTON1_PRESSED:
-            out += [('mousedown', 1, x, y)]
+            out += [('mousedown', 1, pos)]
         if bstate & curses.BUTTON2_PRESSED:
-            out += [('mousedown', 2, x, y)]
+            out += [('mousedown', 2, pos)]
         if bstate & curses.BUTTON3_PRESSED:
-            out += [('mousedown', 3, x, y)]
+            out += [('mousedown', 3, pos)]
         if bstate & curses.BUTTON1_RELEASED:
-            out += [('mouseup', 1, x, y)]
+            out += [('mouseup', 1, pos)]
         if bstate & curses.BUTTON2_RELEASED:
-            out += [('mouseup', 2, x, y)]
+            out += [('mouseup', 2, pos)]
         if bstate & curses.BUTTON3_RELEASED:
-            out += [('mouseup', 3, x, y)]
+            out += [('mouseup', 3, pos)]
 
         # reset last pos when pressed/released
         if len(out) > 0 and out[-1][0] in ('mousedown', 'mouseup'):
-            self._mouse_last_pos = (None, None)
+            self._mouse_last_pos = None
 
         return out
 
@@ -395,6 +396,7 @@
         t = self._inputqueue_get_wait()
         x = self._inputqueue_get_wait() - 0x21
         y = self._inputqueue_get_wait() - 0x21
+        pos = Point(x, y)
 
         out = []
 
@@ -403,25 +405,24 @@
             btn = t - 0x1f
             if not btn in self.mbtnstack:
                 self.mbtnstack.append(btn)
-                self._mouse_last_pos = (None, None)
-                out += [('mousedown', btn, x, y)]
+                self._mouse_last_pos = None
+                out += [('mousedown', btn, pos)]
             else:
                 # mouse move
-                if self._mouse_last_pos != (x, y):
-                    if self._mouse_last_pos[0] is not None:
-                        relx = x - self._mouse_last_pos[0]
-                        rely = y - self._mouse_last_pos[1]
-                        out += [('mousemove', btn, x, y, relx, rely)]
-                    self._mouse_last_pos = (x, y)
+                if self._mouse_last_pos != pos:
+                    if self._mouse_last_pos:
+                        relpos = pos - self._mouse_last_pos
+                        out += [('mousemove', btn, pos, relpos)]
+                    self._mouse_last_pos = pos
         elif t == 0x23:
             # button release
             btn = self.mbtnstack.pop()
             self._mouse_last_pos = (None, None)
-            out += [('mouseup', btn, x, y)]
+            out += [('mouseup', btn, pos)]
         elif t in (0x60, 0x61):
             # wheel up, down
             btn = 4 + t - 0x60
-            out += [('mousewheel', btn, x, y)]
+            out += [('mousewheel', btn, pos)]
         else:
             raise Exception('Unknown mouse event: %x' % t)