From 7c46785269deb390b855c32e4f4cf3aea00f3d50 Mon Sep 17 00:00:00 2001 From: Gonzalo Odiard Date: Wed, 18 Apr 2012 17:22:06 +0000 Subject: Implement pick tool - SL #3107 This patch include a little refactoring to do more understable the code. The janela variable was renamed to the more ocmmon activity name. Signed-off-by: Gonzalo Odiard --- diff --git a/Area.py b/Area.py index e86ae3f..150d359 100644 --- a/Area.py +++ b/Area.py @@ -98,12 +98,12 @@ class Area(gtk.DrawingArea): 'select': (gobject.SIGNAL_ACTION, gobject.TYPE_NONE, ([])), } - def __init__(self, janela): + def __init__(self, activity): """ Initialize the object from class Area which is derived from gtk.DrawingArea. @param self -- the Area object (GtkDrawingArea) - @param janela -- the parent window + @param activity -- the parent window """ gtk.DrawingArea.__init__(self) @@ -175,7 +175,7 @@ class Area(gtk.DrawingArea): self.desenho = [] self.textos = [] self.text_in_progress = False - self.janela = janela + self.activity = activity self.d = Desenho(self) self.last = [] self.rainbow_counter = 0 @@ -336,17 +336,17 @@ class Area(gtk.DrawingArea): elif self.text_in_progress: try: # This works for a gtk.Entry - text = self.janela.textview.get_text() + text = self.activity.textview.get_text() except AttributeError: # This works for a gtk.TextView - buf = self.janela.textview.get_buffer() + buf = self.activity.textview.get_buffer() start, end = buf.get_bounds() text = buf.get_text(start, end) if text is not None: self.d.text(widget, event) self.text_in_progress = False - self.janela.textview.hide() + self.activity.textview.hide() self.oldx, self.oldy = coords @@ -355,6 +355,9 @@ class Area(gtk.DrawingArea): x, y, state = event.window.get_pointer() + if self.tool['name'] == 'picker': + self.pick_color(x, y) + if state & gtk.gdk.BUTTON3_MASK: #Handle with the right button click event. if self.tool['name'] == 'marquee-rectangular': @@ -706,6 +709,22 @@ class Area(gtk.DrawingArea): self.queue_draw() self.window.set_cursor(None) + def pick_color(self, x, y): + gdk_image = self.pixmap.get_image(x, y, 1, 1) + pixel = gdk_image.get_pixel(0, 0) + cmap = gdk_image.get_colormap() + gdk_color = cmap.query_color(pixel) + + # set in the area + pixmap_cmap = self.pixmap.get_colormap() + stroke_color = pixmap_cmap.alloc_color(gdk_color) + self.tool['stroke color'] = stroke_color + self.set_stroke_color(self.tool['stroke color']) + + # update the stroke color button + self.activity.get_toolbar_box().brush_button.set_color(stroke_color) + self.activity.get_toolbar_box().brush_button.stop_stamping() + def mouseleave(self, widget, event): if self.tool['name'] in ['pencil', 'eraser', 'brush', 'rainbow', 'stamp']: @@ -777,7 +796,7 @@ class Area(gtk.DrawingArea): if self.text_in_progress: self.d.text(self, None) - self.janela.textview.hide() + self.activity.textview.hide() if self._undo_index > 0: self._undo_index -= 1 @@ -987,7 +1006,7 @@ class Area(gtk.DrawingArea): self.gc_line.set_line_attributes(1, gtk.gdk.LINE_ON_OFF_DASH, gtk.gdk.CAP_ROUND, gtk.gdk.JOIN_ROUND) self.gc_brush.set_foreground(color) - self.janela.textview.modify_text(gtk.STATE_NORMAL, color) + self.activity.textview.modify_text(gtk.STATE_NORMAL, color) def grayscale(self, widget): """Apply grayscale effect. @@ -1217,7 +1236,7 @@ class Area(gtk.DrawingArea): height, width, dither=gtk.gdk.RGB_DITHER_NORMAL, x_dither=0, y_dither=0) - self.janela.center_area() + self.activity.center_area() del temp_pix diff --git a/Desenho.py b/Desenho.py index 3fac229..d4572c9 100644 --- a/Desenho.py +++ b/Desenho.py @@ -595,32 +595,32 @@ class Desenho: widget.text_in_progress = True x, y = int(event.x), int(event.y) - widget.janela.move_textview(x, y) - widget.janela.textview.show() - widget.janela.textview.grab_focus() + widget.activity.move_textview(x, y) + widget.activity.textview.show() + widget.activity.textview.grab_focus() else: widget.text_in_progress = False try: # This works for a gtk.Entry - text = widget.janela.textview.get_text() + text = widget.activity.textview.get_text() except AttributeError: # This works for a gtk.TextView - buf = widget.janela.textview.get_buffer() + buf = widget.activity.textview.get_buffer() start, end = buf.get_bounds() text = buf.get_text(start, end) - layout = widget.janela.textview.create_pango_layout(text) + layout = widget.activity.textview.create_pango_layout(text) widget.pixmap.draw_layout(widget.gc_brush, widget.oldx, widget.oldy, layout) widget.pixmap_temp.draw_layout(widget.gc, widget.oldx, widget.oldy, layout) - widget.janela.textview.hide() + widget.activity.textview.hide() try: - widget.janela.textview.set_text('') + widget.activity.textview.set_text('') except AttributeError: buf.set_text('') diff --git a/toolbox.py b/toolbox.py index ee08996..899ab23 100644 --- a/toolbox.py +++ b/toolbox.py @@ -136,12 +136,13 @@ class DrawToolbarBox(ToolbarBox): # TODO: workaround # the BrushButton does not starts - brush_button = tools_builder._stroke_color.color_button - brush_button.set_brush_shape(self._activity.area.tool['line shape']) - brush_button.set_brush_size(self._activity.area.tool['line size']) - brush_button.set_stamp_size(self._activity.area.tool['stamp size']) + self.brush_button = tools_builder._stroke_color.color_button + area = self._activity.area + self.brush_button.set_brush_shape(area.tool['line shape']) + self.brush_button.set_brush_size(area.tool['line size']) + self.brush_button.set_stamp_size(area.tool['stamp size']) if self._activity.area.tool['stroke color'] is not None: - brush_button.set_color(self._activity.area.tool['stroke color']) + self.brush_button.set_color(area.tool['stroke color']) ##Make the Edit Toolbar @@ -232,6 +233,7 @@ class ToolsToolbarBuilder(): _TOOL_BRUSH_NAME = 'brush' _TOOL_ERASER_NAME = 'eraser' _TOOL_BUCKET_NAME = 'bucket' + _TOOL_PICKER_NAME = 'picker' _TOOL_STAMP_NAME = 'stamp' _TOOL_MARQUEE_RECT_NAME = 'marquee-rectangular' @@ -253,12 +255,6 @@ class ToolsToolbarBuilder(): separator.set_draw(True) toolbar.insert(separator, -1) - """ - self._tool_pencil = DrawToolButton('tool-pencil', - activity.tool_group, _('Pencil')) - toolbar.insert(self._tool_pencil, -1) - """ - self._tool_brush = DrawToolButton('tool-brush', activity.tool_group, _('Brush')) activity.tool_group = self._tool_brush @@ -272,6 +268,10 @@ class ToolsToolbarBuilder(): activity.tool_group, _('Bucket')) toolbar.insert(self._tool_bucket, -1) + self._tool_picker = DrawToolButton('tool-picker', + activity.tool_group, _('Picker')) + toolbar.insert(self._tool_picker, -1) + self._tool_stamp = DrawToolButton('tool-stamp', activity.tool_group, _('Stamp')) toolbar.insert(self._tool_stamp, -1) @@ -303,6 +303,8 @@ class ToolsToolbarBuilder(): self._TOOL_ERASER_NAME) self._tool_bucket.connect('clicked', self.set_tool, self._TOOL_BUCKET_NAME) + self._tool_picker.connect('clicked', self.set_tool, + self._TOOL_PICKER_NAME) self._tool_stamp.connect('clicked', self.set_tool, self._TOOL_STAMP_NAME) self._tool_marquee_rectangular.connect('clicked', self.set_tool, -- cgit v0.9.1