Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Drake <dsd@laptop.org>2011-12-10 14:12:48 (GMT)
committer Daniel Drake <dsd@laptop.org>2011-12-10 14:12:48 (GMT)
commitc502800979fa04757bd9118aec3f2cef61878034 (patch)
tree0b840810cf073905d7eb568cf275d18034c365eb
parent59aa01263c49e99edbcacf44a7494e5a021d2c62 (diff)
GTK3 CanvasIcon port
-rw-r--r--src/sugar3/graphics/icon.py403
-rw-r--r--src/sugar3/graphics/palettewindow.py21
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):