Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Area.py
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2012-11-27 14:48:09 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2012-11-28 10:40:13 (GMT)
commit00d8aedfbf5fb075baa2ae431cf567db4ef1e81c (patch)
treecc69aad51a2e45104a71602f9c9ac1eec4a13981 /Area.py
parent829f13ba16cb98a767868d197bf5187b8544067c (diff)
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 <gonzalo@laptop.org>
Diffstat (limited to 'Area.py')
-rw-r--r--Area.py31
1 files changed, 15 insertions, 16 deletions
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 \