From 1b0e469dbd90572d2bf6e4b928d1022a99c447c3 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Thu, 05 Oct 2006 16:53:34 +0000 Subject: More work on the views layout --- diff --git a/shell/view/BuddyMenu.py b/shell/view/BuddyMenu.py index 3b0d69c..814196a 100644 --- a/shell/view/BuddyMenu.py +++ b/shell/view/BuddyMenu.py @@ -1,5 +1,6 @@ import gtk import gobject +import hippo from sugar.graphics.menu import Menu from sugar.graphics.canvasicon import CanvasIcon @@ -22,7 +23,7 @@ class BuddyMenu(Menu): scaled_pixbuf = pixbuf.scale_simple(_ICON_SIZE, _ICON_SIZE, gtk.gdk.INTERP_BILINEAR) del pixbuf - icon_item = hippo.Image(pixbuf=scaled_pixbuf) + icon_item = hippo.CanvasImage(pixbuf=scaled_pixbuf) Menu.__init__(self, buddy.get_name(), icon_item) diff --git a/shell/view/home/MeshBox.py b/shell/view/home/MeshBox.py index 281ddc1..9b3ce3c 100644 --- a/shell/view/home/MeshBox.py +++ b/shell/view/home/MeshBox.py @@ -8,7 +8,8 @@ from view.BuddyIcon import BuddyIcon from sugar.graphics.snowflakelayout import SnowflakeLayout import conf -class ActivityView(hippo.CanvasBox): +class ActivityView(hippo.CanvasBox, hippo.CanvasItem): + __gtype_name__ = 'SugarActivityView' def __init__(self, shell, menu_shell, model): hippo.CanvasBox.__init__(self) @@ -35,16 +36,16 @@ class ActivityView(hippo.CanvasBox): self.remove(icon) del self._icons[name] - def get_size_request(self): - size = self._layout.get_size() - return [size, size] - def _clicked_cb(self, item): registry = conf.get_activity_registry() default_type = self._model.get_service().get_type() bundle = registry.get_activity_from_type(default_type) self._shell.join_activity(bundle.get_id(), self._model.get_id()) + def do_allocate(self, width, height): + hippo.CanvasBox.do_allocate(self, width, height) + self._layout.layout(self) + class MeshBox(hippo.CanvasBox, hippo.CanvasItem): __gtype_name__ = 'SugarMeshBox' def __init__(self, shell, menu_shell): diff --git a/sugar/graphics/snowflakelayout.py b/sugar/graphics/snowflakelayout.py index 611ecaa..afce0c8 100644 --- a/sugar/graphics/snowflakelayout.py +++ b/sugar/graphics/snowflakelayout.py @@ -9,63 +9,53 @@ class SnowflakeLayout: def __init__(self): self._root = None - self._children = [] self._r = 0 def set_root(self, icon): self._root = icon - def add_child(self, icon): - self._children.append(icon) - self._layout() + def _layout_root(self, box): + [width, height] = self._root.get_allocation() - def remove_child(self, icon): - self._children.remove(icon) - self._layout() + x = self._cx - (width / 2) + y = self._cy - (height / 2) - def _layout_root(self): - [width, height] = self._root.get_size_request() + box.move(self._root, int(x), int(y)) - matrix = cairo.Matrix(1, 0, 0, 1, 0, 0) - matrix.translate(self._cx - (width / 2), self._cy - (height / 2)) - self._root.set_transform(matrix) - - def _layout_child(self, child, index): + def _layout_child(self, box, child, index): r = self._r - if (len(self._children) > 10): + if (len(box.get_children()) > 10): r += SnowflakeLayout._FLAKE_DISTANCE * (index % 3) - angle = 2 * math.pi / len(self._children) * index + angle = 2 * math.pi / len(box.get_children()) * index - [width, height] = child.get_size_request() + [width, height] = child.get_allocation() x = self._cx + math.cos(angle) * r - (width / 2) y = self._cy + math.sin(angle) * r - (height / 2) - matrix = cairo.Matrix(1, 0, 0, 1, 0, 0) - matrix.translate(x, y) - child.set_transform(matrix) + box.move(child, int(x), int(y)) - def get_size(self): + def get_size(self, box): max_child_size = 0 - for child in self._children: - [width, height] = child.get_size_request() + for child in box.get_children(): + [width, height] = child.get_allocation() max_child_size = max (max_child_size, width) max_child_size = max (max_child_size, height) return self._r * 2 + max_child_size + \ SnowflakeLayout._FLAKE_DISTANCE * 2 - def _layout(self): + def layout(self, box): self._r = SnowflakeLayout._BASE_RADIUS + \ - SnowflakeLayout._CHILDREN_FACTOR * len(self._children) + SnowflakeLayout._CHILDREN_FACTOR * len(box.get_children()) - size = self.get_size() + size = self.get_size(box) self._cx = size / 2 self._cy = size / 2 - self._layout_root() + self._layout_root(box) index = 0 - for child in self._children: - self._layout_child(child, index) + for child in box.get_children(): + self._layout_child(box, child, index) index += 1 -- cgit v0.9.1