Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2012-08-01 14:05:28 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2012-08-01 14:05:28 (GMT)
commit0c8094825d9cccc657faf60c3a925ff2cf072004 (patch)
tree888845f2d6a47b8f40d60ab9b731dc1ca98015dc
parent4ec8e6fcb88b174db69befdddfcff157f4b64908 (diff)
Add slider to set the alpha, and change size brush spinbutton by a slider
Signed-off-by: Gonzalo Odiard <gonzalo@laptop.org>
-rw-r--r--Area.py25
-rw-r--r--widgets.py65
2 files changed, 70 insertions, 20 deletions
diff --git a/Area.py b/Area.py
index 68e5472..9eeb743 100644
--- a/Area.py
+++ b/Area.py
@@ -157,8 +157,9 @@ class Area(gtk.DrawingArea):
'stroke color': None,
'line shape': 'circle',
'fill': True,
- 'cairo_stroke_color': (0.0, 0.0, 0.0, 0.3),
- 'cairo_fill_color': (0.0, 0.0, 0.0, 0.3),
+ 'cairo_stroke_color': (0.0, 0.0, 0.0, 1.0),
+ 'cairo_fill_color': (0.0, 0.0, 0.0, 1.0),
+ 'alpha': 1.0,
'vertices': 6.0,
'font_description': 'Sans 12'}
@@ -1007,8 +1008,9 @@ class Area(gtk.DrawingArea):
@param color -- a gdk.Color object
"""
+ alpha = self.tool['alpha']
self.tool['cairo_fill_color'] = (color.red_float,
- color.green_float, color.blue_float, 0.3)
+ color.green_float, color.blue_float, alpha)
def set_stroke_color(self, color):
"""Set stroke color.
@@ -1017,10 +1019,25 @@ class Area(gtk.DrawingArea):
@param color -- a gdk.Color object
"""
+ alpha = self.tool['alpha']
self.tool['cairo_stroke_color'] = (color.red_float,
- color.green_float, color.blue_float, 0.3)
+ color.green_float, color.blue_float, alpha)
self.activity.textview.modify_text(gtk.STATE_NORMAL, color)
+ def set_alpha(self, alpha):
+ """
+ Set the alpha value used to draw
+ @ param alpha -- float between 0.0 and 1.0
+ """
+ self.tool['alpha'] = alpha
+ stroke_color = self.tool['cairo_stroke_color']
+ self.tool['cairo_stroke_color'] = (stroke_color[0], stroke_color[1],
+ stroke_color[2], alpha)
+
+ fill_color = self.tool['cairo_fill_color']
+ self.tool['cairo_fill_color'] = (fill_color[0], fill_color[1],
+ fill_color[2], alpha)
+
def grayscale(self, widget):
"""Apply grayscale effect.
diff --git a/widgets.py b/widgets.py
index 69890a1..a9823f2 100644
--- a/widgets.py
+++ b/widgets.py
@@ -32,6 +32,7 @@ class BrushButton(_ColorButton):
self._brush_size = 2
self._stamp_size = 20
self._brush_shape = 'circle'
+ self._alpha = 1.0
self._resized_stamp = None
self._preview = gtk.DrawingArea()
self._preview.set_size_request(style.STANDARD_ICON_SIZE,
@@ -107,6 +108,10 @@ class BrushButton(_ColorButton):
def is_stamping(self):
return self._resized_stamp != None
+ def set_alpha(self, alpha):
+ self._alpha = alpha
+ self._preview.queue_draw()
+
def expose(self, widget, event):
if self._ctx is None:
self._setup()
@@ -133,7 +138,7 @@ class BrushButton(_ColorButton):
red = float(self._color.red) / 65535.0
green = float(self._color.green) / 65535.0
blue = float(self._color.blue) / 65535.0
- self._ctx.set_source_rgb(red, green, blue)
+ self._ctx.set_source_rgba(red, green, blue, self._alpha)
if self._brush_shape == 'circle':
self._ctx.arc(center, center, self._brush_size / 2, 0.,
2 * math.pi)
@@ -238,24 +243,43 @@ class ButtonStrokeColor(gtk.ToolItem):
color_palette_hbox = self._palette._picker_hbox
content_box = gtk.VBox()
- self.size_spinbutton = gtk.SpinButton()
+
+ self._brush_table = gtk.Table(2, 2)
+ self._brush_table.set_col_spacing(0, style.DEFAULT_PADDING)
+
# This is where we set restrictions for size:
# Initial value, minimum value, maximum value, step
adj = gtk.Adjustment(self.properties['line size'], 1.0, 100.0, 1.0)
- self.size_spinbutton.set_adjustment(adj)
- self.size_spinbutton.set_numeric(True)
-
+ self.size_scale = gtk.HScale(adj)
+ self.size_scale.set_value_pos(gtk.POS_RIGHT)
+ self.size_scale.set_digits(0)
+ self.size_scale.set_size_request(style.zoom(150), -1)
label = gtk.Label(_('Size: '))
- hbox_size = gtk.HBox()
- self.vbox_brush_options = gtk.VBox()
- content_box.pack_start(hbox_size)
- content_box.pack_start(self.vbox_brush_options)
+ row = 0
+ self._brush_table.attach(label, 0, 1, row, row + 1)
+ self._brush_table.attach(self.size_scale, 1, 2, row, row + 1)
- hbox_size.pack_start(label)
- hbox_size.pack_start(self.size_spinbutton)
- self.size_spinbutton.connect('value-changed', self._on_value_changed)
+ content_box.pack_start(self._brush_table)
+
+ self.size_scale.connect('value-changed', self._on_value_changed)
+
+ # Control alpha
+ alpha = self.properties['alpha'] * 100
+ adj_alpha = gtk.Adjustment(alpha, 10.0, 100.0, 1.0)
+ self.alpha_scale = gtk.HScale(adj_alpha)
+ self.alpha_scale.set_value_pos(gtk.POS_RIGHT)
+ self.alpha_scale.set_digits(0)
+ self.alpha_scale.set_size_request(style.zoom(150), -1)
+ self.alpha_label = gtk.Label(_('Opacity: '))
+ row = row + 1
+ self._brush_table.attach(self.alpha_label, 0, 1, row, row + 1)
+ self._brush_table.attach(self.alpha_scale, 1, 2, row, row + 1)
+
+ self.alpha_scale.connect('value-changed', self._on_alpha_changed)
# User is able to choose Shapes for 'Brush' and 'Eraser'
+ self.vbox_brush_options = gtk.VBox()
+ content_box.pack_start(self.vbox_brush_options)
item1 = gtk.RadioButton(None, _('Circle'))
item1.set_active(True)
image1 = gtk.Image()
@@ -309,6 +333,8 @@ class ButtonStrokeColor(gtk.ToolItem):
ch.hide_all()
# Hide brush options:
self.vbox_brush_options.hide_all()
+ self.alpha_label.hide()
+ self.alpha_scale.hide()
# Change title:
self.set_title(_('Stamp properties'))
else:
@@ -317,6 +343,8 @@ class ButtonStrokeColor(gtk.ToolItem):
ch.show_all()
# Show brush options:
self.vbox_brush_options.show_all()
+ self.alpha_label.show()
+ self.alpha_scale.show()
# Change title:
self.set_title(_('Brush properties'))
@@ -325,13 +353,18 @@ class ButtonStrokeColor(gtk.ToolItem):
def update_stamping(self):
if self.color_button.is_stamping():
- self.size_spinbutton.set_value(self.color_button.stamp_size)
+ self.size_scale.set_value(self.color_button.stamp_size)
else:
- self.size_spinbutton.set_value(self.color_button.brush_size)
+ self.size_scale.set_value(self.color_button.brush_size)
self._update_palette()
- def _on_value_changed(self, spinbutton):
- size = spinbutton.get_value_as_int()
+ def _on_alpha_changed(self, scale):
+ alpha = scale.get_value() / 100.0
+ self._activity.area.set_alpha(alpha)
+ self.color_button.set_alpha(alpha)
+
+ def _on_value_changed(self, scale):
+ size = int(scale.get_value())
if self.color_button.is_stamping():
self.properties['stamp size'] = size
resized_stamp = self._activity.area.resize_stamp(size)