From 60d0d9caec902cf6824ce01368436e58925ceff4 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Tue, 10 Apr 2012 21:51:07 +0000 Subject: scroll canvas on drag --- 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) -- cgit v0.9.1