diff options
author | Marco Pesenti Gritti <mpg@redhat.com> | 2006-05-19 16:45:08 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <mpg@redhat.com> | 2006-05-19 16:45:08 (GMT) |
commit | 6fd95df6b5cfe95486fed030ccd8524cf24e7e45 (patch) | |
tree | c8b404b09fb2fbeeb6dda9f24d052d165e12f875 /sugar/chat/sketchpad | |
parent | 96a90ca32cf45da9b50f9ebc020471734d937bc5 (diff) |
First go at the sketch pad thing
Diffstat (limited to 'sugar/chat/sketchpad')
-rw-r--r-- | sugar/chat/sketchpad/Sketch.py | 16 | ||||
-rw-r--r-- | sugar/chat/sketchpad/SketchPad.py | 57 |
2 files changed, 73 insertions, 0 deletions
diff --git a/sugar/chat/sketchpad/Sketch.py b/sugar/chat/sketchpad/Sketch.py new file mode 100644 index 0000000..ea1b4bb --- /dev/null +++ b/sugar/chat/sketchpad/Sketch.py @@ -0,0 +1,16 @@ +class Sketch: + def __init__(self): + self._points = [] + + def add_point(self, x, y): + self._points.append([x, y]) + + def draw(self, ctx): + start = True + for [x, y] in self._points: + if start: + ctx.move_to(x, y) + start = False + else: + ctx.line_to(x, y) + ctx.stroke() diff --git a/sugar/chat/sketchpad/SketchPad.py b/sugar/chat/sketchpad/SketchPad.py new file mode 100644 index 0000000..0bcfebf --- /dev/null +++ b/sugar/chat/sketchpad/SketchPad.py @@ -0,0 +1,57 @@ +import pygtk +pygtk.require('2.0') +import gtk +import cairo + +from Sketch import Sketch + +class SketchPad(gtk.DrawingArea): + def __init__(self): + gtk.DrawingArea.__init__(self) + + self._active_sketch = None + self._sketches = [] + + self.add_events(gtk.gdk.BUTTON_PRESS_MASK | + gtk.gdk.BUTTON1_MOTION_MASK) + self.connect("button-press-event", self.__button_press_cb) + self.connect("button-release-event", self.__button_release_cb) + self.connect("motion-notify-event", self.__motion_notify_cb) + self.connect('expose_event', self.expose) + + def expose(self, widget, event): + rect = self.get_allocation() + ctx = widget.window.cairo_create() + + for sketch in self._sketches: + sketch.draw(ctx) + + return False + + def add_sketch(self, sketch): + self._sketches.append(sketch) + + def __button_press_cb(self, widget, event): + self._active_sketch = Sketch() + self.add_sketch(self._active_sketch) + + def __button_release_cb(self, widget, event): + self._active_sketch = None + + def __motion_notify_cb(self, widget, event): + if self._active_sketch: + self._active_sketch.add_point(event.x, event.y) + self.window.invalidate_rect(None, False) + +if __name__ == "__main__": + window = gtk.Window() + window.set_default_size(400, 300) + window.connect("destroy", lambda w: gtk.main_quit()) + + sketchpad = SketchPad() + window.add(sketchpad) + sketchpad.show() + + window.show() + + gtk.main() |