From 790f8257e9759b5a7ec4b5952ed69f2ca59d892b Mon Sep 17 00:00:00 2001 From: Pootle daemon Date: Fri, 27 May 2011 04:31:30 +0000 Subject: Merge branch 'master' of git.sugarlabs.org:paint/mainline --- diff --git a/Area.py b/Area.py index b5ab8e6..1fa9ae4 100644 --- a/Area.py +++ b/Area.py @@ -1098,14 +1098,26 @@ class Area(gtk.DrawingArea): @param self -- the Area object (GtkDrawingArea) @param widget -- the Area object (GtkDrawingArea) """ + width, height = self.window.get_size() + + self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + self.drain_events() + if self.selmove: - width, height = self.window.get_size() size = self.pixmap_sel.get_size() - pix = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, + temp_pix = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, size[0], size[1]) - pix.get_from_drawable(self.pixmap_sel, + temp_pix.get_from_drawable(self.pixmap_sel, gtk.gdk.colormap_get_system(), 0, 0, 0, 0, size[0], size[1]) - pix = pix.rotate_simple(angle) + else: + temp_pix = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, + width, height) + temp_pix.get_from_drawable(self.pixmap, + gtk.gdk.colormap_get_system(), 0, 0, 0, 0, width, height) + + temp_pix = temp_pix.rotate_simple(angle) + + if self.selmove: try: self.d.pixbuf_resize = \ self.d.pixbuf_resize.rotate_simple(angle) @@ -1117,23 +1129,39 @@ class Area(gtk.DrawingArea): except: pass - self.pixmap_sel = gtk.gdk.Pixmap(widget. window, + self.pixmap_sel = gtk.gdk.Pixmap(widget.window, size[1], size[0], -1) - self.pixmap_sel.draw_pixbuf(self.gc, pix, 0, 0, 0, 0, + self.pixmap_sel.draw_pixbuf(self.gc, temp_pix, 0, 0, 0, 0, width=-1, height=-1, dither=gtk.gdk.RGB_DITHER_NORMAL, x_dither=0, y_dither=0) + self.pixmap_temp.draw_drawable(self.gc, self.pixmap, 0, 0, 0, 0, width, height) - self.pixmap_temp.draw_drawable(self.gc, self.pixmap_sel, 0, 0, - self.orig_x, self.orig_y, size[1], size[0]) + self.pixmap_temp.draw_drawable(self.gc, self.pixmap_sel, + 0, 0, self.orig_x, self.orig_y, size[1], size[0]) self.pixmap_temp.draw_rectangle(self.gc_selection, False, self.orig_x, self.orig_y, size[1], size[0]) self.pixmap_temp.draw_rectangle(self.gc_selection1, False, self.orig_x - 1, self.orig_y - 1, size[1] + 2, size[0] + 2) - self.queue_draw() else: - logging.debug('Please select some area first') + win = self.window + self.set_size_request(height, width) + self.pixmap = gtk.gdk.Pixmap(win, height, width, -1) + self.pixmap.draw_pixbuf(self.gc, temp_pix, 0, 0, 0, 0, + height, width, dither=gtk.gdk.RGB_DITHER_NORMAL, + x_dither=0, y_dither=0) + self.pixmap_temp = gtk.gdk.Pixmap(win, height, width, -1) + self.pixmap_temp.draw_pixbuf(self.gc, temp_pix, 0, 0, 0, 0, + height, width, dither=gtk.gdk.RGB_DITHER_NORMAL, + x_dither=0, y_dither=0) + + del temp_pix + + self.queue_draw() + if not self.selmove: + self.enableUndo(widget) + self.set_tool_cursor() def can_undo(self): """ diff --git a/toolbox.py b/toolbox.py index 5783bd5..75ad7a2 100644 --- a/toolbox.py +++ b/toolbox.py @@ -276,7 +276,11 @@ class ToolsToolbarBuilder(): is_selected = self._activity.area.is_selected() self._tool_stamp.set_sensitive(is_selected) + self._activity.area.connect('undo', self._on_signal_undo_cb) + self._activity.area.connect('redo', self._on_signal_redo_cb) self._activity.area.connect('select', self._on_signal_select_cb) + self._activity.area.connect('action-saved', + self._on_signal_action_saved_cb) self._tool_marquee_rectangular = \ DrawToolButton('tool-marquee-rectangular', @@ -327,7 +331,19 @@ class ToolsToolbarBuilder(): self._activity.area.set_stroke_color(new_color) self.properties['stroke color'] = new_color + def _on_signal_undo_cb(self, widget, data=None): + self._verify_sensitive_buttons() + + def _on_signal_redo_cb(self, widget, data=None): + self._verify_sensitive_buttons() + def _on_signal_select_cb(self, widget, data=None): + self._verify_sensitive_buttons() + + def _on_signal_action_saved_cb(self, widget, data=None): + self._verify_sensitive_buttons() + + def _verify_sensitive_buttons(self): is_selected = self._activity.area.is_selected() self._tool_stamp.set_sensitive(is_selected) @@ -672,12 +688,10 @@ class ImageToolbar(gtk.Toolbar): self._object_rotate_left = ToolButton('object-rotate-left') self.insert(self._object_rotate_left, -1) self._object_rotate_left.set_tooltip(_('Rotate Left')) - self._object_rotate_left.set_sensitive(is_selected) self._object_rotate_right = ToolButton('object-rotate-right') self.insert(self._object_rotate_right, -1) self._object_rotate_right.set_tooltip(_('Rotate Right')) - self._object_rotate_right.set_sensitive(is_selected) self._mirror_horizontal = ToolButton('mirror-horizontal') self.insert(self._mirror_horizontal, -1) @@ -693,22 +707,22 @@ class ImageToolbar(gtk.Toolbar): self.insert(self._object_height, -1) self._object_height.set_tooltip(_('Height')) - height_spinButton = self._create_spinButton(self._object_height, + self.height_spinButton = self._create_spinButton(self._object_height, 'object-height', activity) item = gtk.ToolItem() - item.add(height_spinButton) + item.add(self.height_spinButton) self.insert(item, -1) self._object_width = ToolButton('object-width') self.insert(self._object_width, -1) self._object_width.set_tooltip(_('Width')) - width_spinButton = self._create_spinButton(self._object_width, + self.width_spinButton = self._create_spinButton(self._object_width, 'object-width', activity) item = gtk.ToolItem() - item.add(width_spinButton) + item.add(self.width_spinButton) self.insert(item, -1) separator = gtk.SeparatorToolItem() @@ -735,7 +749,11 @@ class ImageToolbar(gtk.Toolbar): self._mirror_vertical.connect('clicked', self.mirror_vertical) self._mirror_horizontal.connect('clicked', self.mirror_horizontal) + self._activity.area.connect('undo', self._on_signal_undo_cb) + self._activity.area.connect('redo', self._on_signal_redo_cb) self._activity.area.connect('select', self._on_signal_select_cb) + self._activity.area.connect('action-saved', + self._on_signal_action_saved_cb) self._effect_grayscale.connect('clicked', self.grayscale) self._effect_rainbow.connect('clicked', self.rainbow) @@ -743,20 +761,6 @@ class ImageToolbar(gtk.Toolbar): self.show_all() - def _selected(self, widget, spin, activity): - if not activity.area.is_selected(): - spin.set_value(100) - self.width_percent = 1. - self.height_percent = 1. - - # get active only if something is selected - spin.set_sensitive(self._activity.area.is_selected()) - - #try: - #del(activity.area.d.resize_pixbuf) - #del(activity.area.d.resized) - #except: pass - def rotate_left(self, widget, activity): activity.area.rotate_left(activity.area) @@ -805,7 +809,6 @@ class ImageToolbar(gtk.Toolbar): spin.set_sensitive(self._activity.area.is_selected()) spin.connect('value-changed', self.resize, tool, activity) - activity.area.connect('select', self._selected, spin, activity) return spin @@ -848,13 +851,28 @@ class ImageToolbar(gtk.Toolbar): chooser.destroy() del chooser + def _on_signal_undo_cb(self, widget, data=None): + self._verify_sensitive_buttons() + + def _on_signal_redo_cb(self, widget, data=None): + self._verify_sensitive_buttons() + def _on_signal_select_cb(self, widget, data=None): self._verify_sensitive_buttons() + def _on_signal_action_saved_cb(self, widget, data=None): + self._verify_sensitive_buttons() + def _verify_sensitive_buttons(self): is_selected = self._activity.area.is_selected() - self._object_rotate_right.set_sensitive(is_selected) - self._object_rotate_left.set_sensitive(is_selected) + self.width_spinButton.set_sensitive(is_selected) + self.height_spinButton.set_sensitive(is_selected) + + if not is_selected: + self.width_spinButton.set_value(100) + self.height_spinButton.set_value(100) + self.width_percent = 1. + self.height_percent = 1. ##Make the colors be in grayscale def grayscale(self, widget): -- cgit v0.9.1