Lightningbeam/PyGUI-2.5.3/Tests/31-canvas.py

139 lines
2.6 KiB
Python

#
# PyGUI - Canvas primitives test
#
from GUI import Window, View, Menu, application
from GUI.StdMenus import basic_menus
from GUI.StdColors import black, white
from testing import say
r = 40
sa = 45
#aa = 240
ea = 270
class LineTest:
menu_item = "Line/^L"
def draw(self, c):
c.newpath()
c.moveto(10, 10)
c.lineto(190, 290)
c.stroke()
class RectTest:
menu_item = "Rect/^R"
def draw(self, c):
c.stroke_rect((20, 20, 180, 80))
c.frame_rect((20, 120, 180, 180))
c.fill_rect((20, 220, 180, 280))
class OvalTest:
menu_item = "Oval/^O"
def draw(self, c):
c.stroke_oval((20, 20, 180, 80))
c.frame_oval((20, 120, 180, 180))
c.fill_oval((20, 220, 180, 280))
class ArcTest:
menu_item = "Arc/^A"
def draw(self, c):
c.stroke_arc((50, 50), r, sa, ea)
c.frame_arc((50, 150), r, sa, ea)
#c.fill_arc((50, 250), r, sa, ea)
class WedgeTest:
menu_item = "Wedge/^W"
def draw(self, c):
c.stroke_wedge((50, 50), r, sa, ea)
#c.frame_wedge((50, 150), r, sa, ea)
c.fill_wedge((50, 250), r, sa, ea)
class BezierTest:
menu_item = "Bezier/^B"
def bez_path(self, c, x0, y0):
c.newpath()
c.moveto(x0, y0 + 40)
c.rcurveto((50, -100), (100, 100), (150, 0))
c.closepath()
def draw(self, c):
self.bez_path(c, 10, 10)
c.stroke()
self.bez_path(c, 10, 210)
c.fill()
tests = [
LineTest(),
RectTest(),
OvalTest(),
ArcTest(),
WedgeTest(),
BezierTest(),
]
test_menu = Menu("Shape", [
([t.menu_item for t in tests], 'test_cmd')
])
class CTV(View):
test = None
def draw(self, c, r):
c.forecolor = white
c.fill_rect(r)
c.forecolor = black
c.pensize = 10
if self.test:
self.test.draw(c)
def setup_menus(self, m):
m.test_cmd.enabled = True
def test_cmd(self, i):
self.test = tests[i]
self.invalidate()
def main():
view = CTV(size = (200, 300))
win = Window(title = "Canvas")
win.add(view)
win.shrink_wrap()
view.become_target()
win.show()
app = application()
app.menus = basic_menus() + [test_menu]
app.run()
instructions = """
The Line test should draw a straight diagonal line.
The other tests should each produce a stroked shape,
a framed shape and a filled shape where applicable.
Arcs should start 45 degrees clockwise from the x
axis and continue clockwise up to 270 degrees.
"""
say(instructions)
main()