--- 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)