Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter.bender@gmail.com>2012-04-10 21:51:07 (GMT)
committer Walter Bender <walter.bender@gmail.com>2012-04-10 21:51:07 (GMT)
commit60d0d9caec902cf6824ce01368436e58925ceff4 (patch)
treed0be389d542b9cd08f1ec207fc0fd3aa6f28f2f1
parenta331be739602246b761d9d2035b5fd5a71208ff8 (diff)
scroll canvas on drag
-rw-r--r--TurtleArt/tawindow.py22
-rw-r--r--TurtleArtActivity.py34
2 files changed, 53 insertions, 3 deletions
diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py
index c1fa4a6..f6c41b4 100644
--- a/TurtleArt/tawindow.py
+++ b/TurtleArt/tawindow.py
@@ -201,6 +201,7 @@ class TurtleArtWindow():
self.drag_group = None
self.drag_turtle = 'move', 0, 0
self.drag_pos = 0, 0
+ self.dragging_canvas = [False, 0, 0]
self.turtle_movement_to_share = None
self.paste_offset = 20 # Don't paste on top of where you copied.
@@ -1181,8 +1182,12 @@ class TurtleArtWindow():
self.dx = 0
self.dy = 0
+ self.dragging_canvas[1] = x
+ self.dragging_canvas[2] = y
if spr is None:
+ self.dragging_canvas[0] = True
return True
+ self.dragging_canvas[0] = False
self.selected_spr = spr
# From the sprite at x, y, look for a corresponding block
@@ -1685,6 +1690,16 @@ class TurtleArtWindow():
def _mouse_move(self, x, y):
""" Process mouse movements """
+
+ if self.dragging_canvas[0]:
+ dx = self.dragging_canvas[1] - x
+ dy = self.dragging_canvas[2] - y
+ self.dragging_canvas[1] = x
+ self.dragging_canvas[2] = y
+ if self.running_sugar:
+ self.activity.adjust_sw(dx, dy)
+ return True
+
self.block_operation = 'move'
# First, check to see if we are dragging or rotating a turtle.
@@ -1853,6 +1868,13 @@ class TurtleArtWindow():
return True
def button_release(self, x, y):
+ if self.dragging_canvas[0]:
+ self.dragging_canvas[0] = False
+ self.dragging_canvas[1] = x
+ self.dragging_canvas[2] = y
+ self.activity.adjust_palette()
+ return True
+
# We may have been moving the turtle
if self.selected_turtle is not None:
(tx, ty) = self.selected_turtle.get_xy()
diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py
index c6c00b9..8c4dcc9 100644
--- a/TurtleArtActivity.py
+++ b/TurtleArtActivity.py
@@ -112,6 +112,8 @@ class TurtleArtActivity(activity.Activity):
count += 1
self.metadata['activity count'] = str(count)
+ self._defer_palette_move = False
+
# Activity toolbar callbacks
def do_save_as_html_cb(self, button):
@@ -380,6 +382,33 @@ class TurtleArtActivity(activity.Activity):
self.tw.load_file(True)
self.tw.run_button(0)
+ def adjust_sw(self, dx, dy):
+ ''' Adjust the scrolled window position. '''
+ hadj = self.sw.get_hadjustment()
+ hvalue = hadj.get_value() + dx
+ if hvalue < hadj.get_lower():
+ hvalue = hadj.get_lower()
+ elif hvalue > hadj.get_upper():
+ hvalue = hadj.get_upper()
+ hadj.set_value(hvalue)
+ self.sw.set_hadjustment(hadj)
+ vadj = self.sw.get_vadjustment()
+ vvalue = vadj.get_value() + dy
+ if vvalue < vadj.get_lower():
+ vvalue = vadj.get_lower()
+ elif vvalue > vadj.get_upper():
+ vvalue = vadj.get_upper()
+ vadj.set_value(vvalue)
+ self.sw.set_vadjustment(vadj)
+ self._defer_palette_move = True
+
+ def adjust_palette(self):
+ ''' Align palette to scrolled window position. '''
+ if not self.tw.hw in [XO1]:
+ self.tw.move_palettes(self.sw.get_hadjustment().get_value(),
+ self.sw.get_vadjustment().get_value())
+ self._defer_palette_move = False
+
def recenter(self):
''' Recenter scrolled window around canvas. '''
self.hadj_value = 0
@@ -390,8 +419,7 @@ class TurtleArtActivity(activity.Activity):
vadj = self.sw.get_vadjustment()
vadj.set_value(self.vadj_value)
self.sw.set_vadjustment(vadj)
- if not self.tw.hw in [XO1]:
- self.tw.move_palettes(self.hadj_value, self.vadj_value)
+ self.adjust_palette()
def do_fullscreen_cb(self, button):
''' Hide the Sugar toolbars. '''
@@ -888,7 +916,7 @@ class TurtleArtActivity(activity.Activity):
self.hadj_value = hadj.get_value()
vadj = self.sw.get_vadjustment()
self.vadj_value = vadj.get_value()
- if not self.tw.hw in [XO1]:
+ if not self.tw.hw in [XO1] and not self._defer_palette_move:
gobject.idle_add(self.tw.move_palettes, self.hadj_value,
self.vadj_value)