Improved zoom model
This commit is contained in:
parent
a29230c183
commit
f597375aff
@ -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)
|
||||
|
@ -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):
|
||||
|
@ -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(),
|
||||
self._canvas = goocanvas.CanvasView()
|
||||
self._canvas.set_size_request(gtk.gdk.screen_width(),
|
||||
gtk.gdk.screen_height())
|
||||
canvas.set_model(self._model)
|
||||
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)
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user