#! /usr/bin/env python

# Derived from the Cairo Tutorial for PyGTK Programmers,
#  cf. http://www.tortall.net/mu/wiki/PyGTKCairoTutorial

import pygtk
pygtk.require('2.0')
import gtk, gobject, cairo

# Create a GTK+ widget on which we will draw using Cairo
class Screen(gtk.DrawingArea):
    
    # Draw in response to an expose-event
    __gsignals__ = {'expose-event':'override',
                    'button-press-event':'override'}

    def __init__(self):
        gtk.DrawingArea.__init__(self)
        self.set_events(gtk.gdk.BUTTON_PRESS_MASK |
                        gtk.gdk.BUTTON_RELEASE_MASK)
        
    # Handle the expose-event by drawing
    def do_expose_event(self, event):
        # Create the cairo context
        cr = self.window.cairo_create()

        # Restrict Cairo to the exposed area; avoid extra work
       # cr.rectangle(event.area.x, event.area.y, event.area.width, event.area.height)
       # cr.clip()

        self.draw(cr, *self.window.get_size())

    # Handle the button press by adding a new point
    def do_button_press_event(self, event):
        print event.x, event.y, event.button
        print "button pressed"
        

    def draw(self, cr, width, height):
        # Fill the background with white
        cr.set_source_rgb(1,1,1)
        cr.rectangle(0, 0, width, height)
        cr.fill()

# GTK mumbo-jumbo to show the widget in a window and quit when it's closed
def run(Widget):
    window = gtk.Window()
    window.connect("delete-event", gtk.main_quit)
    widget = Widget()
    widget.show()
    window.add(widget)
    window.present()
    gtk.main()

if __name__ == "__main__":
    run(Screen)

    
