From 00d8aedfbf5fb075baa2ae431cf567db4ef1e81c Mon Sep 17 00:00:00 2001 From: Gonzalo Odiard Date: Tue, 27 Nov 2012 14:48:09 +0000 Subject: Fix "Opacity does change while drawing" - SL #4237 The error was due to multiple draw between screen updates. Now the temp canvas is updated only one time for every screen redraw, improving response and avoiding artifacts when alpha is 1.0 Signed-off-by: Gonzalo Odiard --- diff --git a/Area.py b/Area.py index e4e0428..e7d4100 100644 --- a/Area.py +++ b/Area.py @@ -402,9 +402,8 @@ 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.BUTTON_RELEASE): - #, Gdk.EventType.MOTION_NOTIFY): x = int(event.get_coords()[1]) y = int(event.get_coords()[2]) seq = str(event.touch.sequence) @@ -421,15 +420,12 @@ 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): + # set _update_timer = None to avoid executing + # toolmove code after mouse release or touch end + self._update_timer = None + if event.type == Gdk.EventType.BUTTON_RELEASE: _pointer, x, y, state = event.window.get_pointer() shift_pressed = state & Gdk.ModifierType.SHIFT_MASK @@ -438,11 +434,6 @@ 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 @@ -577,11 +568,16 @@ class Area(Gtk.DrawingArea): y = event.y shift_pressed = event.get_state() & Gdk.ModifierType.SHIFT_MASK button1_pressed = event.get_state() & Gdk.ModifierType.BUTTON1_MASK - self.tool_move(x, y, button1_pressed, shift_pressed) - Gdk.event_request_motions(event) + if self._update_timer is None: + self._update_timer = GObject.timeout_add(20, + self.tool_move,x, y, button1_pressed, shift_pressed) def tool_move(self, x, y, button1_pressed, shift_pressed): + if self._update_timer is None: + return False + self._update_timer = None + self.x_cursor, self.y_cursor = int(x), int(y) # the touch driver trigger many events sensing movements up and down @@ -701,6 +697,9 @@ class Area(Gtk.DrawingArea): self.d.freeform(self, coords, True, self.tool['fill'], "moving") + self.get_window().process_all_updates() + return False + def check_point_in_area(self, x_point, y_point, x_min, y_min, width, height): return not ((x_point < x_min) or (x_point > x_min + width) or \ -- cgit v0.9.1