Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TurtleArt
diff options
context:
space:
mode:
Diffstat (limited to 'TurtleArt')
-rw-r--r--TurtleArt/talogo.py1
-rw-r--r--TurtleArt/taturtle.py24
-rw-r--r--TurtleArt/tawindow.py90
3 files changed, 88 insertions, 27 deletions
diff --git a/TurtleArt/talogo.py b/TurtleArt/talogo.py
index 7aac4ce..0b178c6 100644
--- a/TurtleArt/talogo.py
+++ b/TurtleArt/talogo.py
@@ -394,6 +394,7 @@ class LogoCode:
if self._disable_help:
self.tw.no_help = False
self._disable_help = False
+ self.tw.display_coordinates()
def icall(self, fcn, *args):
""" Add a function and its arguments to the program stack. """
diff --git a/TurtleArt/taturtle.py b/TurtleArt/taturtle.py
index 10d0230..8d2afea 100644
--- a/TurtleArt/taturtle.py
+++ b/TurtleArt/taturtle.py
@@ -138,7 +138,10 @@ class Turtles:
self._active_turtle.set_color(0)
self._active_turtle.set_shade(50)
self._active_turtle.set_gray(100)
- self._active_turtle.set_pen_size(5)
+ if self.turtle_window.coord_scale == 1:
+ self._active_turtle.set_pen_size(5)
+ else:
+ self._active_turtle.set_pen_size(1)
self._active_turtle.reset_shapes()
self._active_turtle.set_heading(0.0)
self._active_turtle.set_pen_state(False)
@@ -202,7 +205,10 @@ class Turtle:
self._pen_shade = 50
self._pen_color = 0
self._pen_gray = 100
- self._pen_size = 5
+ if self._turtles.turtle_window.coord_scale == 1:
+ self._pen_size = 5
+ else:
+ self._pen_size = 1
self._pen_state = True
self._pen_fill = False
self._poly_points = []
@@ -422,7 +428,8 @@ class Turtle:
self._turtles.turtle_window.running_sugar)
return
- self._turtles.turtle_window.canvas.set_pen_size(self._pen_size)
+ self._turtles.turtle_window.canvas.set_pen_size(
+ self._pen_size * self._turtles.turtle_window.coord_scale)
if self._turtles.turtle_window.sharing() and share:
event = 'w|%s' % (data_to_string([self._turtles.turtle_window.nick,
@@ -555,12 +562,15 @@ class Turtle:
int(distance)]))
self._turtles.turtle_window.send_event(event)
- def set_xy(self, x, y, share=True, pendown=True):
+ def set_xy(self, x, y, share=True, pendown=True, dragging=False):
old = self.get_xy()
-
try:
- xcor = x * self._turtles.turtle_window.coord_scale
- ycor = y * self._turtles.turtle_window.coord_scale
+ if dragging:
+ xcor = x
+ ycor = y
+ else:
+ xcor = x * self._turtles.turtle_window.coord_scale
+ ycor = y * self._turtles.turtle_window.coord_scale
except (TypeError, ValueError):
debug_output('bad value sent to %s' % (__name__),
self._turtles.turtle_window.running_sugar)
diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py
index a791919..3a8f4bb 100644
--- a/TurtleArt/tawindow.py
+++ b/TurtleArt/tawindow.py
@@ -102,10 +102,12 @@ class TurtleArtWindow():
def __init__(self, canvas_window, path, parent=None, activity=None,
mycolors=None, mynick=None, turtle_canvas=None,
running_sugar=True, running_turtleart=True):
- '''parent -- the GTK Window that TA runs in
- activity -- the object that instantiated this TurtleArtWindow (in
- GNOME, a TurtleMain instance)
- running_turtleart -- are we running TA or exported python code?
+ '''
+ parent: the GTK Window that TA runs in
+ activity: the object that instantiated this TurtleArtWindow (in
+ GNOME, a TurtleMain instance, in Sugar, the Activity
+ instance)
+ running_turtleart: are we running TA or exported python code?
'''
self.parent = parent
self.turtle_canvas = turtle_canvas
@@ -529,6 +531,8 @@ class TurtleArtWindow():
self._autohide_shape = True
for name in OVERLAY_SHAPES:
+ if name == 'Cartesian':
+ continue
self.overlay_shapes[name] = Sprite(
self.sprite_list,
int(self.width / 2 - 600),
@@ -538,6 +542,8 @@ class TurtleArtWindow():
self.overlay_shapes[name].hide()
self.overlay_shapes[name].type = 'overlay'
+ self._create_scaled_cartesian_coordinates()
+
if self.running_turtleart and not self.running_sugar:
# offset = 2 * self.width - 55 * len(TOOLBAR_SHAPES)
offset = 55 * (1 + len(palette_blocks))
@@ -553,6 +559,27 @@ class TurtleArtWindow():
self.toolbar_shapes[name].type = 'toolbar'
self.toolbar_shapes['stopiton'].hide()
+ def _create_scaled_cartesian_coordinates(self):
+ # Cartesian overlay has to be scaled to match the coordinate_scale
+ # 200 pixels in the graphic == height / 4. (10 units)
+ pixbuf = svg_str_to_pixbuf(
+ svg_from_file('%s/images/%s.svg' % (self.path, 'Cartesian')))
+
+ if self.running_sugar:
+ scale = self.height / 800.
+ else:
+ scale = self.height / 800.
+ # scale = (self.height + ICON_SIZE) / 800.
+ self.overlay_shapes['Cartesian'] = Sprite(
+ self.sprite_list,
+ int(self.width / 2 - 600),
+ int(self.height / 2 - 450),
+ pixbuf.scale_simple(int(1200 * scale),
+ int(900 * scale),
+ gtk.gdk.INTERP_BILINEAR))
+ self.overlay_shapes['Cartesian'].set_layer(TAB_LAYER)
+ self.overlay_shapes['Cartesian'].hide()
+
def set_sharing(self, shared):
self._sharing = shared
@@ -714,7 +741,8 @@ class TurtleArtWindow():
if self.running_sugar:
y_offset = 0
else:
- y_offset = ICON_SIZE
+ y_offset = 0
+ # y_offset = ICON_SIZE
self.canvas.draw_surface(
self.overlay_shapes[overlay].cached_surfaces[0],
(self.canvas.width - width) / 2.0,
@@ -722,10 +750,13 @@ class TurtleArtWindow():
width,
height)
- def update_overlay_position(self, widget, event):
+ def update_overlay_position(self, widget=None, event=None):
''' Reposition the overlays when window size changes '''
- self.width = event.width
- self.height = event.height
+ # self.width = event.width
+ # self.height = event.height
+ self.width = gtk.gdk.screen_width()
+ self.height = gtk.gdk.screen_height()
+
for name in OVERLAY_SHAPES:
if not name in self.overlay_shapes:
continue
@@ -734,17 +765,24 @@ class TurtleArtWindow():
if shape in shape._sprites.list:
shape.hide()
showing = True
+ self.overlay_shapes[name].move((int(self.width / 2 - 600),
+ int(self.height / 2 - 450)))
+ '''
self.overlay_shapes[name] = Sprite(
self.sprite_list,
int(self.width / 2 - 600),
int(self.height / 2 - 450),
svg_str_to_pixbuf(
svg_from_file('%s/images/%s.svg' % (self.path, name))))
+ '''
if showing:
self.overlay_shapes[name].set_layer(OVERLAY_LAYER)
else:
self.overlay_shapes[name].hide()
+ '''
self.overlay_shapes[name].type = 'overlay'
+ '''
+
self.cartesian = False
self.polar = False
self.metric = False
@@ -802,6 +840,7 @@ class TurtleArtWindow():
if not self.running_sugar or not self.activity.has_toolbarbox:
self.toolbar_spr.set_layer(CATEGORY_LAYER)
self.palette = True
+ self._set_coordinates_label(palette_names[n])
def hide_palette(self):
''' Hide the palette. '''
@@ -1410,6 +1449,13 @@ class TurtleArtWindow():
if spr is not None:
blk = self.block_list.spr_to_block(spr)
if blk is not None:
+ # Make sure stop button is visible
+ if self.running_sugar:
+ self.activity.stop_turtle_button.set_icon("stopiton")
+ self.activity.stop_turtle_button.set_tooltip(
+ _('Stop turtle'))
+ elif self.interactive_mode:
+ self.toolbar_shapes['stopiton'].set_layer(TAB_LAYER)
self.showlabel('status',
label=_('Please hit the Stop Button \
before making changes to your Turtle Blocks program'))
@@ -2511,10 +2557,12 @@ before making changes to your Turtle Blocks program'))
pos = self.turtles.screen_to_turtle_coordinates((dx, dy))
if self.selected_turtle.get_pen_state():
self.selected_turtle.set_pen_state(False)
- self.selected_turtle.set_xy(*pos, share=False)
+ self.selected_turtle.set_xy(*pos, share=False,
+ dragging=True)
self.selected_turtle.set_pen_state(True)
else:
- self.selected_turtle.set_xy(*pos, share=False)
+ self.selected_turtle.set_xy(*pos, share=False,
+ dragging=True)
if self.update_counter % 5:
self.lc.update_label_value(
'xcor', self.selected_turtle.get_xy()[0] /
@@ -3809,7 +3857,6 @@ before making changes to your Turtle Blocks program'))
(self._loaded_project), self.running_sugar)
saved_project_data = ''
current_project_data = data_to_string(self.assemble_data_to_save())
-
return saved_project_data != current_project_data
def load_files(self, ta_file, create_new_project=True):
@@ -4133,6 +4180,7 @@ before making changes to your Turtle Blocks program'))
[None, None]]])
else:
self.process_data(data_from_file(ta_file))
+ self._loaded_project = ta_file
def save_file(self, file_name=None):
''' Start a project to a file '''
@@ -4219,11 +4267,7 @@ before making changes to your Turtle Blocks program'))
def display_coordinates(self, clear=False):
''' Display the coordinates of the current turtle on the toolbar '''
if clear:
- if self.running_sugar:
- self.activity.coordinates_label.set_text('')
- self.activity.coordinates_label.show()
- elif self.interactive_mode:
- self.parent.set_title('')
+ self._set_coordinates_label('')
else:
x = round_int(float(self.turtles.get_active_turtle().get_xy()[0]) /
self.coord_scale)
@@ -4235,19 +4279,25 @@ before making changes to your Turtle Blocks program'))
formatting = '(%d, %d) %d'
else:
formatting = '(%0.2f, %0.2f) %0.2f'
- self.activity.coordinates_label.set_text(
- formatting % (x, y, h))
- self.activity.coordinates_label.show()
+ self._set_coordinates_label(formatting % (x, y, h))
elif self.interactive_mode:
if int(x) == x and int(y) == y and int(h) == h:
formatting = '%s — %s: %d %s: %d %s: %d'
else:
formatting = '%s — %s: %0.2f %s: %0.2f %s: %0.2f'
- self.parent.set_title(
+ self._set_coordinates_label(
formatting % (self.activity.name, _('xcor'), x,
_('ycor'), y, _('heading'), h))
self.update_counter = 0
+ def _set_coordinates_label(self, text):
+ if self.running_sugar:
+ self.activity.coordinates_label.set_text(text)
+ self.activity.coordinates_label.show()
+ elif self.interactive_mode:
+ self.parent.set_title(text)
+
+
def showlabel(self, shp, label=''):
''' Display a message on a status block '''
if not self.interactive_mode: