tuikit/driver/cursesw.py
changeset 113 6796adfdc7eb
parent 106 abcadb7e2ef1
parent 111 b055add74b18
child 118 8c7970520632
--- a/tuikit/driver/cursesw.py	Wed Sep 03 19:17:04 2014 +0200
+++ b/tuikit/driver/cursesw.py	Wed Sep 03 21:56:20 2014 +0200
@@ -4,6 +4,7 @@
 
 from tuikit.driver.driver import Driver
 from tuikit.core.events import ResizeEvent, KeypressEvent
+from tuikit.core.coords import Point
 
 
 class CursesWDriver(Driver):
@@ -65,7 +66,7 @@
         self.cursor = None
         self.colors = {}     # maps names to curses attributes
         self.colorpairs = {} # maps tuple (fg,bg) to curses color_pair
-        self._mouse_last_pos = (None, None)
+        self._mouse_last_pos = None  # Point
         self._mouse_last_bstate = None
 
     ## initialization, finalization ##
@@ -205,13 +206,13 @@
         except curses.error:
             return out
 
+        pos = Point(x, y)
         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:
@@ -223,21 +224,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