From 34a1c81aa529d406f45259a4f1e93ca63e56e013 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Fri, 17 Aug 2007 17:53:41 +0000 Subject: Add a scale property to CanvasIcon. Make Icon use gtk.Image icon-size. Patch by tannewt with some little tweaks. --- (limited to 'sugar') diff --git a/sugar/graphics/canvasbutton.py b/sugar/graphics/canvasbutton.py index 31bc833..fc869f9 100644 --- a/sugar/graphics/canvasbutton.py +++ b/sugar/graphics/canvasbutton.py @@ -25,7 +25,7 @@ class CanvasButton(hippo.CanvasButton): hippo.CanvasButton.__init__(self, text=label) if icon_name: - icon = Icon(icon_name, gtk.ICON_SIZE_BUTTON) + icon = Icon(icon_name,icon_size=gtk.ICON_SIZE_BUTTON) self.props.widget.set_image(icon) icon.show() diff --git a/sugar/graphics/canvasicon.py b/sugar/graphics/canvasicon.py index 39f1358..a77eecd 100644 --- a/sugar/graphics/canvasicon.py +++ b/sugar/graphics/canvasicon.py @@ -142,6 +142,8 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): gobject.PARAM_READWRITE), 'size' : (int, None, None, 0, 1024, 0, gobject.PARAM_READWRITE), + 'scale' : (int, None, None, 0, 1024, 0, + gobject.PARAM_READWRITE), 'cache' : (bool, None, None, False, gobject.PARAM_READWRITE), 'active' : (bool, None, None, True, @@ -156,6 +158,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): self._buffers = {} self._cur_buffer = None self._size = 0 + self._scale = 0 self._fill_color = None self._stroke_color = None self._icon_name = None @@ -210,6 +213,11 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): self._clear_buffers() self._size = value self.emit_request_changed() + elif pspec.name == 'scale': + if self._scale != value and not self._cache: + self._clear_buffers() + self._scale = value + self.emit_request_changed() elif pspec.name == 'cache': self._cache = value elif pspec.name == 'active': @@ -277,6 +285,8 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): return self._active elif pspec.name == 'badge-name': return self._badge_name + elif pspec.name == 'scale': + return self._scale def _get_icon_size(self, handle): if handle: @@ -286,9 +296,11 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): return [0, 0] def _get_size(self, handle): - if self._size == 0: - width, height = self._get_icon_size(handle) - else: + width, height = self._get_icon_size(handle) + if self._scale != 0: + width = int(width * self._scale) + height = int(height * self._scale) + elif self._size != 0: width = height = self._size return [width, height] diff --git a/sugar/graphics/icon.py b/sugar/graphics/icon.py index 731412f..c19f27e 100644 --- a/sugar/graphics/icon.py +++ b/sugar/graphics/icon.py @@ -34,17 +34,18 @@ class Icon(gtk.Image): gobject.PARAM_READWRITE) } - def __init__(self, name, size=gtk.ICON_SIZE_LARGE_TOOLBAR, **kwargs): + def __init__(self, name, **kwargs): + self._constructed = False self._fill_color = None self._stroke_color = None self._icon_name = name - self._size = size self._theme = gtk.icon_theme_get_default() + self._data = None + gobject.GObject.__init__(self, **kwargs) - # If we have a non-styled-icon - if not self._fill_color and not self._stroke_color: - self._update_normal_icon() + self._constructed = True + self._update_icon() def _get_pixbuf(self, data, width, height): loader = gtk.gdk.PixbufLoader('svg') @@ -77,9 +78,12 @@ class Icon(gtk.Image): source.set_state(gtk.STATE_INSENSITIVE) icon_set.add_source(source) - self.set_from_icon_set(icon_set, self._size) + self.set_from_icon_set(icon_set, self.props.icon_size) def _update_icon(self): + if not self._constructed: + return + if not self._fill_color and not self._stroke_color: self._update_normal_icon() return @@ -100,12 +104,12 @@ class Icon(gtk.Image): self._data = data # Redraw pixbuf - [w, h] = gtk.icon_size_lookup(self._size) + [w, h] = gtk.icon_size_lookup(self.props.icon_size) pixbuf = self._get_pixbuf(self._data, w, h) self.set_from_pixbuf(pixbuf) def _get_real_name(self, name): - info = self._theme.lookup_icon(name, self._size, 0) + info = self._theme.lookup_icon(name, self.props.icon_size, 0) if not info: raise ValueError("Icon '" + name + "' not found.") fname = info.get_filename() @@ -122,9 +126,16 @@ class Icon(gtk.Image): elif pspec.name == 'stroke-color': self._stroke_color = value self._update_icon() + elif pspec.name == 'icon-size': + gtk.Image.do_set_property(self, pspec, value) + self._update_icon() + else: + gtk.Image.do_set_property(self, pspec, value) def do_get_property(self, pspec): if pspec.name == 'fill-color': return self._fill_color elif pspec.name == 'stroke-color': return self._stroke_color + else: + return gtk.Image.do_get_property(self, pspec) diff --git a/sugar/graphics/menuitem.py b/sugar/graphics/menuitem.py index 492f5f1..21199da 100644 --- a/sugar/graphics/menuitem.py +++ b/sugar/graphics/menuitem.py @@ -22,7 +22,7 @@ class MenuItem(gtk.ImageMenuItem): def __init__(self, text_label, icon_name=None): gtk.ImageMenuItem.__init__(self, text_label) if icon_name: - icon = Icon(icon_name, gtk.ICON_SIZE_MENU) + icon = Icon(icon_name,icon_size=gtk.ICON_SIZE_MENU) self.set_image(icon) icon.show() diff --git a/sugar/graphics/toolbutton.py b/sugar/graphics/toolbutton.py index 8e982e4..b42f63e 100644 --- a/sugar/graphics/toolbutton.py +++ b/sugar/graphics/toolbutton.py @@ -28,7 +28,8 @@ class ToolButton(gtk.ToolButton): def __init__(self, icon_name=None): gtk.ToolButton.__init__(self) self._palette = None - self.set_icon(icon_name) + if icon_name: + self.set_icon(icon_name) self.connect('clicked', self._button_clicked_cb) def set_icon(self, icon_name): -- cgit v0.9.1