Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPootle daemon <pootle@pootle.sugarlabs.org>2011-05-27 04:31:30 (GMT)
committer Pootle daemon <pootle@pootle.sugarlabs.org>2011-05-27 04:31:30 (GMT)
commit790f8257e9759b5a7ec4b5952ed69f2ca59d892b (patch)
tree7c2eed9059e3b6f6bb48ad1a8cbc8be2862b93d8
parentd0ec8d6d3a092da8890e5f97f9655cd015b5b577 (diff)
parent81c916c8c4f8e607b59d5807f8ca8da1ad33cb7e (diff)
Merge branch 'master' of git.sugarlabs.org:paint/mainline
-rw-r--r--Area.py48
-rw-r--r--toolbox.py64
2 files changed, 79 insertions, 33 deletions
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):