diff options
author | Simon Schampijer <simon@schampijer.de> | 2012-06-28 13:39:04 (GMT) |
---|---|---|
committer | Simon Schampijer <simon@schampijer.de> | 2012-06-28 13:39:04 (GMT) |
commit | a4ff9a55ef655d9d7f0caf7267b7c820df93cafe (patch) | |
tree | 5abd7907adb3b700a33541eecf62c3447c809851 | |
parent | 371ea565fb49d10acc2dccc946874ee848e527c5 (diff) |
Revert "SugarEventIcon: Port the CanvasIcon to a hippo-free implementation"
This reverts commit a110fce99c91c8cd22af2284688a498b0b4ddc59.
-rw-r--r-- | src/sugar/graphics/icon.py | 407 | ||||
-rw-r--r-- | src/sugar/graphics/palettewindow.py | 25 |
2 files changed, 371 insertions, 61 deletions
diff --git a/src/sugar/graphics/icon.py b/src/sugar/graphics/icon.py index 2fd136e..3f540d7 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,6 +367,16 @@ 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: @@ -379,6 +389,16 @@ 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) @@ -416,6 +436,16 @@ 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() @@ -424,28 +454,78 @@ 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() @@ -473,144 +553,272 @@ class Icon(gtk.Image): type=float, setter=set_scale) -class EventIcon(gtk.EventBox): +class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): - __gtype_name__ = 'SugarEventIcon' - __gsignals__ = { - 'activated': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, []), - } + __gtype_name__ = 'CanvasIcon' def __init__(self, **kwargs): from sugar.graphics.palette import CanvasInvoker self._buffer = _IconBuffer() + self._palette_invoker = CanvasInvoker() self._alpha = 1.0 - gtk.EventBox.__init__(self) - for key, value in kwargs.iteritems(): - self.set_property(key, value) + hippo.CanvasBox.__init__(self, **kwargs) - 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 do_expose_event(self, event): + def _emit_paint_needed_icon_area(self): surface = self._buffer.get_surface() if surface: - allocation = self.get_allocation() - - x = (allocation.width - surface.get_width()) / 2 - y = (allocation.height - surface.get_height()) / 2 + width, height = self.get_allocation() + s_width = surface.get_width() + s_height = surface.get_height() - 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) + x = (width - s_width) / 2 + y = (height - s_height) / 2 - 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 + self.emit_paint_needed(x, y, s_width, s_height) 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.queue_draw() + self.emit_paint_needed(0, 0, -1, -1) 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.queue_draw() + self.emit_paint_needed(0, 0, -1, -1) 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.queue_draw() + self._emit_paint_needed_icon_area() 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.queue_draw() + self._emit_paint_needed_icon_area() 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() + self._emit_paint_needed_icon_area() 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.queue_draw() + 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): + """ + Parameters + ---------- + value: + + Returns + ------- + None + + """ if self._buffer.width != value: self._buffer.width = value self._buffer.height = value - self.queue_resize() + self.emit_request_changed() def get_size(self): + """ + Parameters + ---------- + None + + Returns + ------- + size : + + """ return self._buffer.width - pixel_size = gobject.property( + 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.queue_resize() + self.emit_request_changed() def get_scale(self): + """ + Parameters + ---------- + None + + Returns + ------- + scale : + + """ return self._buffer.scale scale = gobject.property( @@ -619,31 +827,136 @@ class EventIcon(gtk.EventBox): def set_alpha(self, alpha): if self._alpha != alpha: self._alpha = alpha - self.queue_draw() + self.emit_paint_needed(0, 0, -1, -1) 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.queue_draw() + self.emit_paint_needed(0, 0, -1, -1) 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 diff --git a/src/sugar/graphics/palettewindow.py b/src/sugar/graphics/palettewindow.py index f61faca..5281e54 100644 --- a/src/sugar/graphics/palettewindow.py +++ b/src/sugar/graphics/palettewindow.py @@ -25,6 +25,7 @@ import logging import gtk import gobject +import hippo from sugar.graphics import palettegroup from sugar.graphics import animator @@ -792,8 +793,7 @@ class CanvasInvoker(Invoker): Invoker.__init__(self) self._position_hint = self.AT_CURSOR - self._motion_enter_hid = None - self._motion_leave_hid = None + self._motion_hid = None self._release_hid = None self._item = None @@ -804,17 +804,14 @@ class CanvasInvoker(Invoker): Invoker.attach(self, parent) self._item = parent - self._motion_enter_hid = self._item.connect( - 'enter-notify-event', self.__enter_notify_event_cb) - self._motion_leave_hid = self._item.connect( - 'leave-notify-event', self.__leave_notify_event_cb) + self._motion_hid = self._item.connect('motion-notify-event', + self.__motion_notify_event_cb) self._release_hid = self._item.connect('button-release-event', self.__button_release_event_cb) def detach(self): Invoker.detach(self) - self._item.disconnect(self._motion_enter_hid) - self._item.disconnect(self._motion_leave_hid) + self._item.disconnect(self._motion_hid) self._item.disconnect(self._release_hid) def get_default_position(self): @@ -829,12 +826,12 @@ class CanvasInvoker(Invoker): else: return gtk.gdk.Rectangle() - def __enter_notify_event_cb(self, button, event): - self.notify_mouse_enter() - return False + def __motion_notify_event_cb(self, button, event): + if event.detail == hippo.MOTION_DETAIL_ENTER: + self.notify_mouse_enter() + elif event.detail == hippo.MOTION_DETAIL_LEAVE: + self.notify_mouse_leave() - def __leave_notify_event_cb(self, button, event): - self.notify_mouse_leave() return False def __button_release_event_cb(self, button, event): @@ -845,7 +842,7 @@ class CanvasInvoker(Invoker): return False def get_toplevel(self): - return self._item.get_toplevel() + return hippo.get_canvas_for_item(self._item).get_toplevel() class ToolInvoker(WidgetInvoker): |