diff options
Diffstat (limited to 'src/sugar/graphics/icon.py')
-rw-r--r-- | src/sugar/graphics/icon.py | 407 |
1 files changed, 47 insertions, 360 deletions
diff --git a/src/sugar/graphics/icon.py b/src/sugar/graphics/icon.py index 3f540d7..2fd136e 100644 --- a/src/sugar/graphics/icon.py +++ b/src/sugar/graphics/icon.py @@ -27,9 +27,9 @@ import logging import gobject import gtk -import hippo import cairo +from sugar.graphics import style from sugar.graphics.xocolor import XoColor from sugar.util import LRU @@ -367,16 +367,6 @@ class Icon(gtk.Image): self._buffer.file_name = self.props.file def do_size_request(self, requisition): - """ - Parameters - ---------- - requisition : - - Returns - ------- - None - - """ self._sync_image_properties() surface = self._buffer.get_surface() if surface: @@ -389,16 +379,6 @@ class Icon(gtk.Image): requisition[0] = requisition[1] = 0 def do_expose_event(self, event): - """ - Parameters - ---------- - event : - - Returns: - -------- - None - - """ self._sync_image_properties() sensitive = (self.state != gtk.STATE_INSENSITIVE) surface = self._buffer.get_surface(sensitive, self) @@ -436,16 +416,6 @@ class Icon(gtk.Image): cr.paint_with_alpha(self._alpha) def set_xo_color(self, value): - """ - Parameters - ---------- - value : - - Returns - ------- - None - - """ if self._buffer.xo_color != value: self._buffer.xo_color = value self.queue_draw() @@ -454,78 +424,28 @@ class Icon(gtk.Image): type=object, getter=None, setter=set_xo_color) def set_fill_color(self, value): - """ - Parameters - ---------- - value : - - Returns - ------- - None - - """ if self._buffer.fill_color != value: self._buffer.fill_color = value self.queue_draw() def get_fill_color(self): - """ - Parameters - ---------- - None - - Returns - ------- - fill_color : - - """ return self._buffer.fill_color fill_color = gobject.property( type=object, getter=get_fill_color, setter=set_fill_color) def set_stroke_color(self, value): - """ - Parameters - ---------- - value : - - Returns - ------- - None - - """ if self._buffer.stroke_color != value: self._buffer.stroke_color = value self.queue_draw() def get_stroke_color(self): - """ - Parameters - ---------- - None - - Returns - ------- - stroke_color : - - """ return self._buffer.stroke_color stroke_color = gobject.property( type=object, getter=get_stroke_color, setter=set_stroke_color) def set_badge_name(self, value): - """ - Parameters - ---------- - value: - - Returns - ------- - None - - """ if self._buffer.badge_name != value: self._buffer.badge_name = value self.queue_resize() @@ -553,272 +473,144 @@ class Icon(gtk.Image): type=float, setter=set_scale) -class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): +class EventIcon(gtk.EventBox): - __gtype_name__ = 'CanvasIcon' + __gtype_name__ = 'SugarEventIcon' + __gsignals__ = { + 'activated': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []), + } def __init__(self, **kwargs): from sugar.graphics.palette import CanvasInvoker self._buffer = _IconBuffer() - self._palette_invoker = CanvasInvoker() self._alpha = 1.0 - hippo.CanvasBox.__init__(self, **kwargs) + gtk.EventBox.__init__(self) + for key, value in kwargs.iteritems(): + self.set_property(key, value) + self._palette_invoker = CanvasInvoker() self._palette_invoker.attach(self) + # HACK to supress the grey background around the icon + # won't be needed in GTK3 + self.modify_bg(gtk.STATE_NORMAL, style.COLOR_WHITE.get_gdk_color()) + self.connect('destroy', self.__destroy_cb) - def _emit_paint_needed_icon_area(self): + def do_expose_event(self, event): surface = self._buffer.get_surface() if surface: - width, height = self.get_allocation() - s_width = surface.get_width() - s_height = surface.get_height() + allocation = self.get_allocation() + + x = (allocation.width - surface.get_width()) / 2 + y = (allocation.height - surface.get_height()) / 2 - x = (width - s_width) / 2 - y = (height - s_height) / 2 + cr = self.window.cairo_create() + cr.set_source_surface(surface, x, y) + if self._alpha == 1.0: + cr.paint() + else: + cr.paint_with_alpha(self._alpha) - self.emit_paint_needed(x, y, s_width, s_height) + def do_size_request(self, req): + surface = self._buffer.get_surface() + if surface: + req.width = surface.get_width() + req.height = surface.get_height() + elif self._buffer.width: + req.width = self._buffer.width + req.height = self._buffer.height + else: + req.width = 0 + req.height = 0 def __destroy_cb(self, icon): if self._palette_invoker is not None: self._palette_invoker.detach() def set_file_name(self, value): - """ - Parameters - ---------- - value: - - Returns - ------- - None - - \"\"\" - - """ if self._buffer.file_name != value: self._buffer.file_name = value - self.emit_paint_needed(0, 0, -1, -1) + self.queue_draw() def get_file_name(self): - """ - Parameters - ---------- - None - - Returns - ------- - file name : - - """ return self._buffer.file_name file_name = gobject.property( type=object, getter=get_file_name, setter=set_file_name) def set_icon_name(self, value): - """ - Parameters - ---------- - value: - - Returns - ------- - None - - """ if self._buffer.icon_name != value: self._buffer.icon_name = value - self.emit_paint_needed(0, 0, -1, -1) + self.queue_draw() def get_icon_name(self): - """ - Parameters - ---------- - None - - Returns - ------- - icon name : - - """ return self._buffer.icon_name icon_name = gobject.property( type=object, getter=get_icon_name, setter=set_icon_name) def set_xo_color(self, value): - """ - Parameters - ---------- - value: - - Returns - ------- - None - - """ if self._buffer.xo_color != value: self._buffer.xo_color = value - self._emit_paint_needed_icon_area() + self.queue_draw() xo_color = gobject.property( type=object, getter=None, setter=set_xo_color) def set_fill_color(self, value): - """ - Parameters - ---------- - value: - - Returns - ------- - None - - """ if self._buffer.fill_color != value: self._buffer.fill_color = value - self._emit_paint_needed_icon_area() + self.queue_draw() def get_fill_color(self): - """ - Parameters - ---------- - None - - Returns - ------- - fill color : - - """ return self._buffer.fill_color fill_color = gobject.property( type=object, getter=get_fill_color, setter=set_fill_color) def set_stroke_color(self, value): - """ - Parameters - ---------- - value: - - Returns - ------- - None - - """ if self._buffer.stroke_color != value: self._buffer.stroke_color = value - self._emit_paint_needed_icon_area() + self.queue_draw() def get_stroke_color(self): - """ - Parameters - ---------- - None - - Returns - ------- - stroke color : - - """ return self._buffer.stroke_color stroke_color = gobject.property( 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) + self.queue_draw() 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): - """ - Parameters - ---------- - value: - - Returns - ------- - None - - """ if self._buffer.width != value: self._buffer.width = value self._buffer.height = value - self.emit_request_changed() + self.queue_resize() def get_size(self): - """ - Parameters - ---------- - None - - Returns - ------- - size : - - """ return self._buffer.width - size = gobject.property( + pixel_size = gobject.property( type=object, getter=get_size, setter=set_size) def set_scale(self, value): - """ - Parameters - ---------- - value: - - Returns - ------- - None - - """ if self._buffer.scale != value: self._buffer.scale = value - self.emit_request_changed() + self.queue_resize() def get_scale(self): - """ - Parameters - ---------- - None - - Returns - ------- - scale : - - """ return self._buffer.scale scale = gobject.property( @@ -827,136 +619,31 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): def set_alpha(self, alpha): if self._alpha != alpha: self._alpha = alpha - self.emit_paint_needed(0, 0, -1, -1) + self.queue_draw() alpha = gobject.property( type=float, setter=set_alpha) def set_cache(self, value): - """ - Parameters - ---------- - cache - - Returns - ------- - None - - """ self._buffer.cache = value def get_cache(self): - """ - Parameters - ---------- - None - - Returns - ------- - cache : - - """ return self._buffer.cache cache = gobject.property( type=bool, default=False, getter=get_cache, setter=set_cache) def set_badge_name(self, value): - """ - Parameters - ---------- - value : - - Returns - ------- - None - - """ if self._buffer.badge_name != value: self._buffer.badge_name = value - self.emit_paint_needed(0, 0, -1, -1) + self.queue_draw() def get_badge_name(self): - """ - Parameters - ---------- - None - - Returns - ------- - badge name : - - """ return self._buffer.badge_name badge_name = gobject.property( type=object, getter=get_badge_name, setter=set_badge_name) - def do_paint_below_children(self, cr, damaged_box): - """ - Parameters - ---------- - cr : - - damaged_box : - - Returns - ------- - None - - """ - surface = self._buffer.get_surface() - if surface: - width, height = self.get_allocation() - - x = (width - surface.get_width()) / 2 - y = (height - surface.get_height()) / 2 - - cr.set_source_surface(surface, x, y) - if self._alpha == 1.0: - cr.paint() - else: - cr.paint_with_alpha(self._alpha) - - def do_get_content_width_request(self): - """ - Parameters - ---------- - None - - Returns - ------- - width : - - """ - surface = self._buffer.get_surface() - if surface: - size = surface.get_width() - elif self._buffer.width: - size = self._buffer.width - else: - size = 0 - - return size, size - - def do_get_content_height_request(self, for_width): - surface = self._buffer.get_surface() - if surface: - size = surface.get_height() - elif self._buffer.height: - size = self._buffer.height - else: - size = 0 - - return size, size - - def do_button_press_event(self, event): - if event.button == 1: - self.emit_activated() - return True - else: - return False - def create_palette(self): return None |