diff options
author | Daniel Drake <dsd@laptop.org> | 2011-12-10 14:12:48 (GMT) |
---|---|---|
committer | Daniel Drake <dsd@laptop.org> | 2011-12-10 14:12:48 (GMT) |
commit | c502800979fa04757bd9118aec3f2cef61878034 (patch) | |
tree | 0b840810cf073905d7eb568cf275d18034c365eb | |
parent | 59aa01263c49e99edbcacf44a7494e5a021d2c62 (diff) |
GTK3 CanvasIcon port
-rw-r--r-- | src/sugar3/graphics/icon.py | 403 | ||||
-rw-r--r-- | src/sugar3/graphics/palettewindow.py | 21 |
2 files changed, 418 insertions, 6 deletions
diff --git a/src/sugar3/graphics/icon.py b/src/sugar3/graphics/icon.py index e126a28..d6b240c 100644 --- a/src/sugar3/graphics/icon.py +++ b/src/sugar3/graphics/icon.py @@ -28,6 +28,7 @@ import logging from gi.repository import GObject, Gtk, Gdk, GdkPixbuf import cairo +from sugar3.graphics import style from sugar3.graphics.xocolor import XoColor from sugar3.util import LRU @@ -544,6 +545,408 @@ class Icon(Gtk.Image): type=float, setter=set_scale) +class CanvasIcon(Gtk.EventBox): + + __gtype_name__ = 'CanvasIcon' + __gsignals__ = { + 'activated': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, []), + } + + def __init__(self, **kwargs): + from sugar3.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) + + self._palette_invoker.attach(self) + + self.modify_bg(Gtk.StateType.NORMAL, style.COLOR_WHITE.get_gdk_color()) + self.connect('destroy', self.__destroy_cb) + + def do_draw(self, cr): + 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 + + cr.set_source_surface(surface, x, y) + if self._alpha == 1.0: + cr.paint() + else: + cr.paint_with_alpha(self._alpha) + + 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() + + 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() + + 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() + + 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() + + 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_background_color(self, value): + """ + Parameters + ---------- + value: + + Returns + ------- + None + + """ + if self._buffer.background_color != value: + self._buffer.background_color = value + 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.queue_resize() + + def get_size(self): + """ + Parameters + ---------- + None + + Returns + ------- + size : + + """ + return self._buffer.width + + 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() + + def get_scale(self): + """ + Parameters + ---------- + None + + Returns + ------- + scale : + + """ + return self._buffer.scale + + scale = GObject.property( + type=float, getter=get_scale, setter=set_scale) + + def set_alpha(self, alpha): + if self._alpha != alpha: + self._alpha = alpha + 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.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_get_preferred_width(self): + surface = self._buffer.get_surface() + if surface: + width = surface.get_width() + elif self._buffer.width: + width = self._buffer.width + else: + width = 0 + return width, width + + def do_get_preferred_height(self): + surface = self._buffer.get_surface() + if surface: + height = surface.get_height() + elif self._buffer.height: + height = self._buffer.height + else: + height = 0 + return height, height + + 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 + + def get_palette(self): + return self._palette_invoker.palette + + def set_palette(self, palette): + self._palette_invoker.palette = palette + + palette = GObject.property( + type=object, setter=set_palette, getter=get_palette) + + def get_palette_invoker(self): + return self._palette_invoker + + def set_palette_invoker(self, palette_invoker): + self._palette_invoker.detach() + self._palette_invoker = palette_invoker + + palette_invoker = GObject.property( + type=object, setter=set_palette_invoker, getter=get_palette_invoker) + + def set_tooltip(self, text): + from sugar3.graphics.palette import Palette + + self.set_palette(Palette(text)) + + class CellRendererIcon(Gtk.CellRenderer): __gtype_name__ = 'SugarCellRendererIcon' diff --git a/src/sugar3/graphics/palettewindow.py b/src/sugar3/graphics/palettewindow.py index 51666d3..bb8ef70 100644 --- a/src/sugar3/graphics/palettewindow.py +++ b/src/sugar3/graphics/palettewindow.py @@ -968,7 +968,8 @@ class CanvasInvoker(Invoker): Invoker.__init__(self) self._position_hint = self.AT_CURSOR - self._motion_hid = None + self._enter_hid = None + self._leave_hid = None self._release_hid = None self._item = None @@ -979,14 +980,17 @@ class CanvasInvoker(Invoker): Invoker.attach(self, parent) self._item = parent - self._motion_hid = self._item.connect('motion-notify-event', - self.__motion_notify_event_cb) + self._enter_hid = self._item.connect('enter-notify-event', + self.__enter_notify_event_cb) + self._leave_hid = self._item.connect('leave-notify-event', + self.__leave_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_hid) + self._item.disconnect(self._enter_hid) + self._item.disconnect(self._leave_hid) self._item.disconnect(self._release_hid) def get_default_position(self): @@ -1001,7 +1005,12 @@ class CanvasInvoker(Invoker): else: return () - def __motion_notify_event_cb(self, button, event): + def __enter_notify_event_cb(self, button, event): + self.notify_mouse_enter() + return False + + def __leave_notify_event_cb(self, button, event): + self.notify_mouse_leave() return False def __button_release_event_cb(self, button, event): @@ -1012,7 +1021,7 @@ class CanvasInvoker(Invoker): return False def get_toplevel(self): - return None + return self._item.get_toplevel() class ToolInvoker(WidgetInvoker): |