diff --git a/sugar/graphics/snowflakebox.py b/sugar/graphics/snowflakebox.py index 86831f7b..c9b73de7 100644 --- a/sugar/graphics/snowflakebox.py +++ b/sugar/graphics/snowflakebox.py @@ -11,31 +11,39 @@ class SnowflakeBox(hippo.CanvasBox, hippo.CanvasItem): __gtype_name__ = 'SugarSnowflakeBox' def __init__(self, **kwargs): hippo.CanvasBox.__init__(self, **kwargs) - self._root = None - self._r = 0 def set_root(self, icon): self._root = icon + def _get_center(self): + [width, height] = self.get_allocation() + return [width / 2, height / 2] + + def _get_radius(self): + return _BASE_RADIUS + _CHILDREN_FACTOR * len(self.get_children()) + def _layout_root(self): [width, height] = self._root.get_allocation() + [cx, cy] = self._get_center() - x = self._cx - (width / 2) - y = self._cy - (height / 2) + x = cx - (width / 2) + y = cy - (height / 2) self.move(self._root, int(x), int(y)) def _layout_child(self, child, index): - r = self._r + r = self._get_radius() if (len(self.get_children()) > 10): r += _FLAKE_DISTANCE * (index % 3) angle = 2 * math.pi / len(self.get_children()) * index [width, height] = child.get_allocation() - x = self._cx + math.cos(angle) * r - (width / 2) - y = self._cy + math.sin(angle) * r - (height / 2) + [cx, cy] = self._get_center() + + x = cx + math.cos(angle) * r - (width / 2) + y = cy + math.sin(angle) * r - (height / 2) self.move(child, int(x), int(y)) @@ -49,7 +57,8 @@ class SnowflakeBox(hippo.CanvasBox, hippo.CanvasItem): max_child_size = max (max_child_size, width) max_child_size = max (max_child_size, height) - return self._r * 2 + max_child_size + _FLAKE_DISTANCE * 2 + return self._get_radius() * 2 + \ + max_child_size + _FLAKE_DISTANCE * 2 def do_get_height_request(self, width): hippo.CanvasBox.do_get_height_request(self, width) @@ -58,10 +67,6 @@ class SnowflakeBox(hippo.CanvasBox, hippo.CanvasItem): def do_allocate(self, width, height): hippo.CanvasBox.do_allocate(self, width, height) - self._cx = width / 2 - self._cy = height / 2 - self._r = _BASE_RADIUS + _CHILDREN_FACTOR * len(self.get_children()) - self._layout_root() index = 0