from GUI import Window, View, Pixmap, application
from GUI.Geometry import offset_rect, rect_sized
from GUI.StdColors import red, yellow, green, blue, cyan, black
from testing import say

class PixmapTestView(View):

    def draw(self, c, r):
        c.erase_rect(r)
        main_image_pos = (10, 10)
        src_rect = pixmap.bounds
        dst_rect = offset_rect(src_rect, main_image_pos)
        pixmap.draw(c, src_rect, dst_rect)
        src_rect = rect_sized((180, 160), (100, 100))
        c.frame_rect(offset_rect(src_rect, main_image_pos))
        dst_rect = rect_sized((10, 340), (150, 150))
        pixmap.draw(c, src_rect, dst_rect)
        dst_rect = rect_sized((200, 340), (100, 100))
        pixmap.draw(c, src_rect, dst_rect)
        dst_rect = rect_sized((340, 340), (50, 50))
        pixmap.draw(c, src_rect, dst_rect)


def do_test_drawing(c):
    b = pixmap.bounds
    c.forecolor = cyan
    c.fill_rect(b)
    r = (20, 20, 200, 230)
    c.forecolor = red
    c.fill_rect(r)
    r = (160, 90, 300, 180)
    c.forecolor = yellow
    c.fill_rect(r)
    r = (250, 200, 350, 275)
    c.forecolor = blue
    c.fill_oval(r)
    
instructions = """
There should be a 400x300 image containing a filled red rectangle,
yellow rectangle and blue oval on a cyan background, with a black
frame around part of the image. The framed part should appear below
in three different sizes, 150x150, 100x100 and 50x50.
"""

say(instructions)

app = application()

pixmap = Pixmap(400, 300)
pixmap.with_canvas(do_test_drawing)

win = Window(title = "Pixmap", size = (500, 500))
view = PixmapTestView(size = win.size)
win.add(view)
win.show()

app.run()
