diff options
Diffstat (limited to 'sugar/chat/sketchpad')
-rw-r--r-- | sugar/chat/sketchpad/Sketch.py | 66 | ||||
-rw-r--r-- | sugar/chat/sketchpad/SketchPad.py | 170 | ||||
-rw-r--r-- | sugar/chat/sketchpad/Toolbox.py | 94 |
3 files changed, 165 insertions, 165 deletions
diff --git a/sugar/chat/sketchpad/Sketch.py b/sugar/chat/sketchpad/Sketch.py index 0ddfb3c..ac0a865 100644 --- a/sugar/chat/sketchpad/Sketch.py +++ b/sugar/chat/sketchpad/Sketch.py @@ -18,37 +18,37 @@ from SVGdraw import path class Sketch: - def __init__(self, rgb): - self._points = [] - self._rgb = (float(rgb[0]), float(rgb[1]), float(rgb[2])) - - def add_point(self, x, y): - self._points.append((x, y)) + def __init__(self, rgb): + self._points = [] + self._rgb = (float(rgb[0]), float(rgb[1]), float(rgb[2])) + + def add_point(self, x, y): + self._points.append((x, y)) - def get_points(self): - return self._points - - 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.set_source_rgb(self._rgb[0], self._rgb[1], self._rgb[2]) - ctx.stroke() - - def draw_to_svg(self): - i = 0 - for (x, y) in self._points: - coords = str(x) + ' ' + str(y) + ' ' - if i == 0: - path_data = 'M ' + coords - elif i == 1: - path_data += 'L ' + coords - else: - path_data += coords - i += 1 - color = "#%02X%02X%02X" % (255 * self._rgb[0], 255 * self._rgb[1], 255 * self._rgb[2]) - return path(path_data, fill = 'none', stroke = color) + def get_points(self): + return self._points + + 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.set_source_rgb(self._rgb[0], self._rgb[1], self._rgb[2]) + ctx.stroke() + + def draw_to_svg(self): + i = 0 + for (x, y) in self._points: + coords = str(x) + ' ' + str(y) + ' ' + if i == 0: + path_data = 'M ' + coords + elif i == 1: + path_data += 'L ' + coords + else: + path_data += coords + i += 1 + color = "#%02X%02X%02X" % (255 * self._rgb[0], 255 * self._rgb[1], 255 * self._rgb[2]) + return path(path_data, fill = 'none', stroke = color) diff --git a/sugar/chat/sketchpad/SketchPad.py b/sugar/chat/sketchpad/SketchPad.py index 33327f0..e15e435 100644 --- a/sugar/chat/sketchpad/SketchPad.py +++ b/sugar/chat/sketchpad/SketchPad.py @@ -23,101 +23,101 @@ from SVGdraw import drawing from SVGdraw import svg class SketchPad(gtk.DrawingArea): - __gsignals__ = { - 'new-user-sketch':(gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, - ([gobject.TYPE_PYOBJECT])) - } + __gsignals__ = { + 'new-user-sketch':(gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])) + } - def __init__(self, bgcolor=(0.6, 1, 0.4)): - gtk.DrawingArea.__init__(self) + def __init__(self, bgcolor=(0.6, 1, 0.4)): + gtk.DrawingArea.__init__(self) - self._active_sketch = None - self._rgb = (0.0, 0.0, 0.0) - self._bgcolor = bgcolor - self._sketches = [] + self._active_sketch = None + self._rgb = (0.0, 0.0, 0.0) + self._bgcolor = bgcolor + self._sketches = [] - self.add_events(gtk.gdk.BUTTON_PRESS_MASK | - gtk.gdk.BUTTON_RELEASE_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 clear(self): - self._sketches = [] - self.window.invalidate_rect(None, False) + self.add_events(gtk.gdk.BUTTON_PRESS_MASK | + gtk.gdk.BUTTON_RELEASE_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 clear(self): + self._sketches = [] + self.window.invalidate_rect(None, False) - def expose(self, widget, event): - """Draw the background of the sketchpad.""" - rect = self.get_allocation() - ctx = widget.window.cairo_create() - - ctx.set_source_rgb(self._bgcolor[0], self._bgcolor[1], self._bgcolor[2]) - ctx.rectangle(0, 0, rect.width, rect.height) - ctx.fill_preserve() - - ctx.set_source_rgb(0, 0.3, 0.2) - ctx.stroke() - - for sketch in self._sketches: - sketch.draw(ctx) - - return False + def expose(self, widget, event): + """Draw the background of the sketchpad.""" + rect = self.get_allocation() + ctx = widget.window.cairo_create() + + ctx.set_source_rgb(self._bgcolor[0], self._bgcolor[1], self._bgcolor[2]) + ctx.rectangle(0, 0, rect.width, rect.height) + ctx.fill_preserve() + + ctx.set_source_rgb(0, 0.3, 0.2) + ctx.stroke() + + for sketch in self._sketches: + sketch.draw(ctx) + + return False - def set_color(self, color): - """Sets the current drawing color of the sketchpad. - color agument should be 3-item tuple of rgb values between 0 and 1.""" - self._rgb = color + def set_color(self, color): + """Sets the current drawing color of the sketchpad. + color agument should be 3-item tuple of rgb values between 0 and 1.""" + self._rgb = color - def add_sketch(self, sketch): - """Add a sketch to the the pad. Mostly for subclasses and clients.""" - self._sketches.append(sketch) - self.window.invalidate_rect(None, False) + def add_sketch(self, sketch): + """Add a sketch to the the pad. Mostly for subclasses and clients.""" + self._sketches.append(sketch) + self.window.invalidate_rect(None, False) - def add_point(self, event): - if not self._active_sketch: - return - self._active_sketch.add_point(event.x, event.y) - self.window.invalidate_rect(None, False) - - def _button_press_cb(self, widget, event): - self._active_sketch = Sketch(self._rgb) - self._sketches.append(self._active_sketch) - self.add_point(event) - - def _button_release_cb(self, widget, event): - self.add_point(event) - self.emit('new-user-sketch', self._active_sketch) - self._active_sketch = None - - def _motion_notify_cb(self, widget, event): - self.add_point(event) - - def to_svg(self): - """Return a string containing an SVG representation of this sketch.""" - d = drawing() - s = svg() - for sketch in self._sketches: - s.addElement(sketch.draw_to_svg()) - d.setSVG(s) - return d.toXml() + def add_point(self, event): + if not self._active_sketch: + return + self._active_sketch.add_point(event.x, event.y) + self.window.invalidate_rect(None, False) + + def _button_press_cb(self, widget, event): + self._active_sketch = Sketch(self._rgb) + self._sketches.append(self._active_sketch) + self.add_point(event) + + def _button_release_cb(self, widget, event): + self.add_point(event) + self.emit('new-user-sketch', self._active_sketch) + self._active_sketch = None + + def _motion_notify_cb(self, widget, event): + self.add_point(event) + + def to_svg(self): + """Return a string containing an SVG representation of this sketch.""" + d = drawing() + s = svg() + for sketch in self._sketches: + s.addElement(sketch.draw_to_svg()) + d.setSVG(s) + return d.toXml() def test_quit(w, skpad): - print skpad.to_svg() - gtk.main_quit() + print skpad.to_svg() + gtk.main_quit() if __name__ == "__main__": - window = gtk.Window() - window.set_default_size(400, 300) - window.connect("destroy", lambda w: gtk.main_quit()) + 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() - - window.connect("destroy", test_quit, sketchpad) + sketchpad = SketchPad() + window.add(sketchpad) + sketchpad.show() + + window.show() + + window.connect("destroy", test_quit, sketchpad) - gtk.main() + gtk.main() diff --git a/sugar/chat/sketchpad/Toolbox.py b/sugar/chat/sketchpad/Toolbox.py index 0ae4e29..b142f98 100644 --- a/sugar/chat/sketchpad/Toolbox.py +++ b/sugar/chat/sketchpad/Toolbox.py @@ -19,59 +19,59 @@ import gtk import gobject class ColorButton(gtk.RadioButton): - def __init__(self, group, rgb): - gtk.RadioButton.__init__(self, group) - - self._rgb = rgb - - self.set_mode(False) - self.set_relief(gtk.RELIEF_NONE) - - drawing_area = gtk.DrawingArea() - drawing_area.set_size_request(24, 24) - drawing_area.connect_after('expose_event', self.expose) - self.add(drawing_area) - drawing_area.show() + def __init__(self, group, rgb): + gtk.RadioButton.__init__(self, group) + + self._rgb = rgb + + self.set_mode(False) + self.set_relief(gtk.RELIEF_NONE) + + drawing_area = gtk.DrawingArea() + drawing_area.set_size_request(24, 24) + drawing_area.connect_after('expose_event', self.expose) + self.add(drawing_area) + drawing_area.show() - def color(self): - return self._rgb + def color(self): + return self._rgb - def expose(self, widget, event): - rect = widget.get_allocation() - ctx = widget.window.cairo_create() + def expose(self, widget, event): + rect = widget.get_allocation() + ctx = widget.window.cairo_create() - ctx.set_source_rgb(self._rgb[0], self._rgb[1] , self._rgb[2]) - ctx.rectangle(4, 4, rect.width - 8, rect.height - 8) - ctx.fill() - - return False + ctx.set_source_rgb(self._rgb[0], self._rgb[1] , self._rgb[2]) + ctx.rectangle(4, 4, rect.width - 8, rect.height - 8) + ctx.fill() + + return False class Toolbox(gtk.HBox): - __gsignals__ = { - 'color-selected': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, - ([gobject.TYPE_PYOBJECT])) - } + __gsignals__ = { + 'color-selected': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])) + } - def __init__(self): - gtk.HBox.__init__(self, False, 6) - - self._colors_group = None - - self._add_color([0, 0, 0]) - self._add_color([1, 0, 0]) - self._add_color([0, 1, 0]) - self._add_color([0, 0, 1]) - - def _add_color(self, rgb): - color = ColorButton(self._colors_group, rgb) - color.unset_flags(gtk.CAN_FOCUS) - color.connect('clicked', self.__color_clicked_cb, rgb) - self.pack_start(color, False) + def __init__(self): + gtk.HBox.__init__(self, False, 6) + + self._colors_group = None + + self._add_color([0, 0, 0]) + self._add_color([1, 0, 0]) + self._add_color([0, 1, 0]) + self._add_color([0, 0, 1]) + + def _add_color(self, rgb): + color = ColorButton(self._colors_group, rgb) + color.unset_flags(gtk.CAN_FOCUS) + color.connect('clicked', self.__color_clicked_cb, rgb) + self.pack_start(color, False) - if self._colors_group == None: - self._colors_group = color + if self._colors_group == None: + self._colors_group = color - color.show() + color.show() - def __color_clicked_cb(self, button, rgb): - self.emit("color-selected", button.color()) + def __color_clicked_cb(self, button, rgb): + self.emit("color-selected", button.color()) |