From f597375aff4f157e34ade45a7bedcb009f7a6dd0 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Tue, 29 Aug 2006 14:39:34 +0200 Subject: [PATCH] Improved zoom model --- shell/home/FriendsGroup.py | 19 ++++++-------- shell/home/HomeGroup.py | 44 ++++++++++++++++---------------- shell/home/HomeWindow.py | 51 +++++++++++++++++--------------------- shell/home/MeshGroup.py | 8 ++++-- 4 files changed, 60 insertions(+), 62 deletions(-) diff --git a/shell/home/FriendsGroup.py b/shell/home/FriendsGroup.py index 9d1c447a..8494066c 100644 --- a/shell/home/FriendsGroup.py +++ b/shell/home/FriendsGroup.py @@ -8,15 +8,18 @@ import Theme class FriendIcon(IconItem): def __init__(self, friend): IconItem.__init__(self, icon_name='stock-buddy', - color=friend.get_color(), size=48, - x=random.random() * 1100, - y=random.random() * 800) + color=friend.get_color(), size=96, + x=random.random() * 2400, + y=random.random() * 1800) self._friend = friend def get_friend(self): return self._friend class FriendsGroup(goocanvas.Group): + WIDTH = 1200.0 * 1.9 + HEIGHT = 900.0 * 1.9 + def __init__(self, data_model): goocanvas.Group.__init__(self) self._friend_to_child = {} @@ -24,13 +27,9 @@ class FriendsGroup(goocanvas.Group): self._theme = Theme.get_instance() self._theme.connect("theme-changed", self.__theme_changed_cb) - color = self._theme.get_home_mesh_color() - self._mesh_rect = goocanvas.Rect(width=1200, height=900, - line_width=0, fill_color=color) - self.add_child(self._mesh_rect) - color = self._theme.get_home_friends_color() - self._friends_rect = goocanvas.Rect(x=50, y=50, width=1100, height=800, + self._friends_rect = goocanvas.Rect(width=FriendsGroup.WIDTH, + height=FriendsGroup.HEIGHT, line_width=0, fill_color=color, radius_x=30, radius_y=30) self.add_child(self._friends_rect) @@ -44,8 +43,6 @@ class FriendsGroup(goocanvas.Group): def __theme_changed_cb(self, theme): color = self._theme.get_home_friends_color() self._friends_rect.set_property("fill-color", color) - color = self._theme.get_home_mesh_color() - self._mesh_rect.set_property("fill-color", color) def add_friend(self, friend): icon = FriendIcon(friend) diff --git a/shell/home/HomeGroup.py b/shell/home/HomeGroup.py index fb9a50b0..99a4a0ce 100644 --- a/shell/home/HomeGroup.py +++ b/shell/home/HomeGroup.py @@ -45,32 +45,23 @@ class TasksItem(DonutItem): class Background(goocanvas.Group): def __init__(self): goocanvas.Group.__init__(self) - self._theme = Theme.get_instance() - self._theme.connect("theme-changed", self.__theme_changed_cb) - - color = self._theme.get_home_friends_color() - self._friends_rect = goocanvas.Rect(width=1200, height=900, - line_width=0, fill_color=color) - self.add_child(self._friends_rect) - - color = self._theme.get_home_activities_color() - self._home_rect = goocanvas.Rect(x=50, y=50, width=1100, height=800, - line_width=0, fill_color=color, - radius_x=30, radius_y=30) - self.add_child(self._home_rect) - - def __theme_changed_cb(self, theme): - color = self._theme.get_home_activities_color() - self._home_rect.set_property("fill-color", color) - color = self._theme.get_home_friends_color() - self._friends_rect.set_property("fill-color", color) class HomeGroup(goocanvas.Group): + WIDTH = 1200.0 + HEIGHT = 900.0 + def __init__(self, shell): goocanvas.Group.__init__(self) - background = Background() - self.add_child(background) + self._theme = Theme.get_instance() + self._theme.connect("theme-changed", self.__theme_changed_cb) + + color = self._theme.get_home_activities_color() + self._home_rect = goocanvas.Rect(width=HomeGroup.WIDTH, + height=HomeGroup.HEIGHT, + line_width=0, fill_color=color, + radius_x=30, radius_y=30) + self.add_child(self._home_rect) tasks = TasksItem(shell) tasks.translate(600, 450) @@ -83,6 +74,17 @@ class HomeGroup(goocanvas.Group): 450 - (me.get_property('height') / 2)) self.add_child(me) + def get_width(self): + return 1200.0 * 1.8 + + def get_height(self): + return 900.0 * 1.8 + + def __theme_changed_cb(self, theme): + color = self._theme.get_home_activities_color() + self._home_rect.set_property("fill-color", color) + + # def __item_view_created_cb(self, view, item_view, item): # if isinstance(item, PieceItem) or \ # isinstance(item, PieceIcon): diff --git a/shell/home/HomeWindow.py b/shell/home/HomeWindow.py index a7fc55cb..78673eb7 100644 --- a/shell/home/HomeWindow.py +++ b/shell/home/HomeWindow.py @@ -8,11 +8,11 @@ from home.FriendsGroup import FriendsGroup import sugar class HomeWindow(gtk.Window): - CANVAS_WIDTH = 1200 - CANVAS_HEIGHT = 900 def __init__(self, shell): gtk.Window.__init__(self) self._shell = shell + self._width = MeshGroup.WIDTH + self._height = MeshGroup.HEIGHT self.realize() self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DESKTOP) @@ -27,40 +27,35 @@ class HomeWindow(gtk.Window): data_model = model.get_friends() self._friends_group = FriendsGroup(data_model) + self._friends_group.translate((self._width - FriendsGroup.WIDTH) / 2, + (self._height - FriendsGroup.HEIGHT) / 2) root.add_child(self._friends_group) self._home_group = HomeGroup(self._shell) + self._home_group.translate((self._width - HomeGroup.WIDTH) / 2, + (self._height - HomeGroup.HEIGHT) / 2) root.add_child(self._home_group) - canvas = goocanvas.CanvasView() - canvas.set_bounds(0, 0, HomeWindow.CANVAS_WIDTH, - HomeWindow.CANVAS_HEIGHT) - canvas.set_scale(float(gtk.gdk.screen_width()) / - float(HomeWindow.CANVAS_WIDTH)) - canvas.set_size_request(gtk.gdk.screen_width(), - gtk.gdk.screen_height()) - canvas.set_model(self._model) + self._canvas = goocanvas.CanvasView() + self._canvas.set_size_request(gtk.gdk.screen_width(), + gtk.gdk.screen_height()) + self._canvas.set_model(self._model) - self.add(canvas) - canvas.show() - - def _set_group_scale(self, group, d): - x = HomeWindow.CANVAS_WIDTH * (1 - d) / 2 - y = HomeWindow.CANVAS_HEIGHT * (1 - d) / 2 - - matrix = cairo.Matrix(1, 0, 0, 1, 0, 0) - matrix.translate(x, y) - matrix.scale(d, d) - - group.set_transform(matrix) + self.add(self._canvas) + self._canvas.show() def set_zoom_level(self, level): if level == sugar.ZOOM_HOME: - self._set_group_scale(self._home_group, 1.0) + width = HomeGroup.WIDTH * 1.1 + height = HomeGroup.HEIGHT * 1.1 elif level == sugar.ZOOM_FRIENDS: - self._set_group_scale(self._home_group, 0.5) - self._set_group_scale(self._friends_group, 1.0) + width = FriendsGroup.WIDTH * 1.1 + height = FriendsGroup.HEIGHT * 1.1 elif level == sugar.ZOOM_MESH: - self._set_group_scale(self._home_group, 0.2) - self._set_group_scale(self._friends_group, 0.4) - self._set_group_scale(self._mesh_group, 1.0) + width = MeshGroup.WIDTH + height = MeshGroup.HEIGHT + + self._canvas.set_bounds((self._width - width) / 2, + (self._height - height) / 2, + width, height) + self._canvas.set_scale(gtk.gdk.screen_width() / width) diff --git a/shell/home/MeshGroup.py b/shell/home/MeshGroup.py index 6efa1f7a..09fe5e4c 100644 --- a/shell/home/MeshGroup.py +++ b/shell/home/MeshGroup.py @@ -15,7 +15,7 @@ class ActivityItem(IconItem): icon_name = info.get_icon() IconItem.__init__(self, icon_name=icon_name, - color=activity.get_color(), size=48) + color=activity.get_color(), size=144) self._activity = activity @@ -23,13 +23,17 @@ class ActivityItem(IconItem): return self._activity.get_service() class MeshGroup(goocanvas.Group): + WIDTH = 1200.0 * 3.5 + HEIGHT = 900.0 * 3.5 + def __init__(self, data_model): goocanvas.Group.__init__(self) self._theme = Theme.get_instance() self._theme.connect("theme-changed", self.__theme_changed_cb) color = self._theme.get_home_mesh_color() - self._mesh_rect = goocanvas.Rect(width=1200, height=900, + self._mesh_rect = goocanvas.Rect(width=MeshGroup.WIDTH, + height=MeshGroup.HEIGHT, fill_color=color) self.add_child(self._mesh_rect)