From e60d65cdc4f969487529ff8ab17837897d4e674e Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Fri, 08 Jul 2011 00:39:27 +0000 Subject: In class CanvasIcon, replace hippo.CanvasBox and hippo.CanvasItem with EventBox containing Icon --- diff --git a/src/sugar/graphics/icon.py b/src/sugar/graphics/icon.py index 83a80d9..60b617e 100644 --- a/src/sugar/graphics/icon.py +++ b/src/sugar/graphics/icon.py @@ -27,7 +27,6 @@ import logging import gobject import gtk -import hippo import cairo from sugar.graphics.xocolor import XoColor @@ -101,6 +100,8 @@ class _IconBuffer(object): self.cache = False self.scale = 1.0 + # hippo.cairo_surface_from_gdk_pixbuf(pixbuf) -> pixbuf.cairo_create() + def _get_cache_key(self, sensitive): if self.background_color is None: color = None @@ -182,7 +183,7 @@ class _IconBuffer(object): if not sensitive: pixbuf = self._get_insensitive_pixbuf(pixbuf, widget) - surface = hippo.cairo_surface_from_gdk_pixbuf(pixbuf) + surface = pixbuf.cairo_create() context.set_source_surface(surface, 0, 0) context.paint() @@ -296,13 +297,13 @@ class _IconBuffer(object): pixbuf = handle.get_pixbuf() pixbuf = self._get_insensitive_pixbuf(pixbuf, widget) - pixbuf_surface = hippo.cairo_surface_from_gdk_pixbuf(pixbuf) + pixbuf_surface = pixbuf.cairo_create() context.set_source_surface(pixbuf_surface, 0, 0) context.paint() else: if not sensitive: pixbuf = self._get_insensitive_pixbuf(pixbuf, widget) - pixbuf_surface = hippo.cairo_surface_from_gdk_pixbuf(pixbuf) + pixbuf_surface = pixbuf.cairo_create() context.set_source_surface(pixbuf_surface, 0, 0) context.paint() @@ -386,7 +387,7 @@ class Icon(gtk.Image): else: requisition[0] = requisition[1] = 0 - def do_expose_event(self, event): + def do_expose_event(self, event=None): # Sometimes called from CanvasIcon """ Parameters ---------- @@ -415,9 +416,10 @@ class Icon(gtk.Image): y = math.floor(allocation.y + ypad + (allocation.height - requisition[1]) * yalign) - cr = self.window.cairo_create() - cr.set_source_surface(surface, x, y) - cr.paint() + if self.window is not None: + cr = self.window.cairo_create() + cr.set_source_surface(surface, x, y) + cr.paint() def set_xo_color(self, value): """ @@ -521,26 +523,54 @@ class Icon(gtk.Image): type=str, getter=get_badge_name, setter=set_badge_name) -class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): +# class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): +class CanvasIcon(gtk.EventBox): __gtype_name__ = 'CanvasIcon' def __init__(self, **kwargs): from sugar.graphics.palette import CanvasInvoker + gtk.EventBox.__init__(self) + self._buffer = _IconBuffer() self._palette_invoker = CanvasInvoker() - hippo.CanvasBox.__init__(self, **kwargs) + # Add an Icon to the EventBox + if 'file_name' in kwargs: + if 'size' in kwargs: + logging.debug('name %s size %d', kwargs['file_name'], + kwargs['size']) + self._icon = Icon(file=kwargs['file_name'], + pixel_size=kwargs['size']) + else: + self._icon = Icon(file=kwargs['file_name']) + elif 'icon_name' in kwargs: + if 'size' in kwargs: + logging.debug('name %s size %d', kwargs['icon_name'], + kwargs['size']) + self._icon = Icon(icon_name=kwargs['icon_name'], + pixel_size=kwargs['size']) + else: + self._icon = Icon(icon_name=kwargs['icon_name']) + else: + self._icon = Icon() + + self._icon.show() + self.add(self._icon) + self.show_all() self._palette_invoker.attach(self) self.connect('destroy', self.__destroy_cb) + # _buffer belongs to _icon + def _emit_paint_needed_icon_area(self): - surface = self._buffer.get_surface() + surface = self._icon._buffer.get_surface() if surface: - width, height = self.get_allocation() + rect = self.get_allocation() # hippo only has w, h + width, height = rect.width, rect.height s_width = surface.get_width() s_height = surface.get_height() @@ -549,6 +579,21 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): self.emit_paint_needed(x, y, s_width, s_height) + def do_expose_event(self, event): + self._icon.do_expose_event(event) + + def emit_paint_needed(self, x, y, s_width, s_height): + # This was a hippo canvas method + # Pass along repaint request to Icon + # Should be an event + self._icon.do_expose_event(None) + + def emit_request_changed(self): + # This was a hippo canvas method + # Pass along repaint request to Icon + # Should be an event + self._icon.do_expose_event(None) + def __destroy_cb(self, icon): if self._palette_invoker is not None: self._palette_invoker.detach() @@ -566,8 +611,8 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): \"\"\" """ - if self._buffer.file_name != value: - self._buffer.file_name = value + if self._icon._buffer.file_name != value: + self._icon._buffer.file_name = value self.emit_paint_needed(0, 0, -1, -1) def get_file_name(self): @@ -581,7 +626,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): file name : """ - return self._buffer.file_name + return self._icon._buffer.file_name file_name = gobject.property( type=object, getter=get_file_name, setter=set_file_name) @@ -597,8 +642,8 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): None """ - if self._buffer.icon_name != value: - self._buffer.icon_name = value + if self._icon._buffer.icon_name != value: + self._icon._buffer.icon_name = value self.emit_paint_needed(0, 0, -1, -1) def get_icon_name(self): @@ -612,7 +657,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): icon name : """ - return self._buffer.icon_name + return self._icon._buffer.icon_name icon_name = gobject.property( type=object, getter=get_icon_name, setter=set_icon_name) @@ -628,8 +673,8 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): None """ - if self._buffer.xo_color != value: - self._buffer.xo_color = value + if self._icon._buffer.xo_color != value: + self._icon._buffer.xo_color = value self._emit_paint_needed_icon_area() xo_color = gobject.property( @@ -646,8 +691,8 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): None """ - if self._buffer.fill_color != value: - self._buffer.fill_color = value + if self._icon._buffer.fill_color != value: + self._icon._buffer.fill_color = value self._emit_paint_needed_icon_area() def get_fill_color(self): @@ -661,7 +706,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): fill color : """ - return self._buffer.fill_color + return self._icon._buffer.fill_color fill_color = gobject.property( type=object, getter=get_fill_color, setter=set_fill_color) @@ -677,8 +722,8 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): None """ - if self._buffer.stroke_color != value: - self._buffer.stroke_color = value + if self._icon._buffer.stroke_color != value: + self._icon._buffer.stroke_color = value self._emit_paint_needed_icon_area() def get_stroke_color(self): @@ -692,7 +737,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): stroke color : """ - return self._buffer.stroke_color + return self._icon._buffer.stroke_color stroke_color = gobject.property( type=object, getter=get_stroke_color, setter=set_stroke_color) @@ -708,8 +753,8 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): None """ - if self._buffer.background_color != value: - self._buffer.background_color = value + if self._icon._buffer.background_color != value: + self._icon._buffer.background_color = value self.emit_paint_needed(0, 0, -1, -1) def get_background_color(self): @@ -723,7 +768,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): fill color : """ - return self._buffer.background_color + return self._icon._buffer.background_color background_color = gobject.property( type=object, getter=get_background_color, setter=set_background_color) @@ -739,9 +784,9 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): None """ - if self._buffer.width != value: - self._buffer.width = value - self._buffer.height = value + if self._icon._buffer.width != value: + self._icon._buffer.width = value + self._icon._buffer.height = value self.emit_request_changed() def get_size(self): @@ -755,11 +800,42 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): size : """ - return self._buffer.width + return self._icon._buffer.width size = gobject.property( type=object, getter=get_size, setter=set_size) + # TODO: handle this hippo feature + def set_box_width(self, value): + """ + Parameters + ---------- + value: + + Returns + ------- + None + + """ + logging.warning( + 'CanvasIcon: the box_width parameter is currently unsupported') + + def get_box_width(self): + """ + Parameters + ---------- + None + + Returns + ------- + box_width : + + """ + return None + + box_width = gobject.property( + type=float, getter=get_box_width, setter=set_box_width) + def set_scale(self, value): """ Parameters @@ -773,8 +849,8 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): """ logging.warning( 'CanvasIcon: the scale parameter is currently unsupported') - if self._buffer.scale != value: - self._buffer.scale = value + if self._icon._buffer.scale != value: + self._icon._buffer.scale = value self.emit_request_changed() def get_scale(self): @@ -788,7 +864,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): scale : """ - return self._buffer.scale + return self._icon._buffer.scale scale = gobject.property( type=float, getter=get_scale, setter=set_scale) @@ -804,7 +880,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): None """ - self._buffer.cache = value + self._icon._buffer.cache = value def get_cache(self): """ @@ -817,7 +893,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): cache : """ - return self._buffer.cache + return self._icon._buffer.cache cache = gobject.property( type=bool, default=False, getter=get_cache, setter=set_cache) @@ -833,8 +909,8 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): None """ - if self._buffer.badge_name != value: - self._buffer.badge_name = value + if self._icon._buffer.badge_name != value: + self._icon._buffer.badge_name = value self.emit_paint_needed(0, 0, -1, -1) def get_badge_name(self): @@ -848,7 +924,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): badge name : """ - return self._buffer.badge_name + return self._icon._buffer.badge_name badge_name = gobject.property( type=object, getter=get_badge_name, setter=set_badge_name) @@ -866,7 +942,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): None """ - surface = self._buffer.get_surface() + surface = self._icon._buffer.get_surface() if surface: width, height = self.get_allocation() @@ -887,22 +963,22 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): width : """ - surface = self._buffer.get_surface() + surface = self._icon._buffer.get_surface() if surface: size = surface.get_width() - elif self._buffer.width: - size = self._buffer.width + elif self._icon._buffer.width: + size = self._icon._buffer.width else: size = 0 return size, size def do_get_content_height_request(self, for_width): - surface = self._buffer.get_surface() + surface = self._icon._buffer.get_surface() if surface: size = surface.get_height() - elif self._buffer.height: - size = self._buffer.height + elif self._icon._buffer.height: + size = self._icon._buffer.height else: size = 0 @@ -910,7 +986,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): def do_button_press_event(self, event): if event.button == 1: - self.emit_activated() + # self.emit_activated() # TODO: emit activate event return True else: return False -- cgit v0.9.1