Added an option to set the background color of CanvasIcon. Then a RGB cache can be used.

This commit is contained in:
Benjamin Berg 2009-02-10 17:58:02 +01:00
parent 474b2c3476
commit b39ed70b11

View File

@ -83,6 +83,7 @@ class _IconBuffer(object):
self.icon_size = None self.icon_size = None
self.file_name = None self.file_name = None
self.fill_color = None self.fill_color = None
self.background_color = None
self.stroke_color = None self.stroke_color = None
self.badge_name = None self.badge_name = None
self.width = None self.width = None
@ -91,9 +92,14 @@ class _IconBuffer(object):
self.scale = 1.0 self.scale = 1.0
def _get_cache_key(self, sensitive): def _get_cache_key(self, sensitive):
if self.background_color is None:
color = None
else:
color = (self.background_color.red, self.background_color.green,
self.background_color.blue)
return (self.icon_name, self.file_name, self.fill_color, return (self.icon_name, self.file_name, self.fill_color,
self.stroke_color, self.badge_name, self.width, self.height, self.stroke_color, self.badge_name, self.width, self.height,
sensitive) color, sensitive)
def _load_svg(self, file_name): def _load_svg(self, file_name):
entities = {} entities = {}
@ -260,9 +266,16 @@ class _IconBuffer(object):
padding = badge_info.icon_padding padding = badge_info.icon_padding
width, height = self._get_size(icon_width, icon_height, padding) width, height = self._get_size(icon_width, icon_height, padding)
if self.background_color is None:
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
context = cairo.Context(surface) context = cairo.Context(surface)
else:
surface = cairo.ImageSurface(cairo.FORMAT_RGB24, width, height)
context = cairo.Context(surface)
context = gtk.gdk.CairoContext(context)
context.set_source_color(self.background_color)
context.paint()
context.scale(float(width) / (icon_width + padding * 2), context.scale(float(width) / (icon_width + padding * 2),
float(height) / (icon_height + padding * 2)) float(height) / (icon_height + padding * 2))
context.save() context.save()
@ -499,6 +512,18 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem):
self.connect('destroy', self.__destroy_cb) self.connect('destroy', self.__destroy_cb)
def _emit_paint_needed_icon_area(self):
surface = self._buffer.get_surface()
if surface:
width, height = self.get_allocation()
s_width = surface.get_width()
s_height = surface.get_height()
x = (width - s_width) / 2
y = (height - s_height) / 2
self.emit_paint_needed(x, y, s_width, s_height)
def __destroy_cb(self, icon): def __destroy_cb(self, icon):
if self._palette_invoker is not None: if self._palette_invoker is not None:
self._palette_invoker.detach() self._palette_invoker.detach()
@ -580,7 +605,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem):
""" """
if self._buffer.xo_color != value: if self._buffer.xo_color != value:
self._buffer.xo_color = value self._buffer.xo_color = value
self.emit_paint_needed(0, 0, -1, -1) self._emit_paint_needed_icon_area()
xo_color = gobject.property( xo_color = gobject.property(
type=object, getter=None, setter=set_xo_color) type=object, getter=None, setter=set_xo_color)
@ -598,7 +623,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem):
""" """
if self._buffer.fill_color != value: if self._buffer.fill_color != value:
self._buffer.fill_color = value self._buffer.fill_color = value
self.emit_paint_needed(0, 0, -1, -1) self._emit_paint_needed_icon_area()
def get_fill_color(self): def get_fill_color(self):
""" """
@ -629,7 +654,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem):
""" """
if self._buffer.stroke_color != value: if self._buffer.stroke_color != value:
self._buffer.stroke_color = value self._buffer.stroke_color = value
self.emit_paint_needed(0, 0, -1, -1) self._emit_paint_needed_icon_area()
def get_stroke_color(self): def get_stroke_color(self):
""" """
@ -647,6 +672,37 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem):
stroke_color = gobject.property( stroke_color = gobject.property(
type=object, getter=get_stroke_color, setter=set_stroke_color) type=object, getter=get_stroke_color, setter=set_stroke_color)
def set_background_color(self, value):
"""
Parameters
----------
value:
Returns
-------
None
"""
if self._buffer.background_color != value:
self._buffer.background_color = value
self.emit_paint_needed(0, 0, -1, -1)
def get_background_color(self):
"""
Parameters
----------
None
Returns
-------
fill color :
"""
return self._buffer.background_color
background_color = gobject.property(
type=object, getter=get_background_color, setter=set_background_color)
def set_size(self, value): def set_size(self, value):
""" """
Parameters Parameters