139 lines
2.6 KiB
Python
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()
|