# This program is based on the color.c program written by Naofumi.

import os, sys
from GUI import Window, application
from GUI.GL import GLView, GLConfig
from OpenGL.GL import glClearColor, glClear, glBegin, glColor3f, glVertex2i, glEnd, \
    GL_COLOR_BUFFER_BIT, GL_TRIANGLES
from TestInput import TestKeyEvents, TestMouseEvents
from testing import say

class TriangleView(TestKeyEvents, TestMouseEvents, GLView):

    def init_context(self):
        glClearColor(0.0, 0.0, 0.0, 0.0)
        
    def render(self):
        glClear(GL_COLOR_BUFFER_BIT)
        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 make_view(db, options):
    pf = GLConfig(double_buffer = db)
    pf.alpha = "a" in options
    pf.depth_buffer = "d" in options
    pf.stencil_buffer = "s" in options
    pf.aux_buffers = "x" in options
    pf.accum_buffer = "A" in options
    view = TriangleView(pf, size = (200, 200))
    win = Window(
        title = "%s Buffered GLView" % ["Single", "Double"][db],
        size = (240, 240))
    win.place(view, left = 20, top = 20, sticky = "nsew")
    view.become_target()
    win.show()

def get_args():
    args = sys.argv[1:]
    if not 0 <= len(args) <= 2:
        badusage()
    if args:
        sd = args[0][0]
    else:
        sd = "d"
    if sd == "s":
        db = False
    elif sd == "d":
        db = True
    else:
        badusage()
    if len(args) > 1:
        options = args[1]
    else:
        options = ""
    return db, options

def badusage():
    sys.stderr.write("Usage: python %s s[ingle]|d[ouble] [adsxA]\n" % os.path.basename(sys.argv[0]))
    sys.exit(1)

instructions = """
There should be a window containing an OpenGL view, 20 pixels
from the edge of the window on all sides. There should be a
coloured triangle filling the view over a black background.

Mouse and keyboard events in the view should be reported.
The view and the triangle it contains should resize smoothly
with the window.
"""

make_view(*get_args())
say(instructions)
application().run()
