diff --git a/src/sugar3/graphics/icon.py b/src/sugar3/graphics/icon.py index a708f8bb..fc798ee7 100644 --- a/src/sugar3/graphics/icon.py +++ b/src/sugar3/graphics/icon.py @@ -837,6 +837,7 @@ class CellRendererIcon(Gtk.CellRenderer): self._prelit_stroke_color = None self._active_state = False self._palette_invoker = CellRendererInvoker() + self._cached_offsets = None Gtk.CellRenderer.__init__(self) @@ -924,6 +925,8 @@ class CellRendererIcon(Gtk.CellRenderer): self._buffer.width = value self._buffer.height = value + self._cached_offsets = None + size = GObject.property(type=object, setter=set_size) def do_get_size(self, widget, cell_area, x_offset=None, y_offset=None, @@ -942,9 +945,17 @@ class CellRendererIcon(Gtk.CellRenderer): xoffset = max(xoffset * (cell_area.width - width), 0) yoffset = max(self.props.yalign * (cell_area.height - height), 0) + self._cached_offsets = xoffset, yoffset return xoffset, yoffset, width, height + def _get_offsets(self, widget, cell_area): + if self._cached_offsets is not None: + return self._cached_offsets + + xoffset, yoffset, width_, height_ = self.do_get_size(widget, cell_area) + return xoffset, yoffset + def do_activate(self, event, widget, path, background_area, cell_area, flags): pass @@ -1033,7 +1044,7 @@ class CellRendererIcon(Gtk.CellRenderer): if surface is None: return - xoffset, yoffset, width_, height_ = self.do_get_size(widget, cell_area) + xoffset, yoffset = self._get_offsets(widget, cell_area) x = cell_area.x + xoffset y = cell_area.y + yoffset