Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter.bender@gmail.com>2011-07-08 00:39:27 (GMT)
committer Walter Bender <walter.bender@gmail.com>2011-07-08 00:39:27 (GMT)
commite60d65cdc4f969487529ff8ab17837897d4e674e (patch)
treef0c81cb46ff77340c730bf6838043051472b172a
parent10580fc2a73aec1f828a3d8d43489e1d31a670c1 (diff)
In class CanvasIcon, replace hippo.CanvasBox and hippo.CanvasItem with EventBox containing Icon
-rw-r--r--src/sugar/graphics/icon.py174
1 files changed, 125 insertions, 49 deletions
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