Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@sugarlabs.org>2009-06-13 18:57:21 (GMT)
committer Tomeu Vizoso <tomeu@sugarlabs.org>2009-06-13 18:57:21 (GMT)
commita070fcda7285c9fc943002c0a99ee60b38203dd8 (patch)
tree78e087c1e8a175c9222712c99e1b3a676e75e810
parent81fc651a1b9aa3d4413f50e60bb828d9ab707d77 (diff)
Implement prelighting of cell renderer icons
-rw-r--r--src/sugar/graphics/icon.py59
1 files changed, 53 insertions, 6 deletions
diff --git a/src/sugar/graphics/icon.py b/src/sugar/graphics/icon.py
index 1f2d3af..fe6cc5e 100644
--- a/src/sugar/graphics/icon.py
+++ b/src/sugar/graphics/icon.py
@@ -930,6 +930,10 @@ class CellRendererIcon(gtk.CellRendererPixbuf):
from sugar.graphics.palette import CellRendererInvoker
self._buffer = _IconBuffer()
+ self._fill_color = None
+ self._stroke_color = None
+ self._prelit_fill_color = None
+ self._prelit_stroke_color = None
self._palette_invoker = CellRendererInvoker()
gobject.GObject.__init__(self)
@@ -962,23 +966,37 @@ class CellRendererIcon(gtk.CellRendererPixbuf):
icon_name = gobject.property(type=object, setter=set_icon_name)
def set_xo_color(self, value):
- if self._buffer.xo_color != value:
- self._buffer.xo_color = value
+ self._stroke_color = value.get_stroke_color()
+ self._fill_color = value.get_fill_color()
xo_color = gobject.property(type=object, setter=set_xo_color)
def set_fill_color(self, value):
- if self._buffer.fill_color != value:
- self._buffer.fill_color = value
+ if self._fill_color != value:
+ self._fill_color = value
fill_color = gobject.property(type=object, setter=set_fill_color)
def set_stroke_color(self, value):
- if self._buffer.stroke_color != value:
- self._buffer.stroke_color = value
+ if self._stroke_color != value:
+ self._stroke_color = value
stroke_color = gobject.property(type=object, setter=set_stroke_color)
+ def set_prelit_fill_color(self, value):
+ if self._prelit_fill_color != value:
+ self._prelit_fill_color = value
+
+ prelit_fill_color = gobject.property(type=object,
+ setter=set_prelit_fill_color)
+
+ def set_prelit_stroke_color(self, value):
+ if self._prelit_stroke_color != value:
+ self._prelit_stroke_color = value
+
+ prelit_stroke_color = gobject.property(type=object,
+ setter=set_prelit_stroke_color)
+
def set_background_color(self, value):
if self._buffer.background_color != value:
self._buffer.background_color = value
@@ -992,7 +1010,36 @@ class CellRendererIcon(gtk.CellRendererPixbuf):
size = gobject.property(type=object, setter=set_size)
+ def _is_prelit(self, tree_view):
+ x, y = tree_view.get_pointer()
+ x, y = tree_view.convert_widget_to_bin_window_coords(x, y)
+ pos = tree_view.get_path_at_pos(x, y)
+ if pos is None:
+ return False
+
+ path, column, x, y = pos
+
+ for cell_renderer in column.get_cell_renderers():
+ if cell_renderer == self:
+ cell_x, cell_width = column.cell_get_position(cell_renderer)
+ if x > cell_x and x < (cell_x + cell_width):
+ return True
+ return False
+
+ return False
+
def do_render(self, window, widget, background_area, cell_area, expose_area, flags):
+ has_prelit_colors = None not in [self._prelit_fill_color,
+ self._prelit_stroke_color]
+ if flags & gtk.CELL_RENDERER_PRELIT and has_prelit_colors and \
+ self._is_prelit(widget):
+
+ self._buffer.fill_color = self._prelit_fill_color
+ self._buffer.stroke_color = self._prelit_stroke_color
+ else:
+ self._buffer.fill_color = self._fill_color
+ self._buffer.stroke_color = self._stroke_color
+
surface = self._buffer.get_surface()
if surface is None:
self.props.pixbuf = None