from GUI import Window, View, application, rgb, Pixmap
from GUI.Geometry import offset_rect
from GUI.StdColors import black, white
from GUI.GL import GLPixmap
from OpenGL.GL import glClearColor, glClear, glBegin, glColor3f, glVertex2i, glEnd, \
    GL_COLOR_BUFFER_BIT, GL_TRIANGLES


class PixmapTestView(View):

    def __init__(self, pixmap, **kwds):
        self.pixmap = pixmap
        View.__init__(self, **kwds)
    
    def draw(self, c, r):
        #print "Draw" ###
        c.forecolor = rgb(0.5, 0.75, 1.0)
        c.fill_rect(self.viewed_rect())
        c.forecolor = black
        pm = self.pixmap
        sr = pm.bounds
        for i in range(3):
            dr = offset_rect(sr, (10 + i * 50, 10 + i * 60))
            pm.draw(c, sr, dr)


def draw_triangle():
    #print "Draw Triangle"
    glClearColor(0.0, 0.0, 0.0, 1.0)
    glClear(GL_COLOR_BUFFER_BIT)
    #return ###
    glBegin(GL_TRIANGLES)
    glColor3f(1.0, 0.0, 0.0)
    glVertex2i(0, 1)
    glColor3f(0.0, 1.0, 0.0)
    glVertex2i(-1, -1)
    glColor3f(0.0, 0.0, 1.0)
    glVertex2i(1, -1)
    glEnd()

def draw_circle(c):
    c.forecolor = white
    c.frame_oval((10, 10, 40, 40))

def test():
    app = application()
    pixmap = GLPixmap(50, 50, double_buffer = False, alpha = False)
    pixmap.with_context(draw_triangle, flush = True)
    #pixmap.with_canvas(draw_circle)
    view = PixmapTestView(pixmap, size = (180, 200))
    win = Window(title = "GLPixmap", resizable = False)
    win.add(view)
    win.shrink_wrap()
    win.show()
    app.run()

instructions = """
You should see a multicoloured triangle inside a black square,
repeated three times over a blue background.
"""

print instructions
test()
