Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2012-11-13 13:26:49 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2012-11-13 13:26:49 (GMT)
commit214c8be4871cea2debae9cf6dee2e67eb8ec940b (patch)
tree0bb70e64d1d80633a3f264bd2eb988ff6a006ebb
parent75746fc797bcf5ae1764b85d5dd6948b44df10e8 (diff)
Improve interactivity when using touch - SL #4161
When using touch to draw, the TOUCH_UPDATE events are processed before the draw is done. We need request a inmediate draw, and use a timeout to do it. Signed-off-by: Gonzalo Odiard <gonzalo@laptop.org>
-rw-r--r--Area.py18
1 files changed, 16 insertions, 2 deletions
diff --git a/Area.py b/Area.py
index db2abaf..5829d04 100644
--- a/Area.py
+++ b/Area.py
@@ -216,6 +216,8 @@ class Area(Gtk.DrawingArea):
# used to identify emulated mouse
self._on_touch = False
+ self._update_timer = None
+
def _set_screen_dpi(self):
dpi = _get_screen_dpi()
font_map_default = PangoCairo.font_map_get_default()
@@ -399,7 +401,7 @@ class Area(Gtk.DrawingArea):
def __event_cb(self, widget, event):
if event.type in (Gdk.EventType.TOUCH_BEGIN,
Gdk.EventType.TOUCH_CANCEL, Gdk.EventType.TOUCH_END,
- Gdk.EventType.BUTTON_PRESS, # Gdk.EventType.TOUCH_UPDATE,
+ Gdk.EventType.BUTTON_PRESS, Gdk.EventType.TOUCH_UPDATE,
Gdk.EventType.BUTTON_RELEASE):
#, Gdk.EventType.MOTION_NOTIFY):
x = event.get_coords()[1]
@@ -408,7 +410,7 @@ class Area(Gtk.DrawingArea):
logging.error('event x %d y %d type %s', x, y, event.type)
if event.type in (Gdk.EventType.TOUCH_BEGIN,
- Gdk.EventType.TOUCH_UPDATE, Gdk.EventType.BUTTON_PRESS):
+ Gdk.EventType.BUTTON_PRESS):
#Gdk.EventType.MOTION_NOTIFY):
if event.type == Gdk.EventType.BUTTON_PRESS:
## http://developer.gnome.org/gtk3/3.4/GtkWidget.html#gtk-widget-get-pointer
@@ -418,6 +420,13 @@ class Area(Gtk.DrawingArea):
self._on_touch = True
button1_pressed = True
self.tool_start(x, y, button1_pressed)
+ elif event.type == Gdk.EventType.TOUCH_UPDATE:
+ # We need trigger a request to draw the screen inmediatly
+ # because if not the screen is not updated until
+ # all the update touch events are processed.
+ if self._update_timer is None:
+ self._update_timer = GObject.timeout_add(100,
+ self.__update_draw)
elif event.type in (Gdk.EventType.TOUCH_END,
Gdk.EventType.BUTTON_RELEASE):
if event.type == Gdk.EventType.BUTTON_RELEASE:
@@ -428,6 +437,11 @@ class Area(Gtk.DrawingArea):
shift_pressed = False
self.tool_end(x, y, shift_pressed)
+ def __update_draw(self):
+ self.get_window().process_all_updates()
+ self._update_timer = None
+ return False
+
def tool_start(self, coord_x, coord_y, button1_pressed):
width, height = self.get_size()
# text