Commit ee92c575 authored by Guido van Rossum's avatar Guido van Rossum

Add the bulk of SF patch 595111 by Attila Babo.

This adds new methods heading(), setheading(), position(),
window_width(), window_height(), setx(), and sety(), to make this more
functionality-compatible with Logo turtle graphics (Attila's last
words, not mine :-).  I had to fix the sety() code which was broken in
Attila's patch.

I'm not adopting the functionality change that Attila claimed was a
bugfix (no output without tracing), because I disagree that it's a
bug.
parent 16dd2e55
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
from math import * # Also for export from math import * # Also for export
import Tkinter import Tkinter
class Error(Exception): class Error(Exception):
pass pass
...@@ -53,7 +54,6 @@ class RawPen: ...@@ -53,7 +54,6 @@ class RawPen:
self._delete_turtle() self._delete_turtle()
self._draw_turtle() self._draw_turtle()
def tracer(self, flag): def tracer(self, flag):
self._tracing = flag self._tracing = flag
if not self._tracing: if not self._tracing:
...@@ -118,7 +118,6 @@ class RawPen: ...@@ -118,7 +118,6 @@ class RawPen:
self._color = color self._color = color
self._draw_turtle() self._draw_turtle()
def write(self, arg, move=0): def write(self, arg, move=0):
x, y = start = self._position x, y = start = self._position
x = x-1 # correction -- calibrated for Windows x = x-1 # correction -- calibrated for Windows
...@@ -201,6 +200,40 @@ class RawPen: ...@@ -201,6 +200,40 @@ class RawPen:
self._path.append(self._position) self._path.append(self._position)
self._draw_turtle() self._draw_turtle()
def heading(self):
return self._angle
def setheading(self, angle):
self._angle = angle
self._draw_turtle()
def window_width(self):
width = self._canvas.winfo_width()
if width <= 1: # the window isn't managed by a geometry manager
width = self._canvas['width']
return width
def window_height(self):
height = self._canvas.winfo_height()
if height <= 1: # the window isn't managed by a geometry manager
height = self._canvas['height']
return height
def position(self):
x0, y0 = self._origin
x1, y1 = self._position
return [x1-x0, -y1+y0]
def setx(self, xpos):
x0, y0 = self._origin
x1, y1 = self._position
self._goto(x0+xpos, y1)
def sety(self, ypos):
x0, y0 = self._origin
x1, y1 = self._position
self._goto(x1, y0-ypos)
def goto(self, *args): def goto(self, *args):
if len(args) == 1: if len(args) == 1:
try: try:
...@@ -326,6 +359,13 @@ def write(arg, move=0): _getpen().write(arg, move) ...@@ -326,6 +359,13 @@ def write(arg, move=0): _getpen().write(arg, move)
def fill(flag): _getpen().fill(flag) def fill(flag): _getpen().fill(flag)
def circle(radius, extent=None): _getpen().circle(radius, extent) def circle(radius, extent=None): _getpen().circle(radius, extent)
def goto(*args): apply(_getpen().goto, args) def goto(*args): apply(_getpen().goto, args)
def heading(): return _getpen().heading()
def setheading(angle): _getpen().setheading(angle)
def position(): return _getpen().position()
def window_width(): return _getpen().window_width()
def window_height(): return _getpen().window_height()
def setx(xpos): _getpen().setx(xpos)
def sety(ypos): _getpen().sety(ypos)
def demo(): def demo():
reset() reset()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment