diff options
author | Walter Bender <walter@sugarlabs.org> | 2013-06-25 18:27:50 (GMT) |
---|---|---|
committer | Walter Bender <walter@sugarlabs.org> | 2013-06-25 18:27:50 (GMT) |
commit | 47bd3cca56e12d997e2823cb43ef8cd6d356dc92 (patch) | |
tree | 16882bea44589d36c205eecf7d441c8552be15a9 | |
parent | 9994fa57e66d46a1491b9c3850946b7fc87aa7e9 (diff) |
more clean up, bug fixes
-rw-r--r-- | TurtleArt/tabasics.py | 2 | ||||
-rw-r--r-- | TurtleArt/tacanvas.py | 114 | ||||
-rw-r--r-- | TurtleArt/taturtle.py | 15 |
3 files changed, 61 insertions, 70 deletions
diff --git a/TurtleArt/tabasics.py b/TurtleArt/tabasics.py index c060d9d..7de8a0f 100644 --- a/TurtleArt/tabasics.py +++ b/TurtleArt/tabasics.py @@ -274,7 +274,7 @@ turtle (can be used in place of a number block)'), self.tw.lc.def_prim( 'heading', 0, - lambda self: self.tw.turtles.get_active_turtle().get_heading) + lambda self: self.tw.turtles.get_active_turtle().get_heading()) palette.add_block('turtle-label', hidden=True, diff --git a/TurtleArt/tacanvas.py b/TurtleArt/tacanvas.py index 7f71b03..2af41cd 100644 --- a/TurtleArt/tacanvas.py +++ b/TurtleArt/tacanvas.py @@ -104,20 +104,19 @@ class TurtleGraphics: self.turtle_window = turtle_window self.width = width self.height = height + self.textsize = 48 + self._fgrgb = [255, 0, 0] + self._bgrgb = [255, 248, 222] + self._shade = 0 + self._color = 0 + self._gray = 100 + self.cr_svg = None # Surface used for saving to SVG # Build a cairo.Context from a cairo.XlibSurface self.canvas = cairo.Context(self.turtle_window.turtle_canvas) cr = gtk.gdk.CairoContext(self.canvas) cr.set_line_cap(1) # Set the line cap to be round - self.cr_svg = None # Surface used for saving to SVG - self.fgrgb = [255, 0, 0] - self.bgrgb = [255, 248, 222] - self.shade = 0 - self.color = 0 - self.gray = 100 - self.textsize = 48 - self.cx = 0 - self.cy = 0 + self.set_pen_size(5) def setup_svg_surface(self): @@ -159,10 +158,10 @@ class TurtleGraphics: def _clearscreen(cr): cr.move_to(0, 0) - self.bgrgb = [255, 248, 222] - cr.set_source_rgb(self.bgrgb[0] / 255., - self.bgrgb[1] / 255., - self.bgrgb[2] / 255.) + self._bgrgb = [255, 248, 222] + cr.set_source_rgb(self._bgrgb[0] / 255., + self._bgrgb[1] / 255., + self._bgrgb[2] / 255.) cr.rectangle(0, 0, self.width * 2, self.height * 2) cr.fill() @@ -202,70 +201,70 @@ class TurtleGraphics: def fillscreen(self, c, s): ''' Deprecated method: Fill screen with color/shade ''' - self.fillscreen_with_gray(c, s, self.gray) + self.fillscreen_with_gray(c, s, self._gray) def fillscreen_with_gray(self, color, shade, gray): ''' Fill screen with color/shade/gray and reset to defaults ''' - save_rgb = self.fgrgb[:] + save_rgb = self._fgrgb[:] # Special case for color blocks if color in COLORDICT: if COLORDICT[color][0] is None: - self.shade = COLORDICT[color][1] + self._shade = COLORDICT[color][1] else: - self.color = COLORDICT[color][0] + self._color = COLORDICT[color][0] else: - self.color = color + self._color = color if shade in COLORDICT: - self.shade = COLORDICT[shade][1] + self._shade = COLORDICT[shade][1] else: - self.shade = shade + self._shade = shade if gray in COLORDICT: - self.gray = COLORDICT[gray][2] + self._gray = COLORDICT[gray][2] else: - self.gray = gray + self._gray = gray - if self.gray < 0: - self.gray = 0 - if self.gray > 100: - self.gray = 100 + if self._gray < 0: + self._gray = 0 + if self._gray > 100: + self._gray = 100 - self.set_fgcolor(shade=self.shade, gray=self.gray, color=self.color) - self.bgrgb = self.fgrgb[:] + self.set_fgcolor(shade=self._shade, gray=self._gray, color=self._color) + self._bgrgb = self._fgrgb[:] def _fillscreen(cr, rgb, w, h): cr.set_source_rgb(rgb[0] / 255., rgb[1] / 255., rgb[2] / 255.) cr.rectangle(0, 0, w * 2, h * 2) cr.fill() - _fillscreen(self.canvas, self.fgrgb, self.width, self.height) + _fillscreen(self.canvas, self._fgrgb, self.width, self.height) self.inval() if self.cr_svg is not None: - _fillscreen(self.cr_svg, self.fgrgb, self.width, self.height) + _fillscreen(self.cr_svg, self._fgrgb, self.width, self.height) - self.fgrgb = save_rgb[:] + self._fgrgb = save_rgb[:] def set_fgcolor(self, shade=None, gray=None, color=None): ''' Set the foreground color ''' if shade is not None: - self.shade = shade + self._shade = shade if gray is not None: - self.gray = gray + self._gray = gray if color is not None: - self.color = color - sh = (wrap100(self.shade) - 50) / 50.0 - rgb = COLOR_TABLE[wrap100(self.color)] + self._color = color + sh = (wrap100(self._shade) - 50) / 50.0 + rgb = COLOR_TABLE[wrap100(self._color)] r = (rgb >> 8) & 0xff00 - r = calc_gray(r, self.gray) + r = calc_gray(r, self._gray) r = calc_shade(r, sh) g = rgb & 0xff00 - g = calc_gray(g, self.gray) + g = calc_gray(g, self._gray) g = calc_shade(g, sh) b = (rgb << 8) & 0xff00 - b = calc_gray(b, self.gray) + b = calc_gray(b, self._gray) b = calc_shade(b, sh) - self.fgrgb = [r >> 8, g >> 8, b >> 8] + self._fgrgb = [r >> 8, g >> 8, b >> 8] def draw_surface(self, surface, x, y, w, h): ''' Draw a surface ''' @@ -303,10 +302,10 @@ class TurtleGraphics: if self.cr_svg is not None: _draw_pixbuf(self.cr_svg, pixbuf, a, b, x, y, w, h, heading) - def draw_text(self, label, x, y, size, w, heading, scale): + def draw_text(self, label, x, y, size, width, heading, scale): ''' Draw text ''' - def _draw_text(cr, label, x, y, size, w, scale, heading, rgb): + def _draw_text(cr, label, x, y, size, width, scale, heading, rgb): cc = pangocairo.CairoContext(cr) pl = cc.create_layout() fd = pango.FontDescription('Sans') @@ -318,7 +317,7 @@ class TurtleGraphics: pl.set_text(str(label)) else: pl.set_text(str(label)) - pl.set_width(int(w) * pango.SCALE) + pl.set_width(int(width) * pango.SCALE) cc.save() cc.translate(x, y) cc.rotate(heading * DEGTOR) @@ -327,15 +326,18 @@ class TurtleGraphics: cc.show_layout(pl) cc.restore() - w *= scale - _draw_text(self.canvas, label, x, y, size, w, scale, heading, - self.fgrgb) + width *= scale + _draw_text(self.canvas, label, x, y, size, width, scale, heading, + self._fgrgb) self.inval() if self.cr_svg is not None: # and self.pendown: - _draw_text(self.cr_svg, label, x, y, size, w, scale, heading, - self.fgrgb) + _draw_text(self.cr_svg, label, x, y, size, width, scale, heading, + self._fgrgb) - def set_rgb(self, r, g, b): + def set_source_rgb(self): + r = self._fgrgb[0] / 255. + g = self._fgrgb[1] / 255. + b = self._fgrgb[2] / 255. self.canvas.set_source_rgb(r, g, b) if self.cr_svg is not None: self.cr_svg.set_source_rgb(r, g, b) @@ -355,19 +357,19 @@ class TurtleGraphics: def get_color_index(self, r, g, b, a=0): ''' Find the closest palette entry to the rgb triplet ''' - if self.shade != 50 or self.gray != 100: + if self._shade != 50 or self._gray != 100: r <<= 8 g <<= 8 b <<= 8 - if self.shade != 50: - sh = (wrap100(self.shade) - 50) / 50. + if self._shade != 50: + sh = (wrap100(self._shade) - 50) / 50. r = calc_shade(r, sh, True) g = calc_shade(g, sh, True) b = calc_shade(b, sh, True) - if self.gray != 100: - r = calc_gray(r, self.gray, True) - g = calc_gray(g, self.gray, True) - b = calc_gray(b, self.gray, True) + if self._gray != 100: + r = calc_gray(r, self._gray, True) + g = calc_gray(g, self._gray, True) + b = calc_gray(b, self._gray, True) r >>= 8 g >>= 8 b >>= 8 diff --git a/TurtleArt/taturtle.py b/TurtleArt/taturtle.py index 9b4c243..cbf86c8 100644 --- a/TurtleArt/taturtle.py +++ b/TurtleArt/taturtle.py @@ -518,10 +518,7 @@ class Turtle: def _draw_line(self, old, new, pendown): if self.pen_state and pendown: - self.turtles.turtle_window.canvas.set_rgb( - self.turtles.turtle_window.canvas.fgrgb[0] / 255., - self.turtles.turtle_window.canvas.fgrgb[1] / 255., - self.turtles.turtle_window.canvas.fgrgb[2] / 255.) + 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], @@ -534,11 +531,6 @@ class Turtle: def forward(self, distance, share=True): scaled_distance = distance * self.turtles.turtle_window.coord_scale - self.turtles.turtle_window.canvas.set_rgb( - self.turtles.turtle_window.canvas.fgrgb[0] / 255., - self.turtles.turtle_window.canvas.fgrgb[1] / 255., - self.turtles.turtle_window.canvas.fgrgb[2] / 255.) - old = self.get_xy() try: xcor = old[0] + scaled_distance * sin(self.heading * DEGTOR) @@ -578,10 +570,7 @@ class Turtle: def arc(self, a, r, share=True): ''' Draw an arc ''' if self.pen_state: - self.turtles.turtle_window.canvas.set_rgb( - self.turtles.turtle_window.canvas.fgrgb[0] / 255., - self.turtles.turtle_window.canvas.fgrgb[1] / 255., - self.turtles.turtle_window.canvas.fgrgb[2] / 255.) + self.turtles.turtle_window.canvas.set_source_rgb() try: if a < 0: pos = self.larc(-a, r) |