From b5e3e3a9f3c0b753737e92bf6c5c2cf54e32fd9b Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Wed, 26 Jun 2013 08:34:22 +0000 Subject: make private variables _private --- diff --git a/TurtleArt/taturtle.py b/TurtleArt/taturtle.py index 4a17403..9055896 100644 --- a/TurtleArt/taturtle.py +++ b/TurtleArt/taturtle.py @@ -186,41 +186,40 @@ class Turtle: def __init__(self, turtles, turtle_name, turtle_colors=None): ''' The turtle is not a block, just a sprite with an orientation ''' - self.turtles = turtles self.spr = None - self.hidden = False - self.shapes = [] - self.custom_shapes = False - self.type = 'turtle' - self.name = turtle_name - self.remote = False - self.x = 0.0 - self.y = 0.0 - self.heading = 0.0 - self.half_width = 0 - self.half_height = 0 - self.pen_shade = 50 - self.pen_color = 0 - self.pen_gray = 100 - self.pen_size = 5 - self.pen_state = True - self.pen_fill = False - self.pen_poly_points = [] self.label_block = None - - self._prep_shapes(turtle_name, self.turtles, turtle_colors) + self._turtles = turtles + self._shapes = [] + self._custom_shapes = False + self._name = turtle_name + self._hidden = False + self._remote = False + self._x = 0.0 + self._y = 0.0 + self._heading = 0.0 + self._half_width = 0 + self._half_height = 0 + self._drag_radius = None + self._pen_shade = 50 + self._pen_color = 0 + self._pen_gray = 100 + self._pen_size = 5 + self._pen_state = True + self._pen_fill = False + self._poly_points = [] + + self._prep_shapes(turtle_name, self._turtles, turtle_colors) # Create a sprite for the turtle in interactive mode. if turtles.sprite_list is not None: - self.spr = Sprite(self.turtles.sprite_list, 0, 0, self.shapes[0]) + self.spr = Sprite(self._turtles.sprite_list, 0, 0, self._shapes[0]) - self.half_width = int(self.spr.rect.width / 2.0) - self.half_height = int(self.spr.rect.height / 2.0) + self._calculate_sizes() # Choose a random angle from which to attach the turtle # label to be used when sharing. angle = uniform(0, pi * 4 / 3.0) # 240 degrees - width = self.shapes[0].get_width() + width = self._shapes[0].get_width() radius = width * 0.67 # Restrict the angle to the sides: 30-150; 210-330 if angle > pi * 2 / 3.0: @@ -232,13 +231,19 @@ class Turtle: self.label_xy = [int(radius * sin(angle) + width / 2.0), int(radius * cos(angle) + width / 2.0)] - self.turtles.add_to_dict(turtle_name, self) + self._turtles.add_to_dict(turtle_name, self) + + def _calculate_sizes(self): + self._half_width = int(self.spr.rect.width / 2.0) + self._half_height = int(self.spr.rect.height / 2.0) + self._drag_radius = ((self._half_width * self._half_width) + + (self._half_height * self._half_height)) / 6 def set_remote(self): - self.remote = True + self._remote = True def get_remote(self): - return self.remote + return self._remote def _prep_shapes(self, name, turtles=None, turtle_colors=None): # If the turtle name is an int, we'll use a palette color as the @@ -251,38 +256,38 @@ class Turtle: if turtle_colors is not None: self.colors = turtle_colors[:] - self.shapes = generate_turtle_pixbufs(self.colors) + self._shapes = generate_turtle_pixbufs(self.colors) elif use_color_table: fill = wrap100(int_key) stroke = wrap100(fill + 10) self.colors = ['#%06x' % (COLOR_TABLE[fill]), '#%06x' % (COLOR_TABLE[stroke])] - self.shapes = generate_turtle_pixbufs(self.colors) + self._shapes = generate_turtle_pixbufs(self.colors) else: if turtles is not None: self.colors = DEFAULT_TURTLE_COLORS - self.shapes = turtles.get_pixbufs() + self._shapes = turtles.get_pixbufs() def set_turtle_colors(self, turtle_colors): ''' reset the colors of a preloaded turtle ''' if turtle_colors is not None: self.colors = turtle_colors[:] - self.shapes = generate_turtle_pixbufs(self.colors) - self.set_heading(self.heading, share=False) + self._shapes = generate_turtle_pixbufs(self.colors) + self.set_heading(self._heading, share=False) def set_shapes(self, shapes, i=0): ''' Reskin the turtle ''' n = len(shapes) if n == 1 and i > 0: # set shape[i] - if i < len(self.shapes): - self.shapes[i] = shapes[0] + if i < len(self._shapes): + self._shapes[i] = shapes[0] elif n == SHAPES: # all shapes have been precomputed - self.shapes = shapes[:] + self._shapes = shapes[:] else: # rotate shapes if n != 1: debug_output("%d images passed to set_shapes: ignoring" % (n), - self.turtles.turtle_window.running_sugar) - if self.heading == 0.0: # rotate the shapes + self._turtles.turtle_window.running_sugar) + if self._heading == 0.0: # rotate the shapes images = [] w, h = shapes[0].get_width(), shapes[0].get_height() nw = nh = int(sqrt(w * w + h * h)) @@ -298,40 +303,42 @@ class Turtle: context.rectangle(0, 0, nw, nh) context.fill() images.append(surface) - self.shapes = images[:] + self._shapes = images[:] else: # associate shape with image at current heading - j = int(self.heading + 5) % 360 / (360 / SHAPES) - self.shapes[j] = shapes[0] - self.custom_shapes = True + j = int(self._heading + 5) % 360 / (360 / SHAPES) + self._shapes[j] = shapes[0] + self._custom_shapes = True self.show() + self._calculate_sizes() def reset_shapes(self): ''' Reset the shapes to the standard turtle ''' - if self.custom_shapes: - self.shapes = generate_turtle_pixbufs(self.colors) - self.custom_shapes = False + if self._custom_shapes: + self._shapes = generate_turtle_pixbufs(self.colors) + self._custom_shapes = False + self._calculate_sizes() def set_heading(self, heading, share=True): ''' Set the turtle heading (one shape per 360/SHAPES degrees) ''' try: - self.heading = heading + self._heading = heading except (TypeError, ValueError): debug_output('bad value sent to %s' % (__name__), - self.turtles.turtle_window.running_sugar) + self._turtles.turtle_window.running_sugar) return - self.heading %= 360 + self._heading %= 360 - i = (int(self.heading + 5) % 360) / (360 / SHAPES) - if not self.hidden and self.spr is not None: + i = (int(self._heading + 5) % 360) / (360 / SHAPES) + if not self._hidden and self.spr is not None: try: - self.spr.set_shape(self.shapes[i]) + self.spr.set_shape(self._shapes[i]) except IndexError: - self.spr.set_shape(self.shapes[0]) + self.spr.set_shape(self._shapes[0]) - if self.turtles.turtle_window.sharing() and share: - event = 'r|%s' % (data_to_string([self.turtles.turtle_window.nick, - round_int(self.heading)])) - self.turtles.turtle_window.send_event(event) + if self._turtles.turtle_window.sharing() and share: + event = 'r|%s' % (data_to_string([self._turtles.turtle_window.nick, + round_int(self._heading)])) + self._turtles.turtle_window.send_event(event) def set_color(self, color=None, share=True): ''' Set the pen color for this turtle. ''' @@ -343,137 +350,137 @@ class Turtle: self.set_color(COLORDICT[color][0], share) color = COLORDICT[color][0] else: - color = self.pen_color + color = self._pen_color try: - self.pen_color = color + self._pen_color = color except (TypeError, ValueError): debug_output('bad value sent to %s' % (__name__), - self.turtles.turtle_window.running_sugar) + self._turtles.turtle_window.running_sugar) return - self.turtles.turtle_window.canvas.set_fgcolor(shade=self.pen_shade, - gray=self.pen_gray, - color=self.pen_color) + self._turtles.turtle_window.canvas.set_fgcolor(shade=self._pen_shade, + gray=self._pen_gray, + color=self._pen_color) - if self.turtles.turtle_window.sharing() and share: - event = 'c|%s' % (data_to_string([self.turtles.turtle_window.nick, - round_int(self.pen_color)])) - self.turtles.turtle_window.send_event(event) + if self._turtles.turtle_window.sharing() and share: + event = 'c|%s' % (data_to_string([self._turtles.turtle_window.nick, + round_int(self._pen_color)])) + self._turtles.turtle_window.send_event(event) def set_gray(self, gray=None, share=True): ''' Set the pen gray level for this turtle. ''' if gray is not None: try: - self.pen_gray = gray + self._pen_gray = gray except (TypeError, ValueError): debug_output('bad value sent to %s' % (__name__), - self.turtles.turtle_window.running_sugar) + self._turtles.turtle_window.running_sugar) return - if self.pen_gray < 0: - self.pen_gray = 0 - if self.pen_gray > 100: - self.pen_gray = 100 + if self._pen_gray < 0: + self._pen_gray = 0 + if self._pen_gray > 100: + self._pen_gray = 100 - self.turtles.turtle_window.canvas.set_fgcolor(shade=self.pen_shade, - gray=self.pen_gray, - color=self.pen_color) + self._turtles.turtle_window.canvas.set_fgcolor(shade=self._pen_shade, + gray=self._pen_gray, + color=self._pen_color) - if self.turtles.turtle_window.sharing() and share: - event = 'g|%s' % (data_to_string([self.turtles.turtle_window.nick, - round_int(self.pen_gray)])) - self.turtles.turtle_window.send_event(event) + if self._turtles.turtle_window.sharing() and share: + event = 'g|%s' % (data_to_string([self._turtles.turtle_window.nick, + round_int(self._pen_gray)])) + self._turtles.turtle_window.send_event(event) def set_shade(self, shade=None, share=True): ''' Set the pen shade for this turtle. ''' if shade is not None: try: - self.pen_shade = shade + self._pen_shade = shade except (TypeError, ValueError): debug_output('bad value sent to %s' % (__name__), - self.turtles.turtle_window.running_sugar) + self._turtles.turtle_window.running_sugar) return - self.turtles.turtle_window.canvas.set_fgcolor(shade=self.pen_shade, - gray=self.pen_gray, - color=self.pen_color) + self._turtles.turtle_window.canvas.set_fgcolor(shade=self._pen_shade, + gray=self._pen_gray, + color=self._pen_color) - if self.turtles.turtle_window.sharing() and share: - event = 's|%s' % (data_to_string([self.turtles.turtle_window.nick, - round_int(self.pen_shade)])) - self.turtles.turtle_window.send_event(event) + if self._turtles.turtle_window.sharing() and share: + event = 's|%s' % (data_to_string([self._turtles.turtle_window.nick, + round_int(self._pen_shade)])) + self._turtles.turtle_window.send_event(event) def set_pen_size(self, pen_size=None, share=True): ''' Set the pen size for this turtle. ''' if pen_size is not None: try: - self.pen_size = max(0, pen_size) + self._pen_size = max(0, pen_size) except (TypeError, ValueError): debug_output('bad value sent to %s' % (__name__), - self.turtles.turtle_window.running_sugar) + 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) - if self.turtles.turtle_window.sharing() and share: - event = 'w|%s' % (data_to_string([self.turtles.turtle_window.nick, - round_int(self.pen_size)])) - self.turtles.turtle_window.send_event(event) + if self._turtles.turtle_window.sharing() and share: + event = 'w|%s' % (data_to_string([self._turtles.turtle_window.nick, + round_int(self._pen_size)])) + self._turtles.turtle_window.send_event(event) def set_pen_state(self, pen_state=None, share=True): ''' Set the pen state (down==True) for this turtle. ''' if pen_state is not None: - self.pen_state = pen_state + self._pen_state = pen_state - if self.turtles.turtle_window.sharing() and share: - event = 'p|%s' % (data_to_string([self.turtles.turtle_window.nick, - self.pen_state])) - self.turtles.turtle_window.send_event(event) + if self._turtles.turtle_window.sharing() and share: + event = 'p|%s' % (data_to_string([self._turtles.turtle_window.nick, + self._pen_state])) + self._turtles.turtle_window.send_event(event) def set_fill(self, state=False): - self.pen_fill = state - if not self.pen_fill: - self.poly_points = [] + self._pen_fill = state + if not self._pen_fill: + self._poly_points = [] def set_poly_points(self, poly_points=None): if poly_points is not None: - self.poly_points = poly_points[:] + self._poly_points = poly_points[:] def start_fill(self): - self.pen_fill = True - self.poly_points = [] + self._pen_fill = True + self._poly_points = [] def stop_fill(self, share=True): - self.pen_fill = False - if len(self.poly_points) == 0: + self._pen_fill = False + if len(self._poly_points) == 0: return - self.turtles.turtle_window.canvas.fill_polygon(self.poly_points) + self._turtles.turtle_window.canvas.fill_polygon(self._poly_points) - if self.turtles.turtle_window.sharing() and share: + if self._turtles.turtle_window.sharing() and share: shared_poly_points = [] - for p in self.poly_points: + for p in self._poly_points: shared_poly_points.append( - (self.turtles.screen_to_turtle_coordinates(p))) + (self._turtles.screen_to_turtle_coordinates(p))) event = 'F|%s' % (data_to_string( - [self.turtles.turtle_window.nick, shared_poly_points])) - self.turtles.turtle_window.send_event(event) - self.poly_points = [] + [self._turtles.turtle_window.nick, shared_poly_points])) + self._turtles.turtle_window.send_event(event) + self._poly_points = [] def hide(self): if self.spr is not None: self.spr.hide() if self.label_block is not None: self.label_block.spr.hide() - self.hidden = True + self._hidden = True def show(self): if self.spr is not None: self.spr.set_layer(TURTLE_LAYER) - self.hidden = False - self.move((self.x, self.y)) - self.set_heading(self.heading) + self._hidden = False + self.move_turtle_spr((self._x, self._y)) + self.set_heading(self._heading) if self.label_block is not None: self.label_block.spr.set_layer(TURTLE_LAYER + 1) @@ -482,95 +489,93 @@ class Turtle: if pos is None: pos = self.get_xy() - self.x, self.y = pos[0], pos[1] - self.move(pos) + self._x, self._y = pos[0], pos[1] + if self.spr is not None: + self.move_turtle_spr(pos) - def move(self, pos): + def move_turtle_spr(self, pos): ''' Move the turtle's sprite ''' - # self.x, self.y = pos[0], pos[1] - pos = self.turtles.turtle_to_screen_coordinates(pos) + pos = self._turtles.turtle_to_screen_coordinates(pos) - # In interactive mode, center the sprite around the turtle position - if self.spr is not None: - pos[0] -= self.half_width - pos[1] -= self.half_height + pos[0] -= self._half_width + pos[1] -= self._half_height - if not self.hidden and self.spr is not None: - self.spr.move(pos) - if self.label_block is not None: - self.label_block.spr.move((pos[0] + self.label_xy[0], - pos[1] + self.label_xy[1])) + if not self._hidden and self.spr is not None: + self.spr.move(pos) + if self.label_block is not None: + self.label_block.spr.move((pos[0] + self.label_xy[0], + pos[1] + self.label_xy[1])) def right(self, degrees, share=True): ''' Rotate turtle clockwise ''' try: - self.heading += degrees + self._heading += degrees except (TypeError, ValueError): debug_output('bad value sent to %s' % (__name__), - self.turtles.turtle_window.running_sugar) + self._turtles.turtle_window.running_sugar) return - self.heading %= 360 + self._heading %= 360 - if self.turtles.turtle_window.sharing() and share: - event = 'r|%s' % (data_to_string([self.turtles.turtle_window.nick, - round_int(self.heading)])) - self.turtles.turtle_window.send_event(event) + if self._turtles.turtle_window.sharing() and share: + event = 'r|%s' % (data_to_string([self._turtles.turtle_window.nick, + round_int(self._heading)])) + self._turtles.turtle_window.send_event(event) def _draw_line(self, old, new, pendown): - if self.pen_state and pendown: - self.turtles.turtle_window.canvas.set_source_rgb() - pos1 = self.turtles.turtle_to_screen_coordinates(old) - pos2 = self.turtles.turtle_to_screen_coordinates(new) - self.turtles.turtle_window.canvas.draw_line(pos1[0], pos1[1], + if self._pen_state and pendown: + self._turtles.turtle_window.canvas.set_source_rgb() + pos1 = self._turtles.turtle_to_screen_coordinates(old) + pos2 = self._turtles.turtle_to_screen_coordinates(new) + self._turtles.turtle_window.canvas.draw_line(pos1[0], pos1[1], pos2[0], pos2[1]) - if self.pen_fill: - if self.poly_points == []: - self.poly_points.append(('move', pos1[0], pos1[1])) - self.poly_points.append(('line', pos2[0], pos2[1])) + if self._pen_fill: + if self._poly_points == []: + self._poly_points.append(('move', pos1[0], pos1[1])) + self._poly_points.append(('line', pos2[0], pos2[1])) def forward(self, distance, share=True): - scaled_distance = distance * self.turtles.turtle_window.coord_scale + scaled_distance = distance * self._turtles.turtle_window.coord_scale old = self.get_xy() try: - xcor = old[0] + scaled_distance * sin(self.heading * DEGTOR) - ycor = old[1] + scaled_distance * cos(self.heading * DEGTOR) + xcor = old[0] + scaled_distance * sin(self._heading * DEGTOR) + ycor = old[1] + scaled_distance * cos(self._heading * DEGTOR) except (TypeError, ValueError): debug_output('bad value sent to %s' % (__name__), - self.turtles.turtle_window.running_sugar) + self._turtles.turtle_window.running_sugar) return self._draw_line(old, (xcor, ycor), True) self.move_turtle((xcor, ycor)) - if self.turtles.turtle_window.sharing() and share: - event = 'f|%s' % (data_to_string([self.turtles.turtle_window.nick, + if self._turtles.turtle_window.sharing() and share: + event = 'f|%s' % (data_to_string([self._turtles.turtle_window.nick, int(distance)])) - self.turtles.turtle_window.send_event(event) + self._turtles.turtle_window.send_event(event) def set_xy(self, pos, share=True, pendown=True): old = self.get_xy() try: - xcor = pos[0] * self.turtles.turtle_window.coord_scale - ycor = pos[1] * self.turtles.turtle_window.coord_scale + xcor = pos[0] * self._turtles.turtle_window.coord_scale + ycor = pos[1] * self._turtles.turtle_window.coord_scale except (TypeError, ValueError): debug_output('bad value sent to %s' % (__name__), - self.turtles.turtle_window.running_sugar) + self._turtles.turtle_window.running_sugar) return self._draw_line(old, (xcor, ycor), pendown) self.move_turtle((xcor, ycor)) - if self.turtles.turtle_window.sharing() and share: - event = 'x|%s' % (data_to_string([self.turtles.turtle_window.nick, + if self._turtles.turtle_window.sharing() and share: + event = 'x|%s' % (data_to_string([self._turtles.turtle_window.nick, [round_int(x), round_int(y)]])) - self.turtles.turtle_window.send_event(event) + self._turtles.turtle_window.send_event(event) def arc(self, a, r, share=True): ''' Draw an arc ''' - if self.pen_state: - self.turtles.turtle_window.canvas.set_source_rgb() + if self._pen_state: + self._turtles.turtle_window.canvas.set_source_rgb() try: if a < 0: pos = self.larc(-a, r) @@ -578,80 +583,81 @@ class Turtle: pos = self.rarc(a, r) except (TypeError, ValueError): debug_output('bad value sent to %s' % (__name__), - self.turtles.turtle_window.running_sugar) + self._turtles.turtle_window.running_sugar) return self.move_turtle(pos) - if self.turtles.turtle_window.sharing() and share: - event = 'a|%s' % (data_to_string([self.turtles.turtle_window.nick, + if self._turtles.turtle_window.sharing() and share: + event = 'a|%s' % (data_to_string([self._turtles.turtle_window.nick, [round_int(a), round_int(r)]])) - self.turtles.turtle_window.send_event(event) + self._turtles.turtle_window.send_event(event) def rarc(self, a, r): ''' draw a clockwise arc ''' - r *= self.turtles.turtle_window.coord_scale + r *= self._turtles.turtle_window.coord_scale if r < 0: r = -r a = -a pos = self.get_xy() - cx = pos[0] + r * cos(self.heading * DEGTOR) - cy = pos[1] - r * sin(self.heading * DEGTOR) - if self.pen_state: - npos = self.turtles.turtle_to_screen_coordinates((cx, cy)) - self.turtles.turtle_window.canvas.rarc(npos[0], npos[1], r, a, - self.heading) - - if self.pen_fill: - if self.poly_points == []: - self.poly_points.append(('move', npos[0], npos[1])) - self.poly_points.append(('rarc', npos[0], npos[1], r, - (self.heading - 180) * DEGTOR, - (self.heading - 180 + a) * DEGTOR)) + cx = pos[0] + r * cos(self._heading * DEGTOR) + cy = pos[1] - r * sin(self._heading * DEGTOR) + if self._pen_state: + npos = self._turtles.turtle_to_screen_coordinates((cx, cy)) + self._turtles.turtle_window.canvas.rarc(npos[0], npos[1], r, a, + self._heading) + + if self._pen_fill: + if self._poly_points == []: + self._poly_points.append(('move', npos[0], npos[1])) + self._poly_points.append(('rarc', npos[0], npos[1], r, + (self._heading - 180) * DEGTOR, + (self._heading - 180 + a) \ + * DEGTOR)) self.right(a, False) - return [cx - r * cos(self.heading * DEGTOR), - cy + r * sin(self.heading * DEGTOR)] + return [cx - r * cos(self._heading * DEGTOR), + cy + r * sin(self._heading * DEGTOR)] def larc(self, a, r): ''' draw a counter-clockwise arc ''' - r *= self.turtles.turtle_window.coord_scale + r *= self._turtles.turtle_window.coord_scale if r < 0: r = -r a = -a pos = self.get_xy() - cx = pos[0] - r * cos(self.heading * DEGTOR) - cy = pos[1] + r * sin(self.heading * DEGTOR) - if self.pen_state: - npos = self.turtles.turtle_to_screen_coordinates((cx, cy)) - self.turtles.turtle_window.canvas.larc(npos[0], npos[1], r, a, - self.heading) - - if self.pen_fill: - if self.poly_points == []: - self.poly_points.append(('move', npos[0], npos[1])) - self.poly_points.append(('larc', npos[0], npos[1], r, - (self.heading) * DEGTOR, - (self.heading - a) * DEGTOR)) + cx = pos[0] - r * cos(self._heading * DEGTOR) + cy = pos[1] + r * sin(self._heading * DEGTOR) + if self._pen_state: + npos = self._turtles.turtle_to_screen_coordinates((cx, cy)) + self._turtles.turtle_window.canvas.larc(npos[0], npos[1], r, a, + self._heading) + + if self._pen_fill: + if self._poly_points == []: + self._poly_points.append(('move', npos[0], npos[1])) + self._poly_points.append(('larc', npos[0], npos[1], r, + (self._heading) * DEGTOR, + (self._heading - a) * DEGTOR)) self.right(-a, False) - return [cx + r * cos(self.heading * DEGTOR), - cy - r * sin(self.heading * DEGTOR)] + return [cx + r * cos(self._heading * DEGTOR), + cy - r * sin(self._heading * DEGTOR)] def draw_pixbuf(self, pixbuf, a, b, x, y, w, h, path, share=True): ''' Draw a pixbuf ''' - self.turtles.turtle_window.canvas.draw_pixbuf( - pixbuf, a, b, x, y, w, h, self.heading) + self._turtles.turtle_window.canvas.draw_pixbuf( + pixbuf, a, b, x, y, w, h, self._heading) - if self.turtles.turtle_window.sharing() and share: - if self.turtles.turtle_window.running_sugar: - tmp_path = get_path(self.turtles.turtle_window.activity, + if self._turtles.turtle_window.sharing() and share: + if self._turtles.turtle_window.running_sugar: + tmp_path = get_path(self._turtles.turtle_window.activity, 'instance') else: tmp_path = '/tmp' tmp_file = os.path.join( - get_path(self.turtles.turtle_window.activity, 'instance'), + get_path(self._turtles.turtle_window.activity, 'instance'), 'tmpfile.png') pixbuf.save(tmp_file, 'png', {'quality': '100'}) data = image_to_base64(tmp_file, tmp_path) @@ -660,7 +666,7 @@ class Turtle: pos = self.screen_to_turtle_coordinates((x, y)) - event = 'P|%s' % (data_to_string([self.turtles.turtle_window.nick, + event = 'P|%s' % (data_to_string([self._turtles.turtle_window.nick, [round_int(a), round_int(b), round_int(pos[0]), round_int(pos[1]), @@ -668,53 +674,58 @@ class Turtle: round_int(width), round_int(height), data]])) - gobject.idle_add(self.turtles.turtle_window.send_event, event) + gobject.idle_add(self._turtles.turtle_window.send_event, event) os.remove(tmp_file) def draw_text(self, label, x, y, size, w, share=True): ''' Draw text ''' - self.turtles.turtle_window.canvas.draw_text( - label, x, y, size, w, self.heading, - self.turtles.turtle_window.coord_scale) + self._turtles.turtle_window.canvas.draw_text( + label, x, y, size, w, self._heading, + 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, + if self._turtles.turtle_window.sharing() and share: + event = 'W|%s' % (data_to_string([self._turtles.turtle_window.nick, [label, round_int(x), round_int(y), round_int(size), round_int(w)]])) - self.turtles.turtle_window.send_event(event) + self._turtles.turtle_window.send_event(event) def get_name(self): - return self.name + return self._name def get_xy(self): - return [self.x, self.y] + return [self._x, self._y] def get_heading(self): - return self.heading + return self._heading def get_color(self): - return self.pen_color + return self._pen_color def get_gray(self): - return self.pen_gray + return self._pen_gray def get_shade(self): - return self.pen_shade + return self._pen_shade def get_pen_size(self): - return self.pen_size + return self._pen_size def get_pen_state(self): - return self.pen_state + return self._pen_state def get_fill(self): - return self.pen_fill + return self._pen_fill def get_poly_points(self): - return self.poly_points + return self._poly_points def get_pixel(self): - pos = self.turtles.turtle_to_screen_coordinates(self.get_xy()) - return self.turtles.turtle_window.canvas.get_pixel(pos[0], pos[1]) + pos = self._turtles.turtle_to_screen_coordinates(self.get_xy()) + return self._turtles.turtle_window.canvas.get_pixel(pos[0], pos[1]) + + def get_drag_radius(self): + if self._drag_radius is None: + self._calculate_sizes() + return self._drag_radius diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py index 2a1117b..0569bd0 100644 --- a/TurtleArt/tawindow.py +++ b/TurtleArt/tawindow.py @@ -2434,8 +2434,6 @@ before making changes to your Turtle Blocks program')) def _turtle_pressed(self, x, y): pos = self.selected_turtle.get_xy() tpos = self.turtles.turtle_to_screen_coordinates(pos) - w = self.selected_turtle.half_width - h = self.selected_turtle.half_height dx = x - tpos[0] dy = y - tpos[1] if not hasattr(self.lc, 'value_blocks'): @@ -2443,7 +2441,7 @@ before making changes to your Turtle Blocks program')) self.lc.update_values = True # Compare distance squared of drag position to sprite radius. # If x, y is near the edge, rotate. - if (dx * dx) + (dy * dy) > ((w * w) + (h * h)) / 6: + if (dx * dx) + (dy * dy) > self.selected_turtle.get_drag_radius(): self.drag_turtle = ( 'turn', self.selected_turtle.get_heading() - atan2(dy, dx) / DEGTOR, -- cgit v0.9.1