#
#		User-defined views used by test programs
#

from GUI import View, Color, Font
from GUI.StdFonts import system_font, application_font
from GUI.StdColors import black, red, green, blue, yellow, white
from testing import say

fancy_font = Font("Times", 48, ['italic'])
#fancy_font = Font("Courier New", 48)
#fancy_font = Font("Courier", 48)

class TestDrawing(View):

    def draw(self, c, r):
        c.backcolor = yellow
        c.erase_rect((0, 0, self.width, self.height))
        self.draw_triangle(c, 10, 40, red)
        c.gsave()
        c.rectclip((100, 0, 120, 50))
        self.draw_triangle(c, 100, 40, green)
        c.grestore()
        self.draw_triangle(c, 50, 100, blue)
        f1 = system_font
        f2 = application_font
        f3 = fancy_font
        self.draw_text(c, 150, 100, f1, "System Font")
        self.draw_text(c, 150, 120, f2, "Application Font")
        self.draw_text(c, 5, 180, f3, "Times Italic 48")

    def draw_text(self, c, x, y, f, s):
        a = f.ascent
        d = f.descent
        #say("Font size", f.size, "ascent", a, "descent", d)
        w = f.width(s)
        c.fill_rect((x, y - a - 1, x + w, y - a))
        c.fill_rect((x, y, x + w, y + 1))
        c.fill_rect((x, y + d, x + w, y + d + 1))
        c.font = f
        c.moveto(x, y)
        c.show_text(s)
    
    def triangle_path(self, c, x, y):
        c.newpath()
        c.moveto(x, y)
        c.rlineto(40, 0)
        c.rlineto(-20, -30)
        c.closepath()

    def draw_triangle(self, c, x, y, hue):
        self.triangle_path(c, x, y)
        c.forecolor = hue
        c.fill()
        self.triangle_path(c, x, y)
        c.pensize = 3
        c.forecolor = black
        c.stroke()

    def fill_rectangle(self, c, rect, hue):
        (l, t, r, b) = rect
        c.newpath()
        c.moveto(l, t)
        c.lineto(l, b)
        c.lineto(r, b)
        c.lineto(r, t)
        c.closepath()
        c.forecolor = hue
        c.fill()


