Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorC. Scott Ananian <cscott@cscott.net>2011-11-03 22:48:37 (GMT)
committer C. Scott Ananian <cscott@cscott.net>2011-11-10 03:11:43 (GMT)
commit747e75bb9124f0f133a260c35036d2df17830cf0 (patch)
treef22b67a360087831be13b6fa48dfcd6c849de8b1
parent2141ce4d6cf6c77fa2fc91f22cd7912eae1a46ec (diff)
GTK3 fixes for tawindow.py
-rw-r--r--TurtleArt/tawindow.py34
1 files changed, 25 insertions, 9 deletions
diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py
index f79bfe1..0c0d490 100644
--- a/TurtleArt/tawindow.py
+++ b/TurtleArt/tawindow.py
@@ -87,7 +87,10 @@ class TurtleArtWindow():
if type(canvas_window) == Gtk.DrawingArea:
self.interactive_mode = True
self.window = canvas_window
- self.window.set_flags(Gtk.CAN_FOCUS)
+ if hasattr(self.window, 'set_can_focus'):
+ self.window.set_can_focus(True) # GTK3/GTK2
+ else:
+ self.window.set_flags(Gtk.CAN_FOCUS) # before GTK2.22
self.window.show_all()
if self.parent is not None:
self.parent.show_all()
@@ -347,7 +350,10 @@ class TurtleArtWindow():
self.window.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
self.window.add_events(Gdk.EventMask.KEY_PRESS_MASK)
# self.window.connect('realize', self.do_realize)
- self.window.connect("expose-event", self._expose_cb)
+ try:
+ self.window.connect("draw", self._draw_cb) # GTK3
+ except:
+ self.window.connect("expose-event", self._expose_cb) # GTK2
self.window.connect("button-press-event", self._buttonpress_cb)
self.window.connect("button-release-event", self._buttonrelease_cb)
self.window.connect("motion-notify-event", self._move_cb)
@@ -409,12 +415,27 @@ class TurtleArtWindow():
return len(self.just_blocks()) == 1
def _expose_cb(self, win=None, event=None):
- """ Repaint """
+ """ Repaint (GTK2) """
self.do_expose_event(event)
return True
+ def _draw_cb(self, win=None, cr=None):
+ """ Repaint (GTK3) """
+ self.do_draw_event(cr)
+ return True
+
+ def do_draw_event(self, cr):
+ # GTK3 draw event has properly clipped cairo context already
+ if self.turtle_canvas is not None:
+ cr.set_source_surface(self.turtle_canvas)
+ cr.paint()
+
+ # Refresh sprite list
+ self.sprite_list.redraw_sprites(cr=cr)
+
# Handle the expose-event by drawing
def do_expose_event(self, event=None):
+ # for GTK2 expose event we need to create cairo context & clip it
# Create the cairo context
cr = self.window.window.cairo_create()
@@ -428,12 +449,7 @@ class TurtleArtWindow():
event.area.width, event.area.height)
cr.clip()
- if self.turtle_canvas is not None:
- cr.set_source_surface(self.turtle_canvas)
- cr.paint()
-
- # Refresh sprite list
- self.sprite_list.redraw_sprites(cr=cr)
+ self.do_draw_event(cr)
def eraser_button(self):
""" Eraser_button (hide status block when clearing the screen.) """