diff --git a/examples/scene/scene.py b/examples/scene/scene.py index 1f6629eb..4d5942d6 100755 --- a/examples/scene/scene.py +++ b/examples/scene/scene.py @@ -7,7 +7,7 @@ import gtk from sugar.scene.Stage import Stage from sugar.scene.Group import Group -from sugar.scene.View import View +from sugar.scene.SceneView import SceneView from sugar.scene.PixbufActor import PixbufActor from sugar.scene.CircleLayout import CircleLayout from sugar.scene.Timeline import Timeline @@ -43,10 +43,14 @@ stage.add(icons_group) window = gtk.Window() window.set_default_size(640, 480) -view = View(stage) +view = SceneView(stage) window.add(view) view.show() +button = gtk.Button('Hello') +view.put(button, 10, 10) +button.show() + window.show() timeline = Timeline(stage, 200) diff --git a/shell/HomeWindow2.py b/shell/HomeWindow2.py index d9a9a0c9..e04afe8e 100644 --- a/shell/HomeWindow2.py +++ b/shell/HomeWindow2.py @@ -1,8 +1,12 @@ import gtk from sugar.scene.Stage import Stage -from sugar.scene.SceneView import SceneView +from sugar.scene.StageView import StageView +from sugar.scene.PixbufActor import PixbufActor +from sugar.scene.CircleLayout import CircleLayout +from sugar.scene.Group import Group from sugar.activity import Activity +from sugar import env class ActivityLauncher(gtk.HButtonBox): def __init__(self, shell): @@ -11,36 +15,66 @@ class ActivityLauncher(gtk.HButtonBox): self._shell = shell for module in shell.get_registry().list_activities(): - button = gtk.Button(module.get_name()) - activity_id = module.get_id() - button.connect('clicked', self.__clicked_cb, activity_id) - self.pack_start(button) - button.show() + if module.get_show_launcher(): + self._add_activity(module) + + def _add_activity(self, module): + button = gtk.Button(module.get_name()) + activity_id = module.get_id() + button.connect('clicked', self.__clicked_cb, activity_id) + self.pack_start(button) + button.show() def __clicked_cb(self, button, activity_id): Activity.create(activity_id) -class HomeScene(SceneView): +class HomeScene(StageView): def __init__(self, shell): - self._stage = Stage() + self._stage = self._create_stage() + StageView.__init__(self, self._stage) + self._shell = shell + + launcher = ActivityLauncher(shell) + self.put(launcher, 10, 440) + launcher.show() - SceneView.__init__(self, self._stage) + def _create_stage(self): + stage = Stage() - self._shell = shell + background = env.get_data_file('home-background.png') + pixbuf = gtk.gdk.pixbuf_new_from_file(background) + stage.add(PixbufActor(pixbuf)) + + icons_group = Group() + icons_group.set_position(310, 80) + + pholder = env.get_data_file('activity-placeholder.png') + pholder_pixbuf = gtk.gdk.pixbuf_new_from_file(pholder) + + i = 0 + while i < 7: + icons_group.add(PixbufActor(pholder_pixbuf)) + i += 1 + + layout = CircleLayout(110) + icons_group.set_layout(layout) + + stage.add(icons_group) + + return stage class HomeWindow(gtk.Window): def __init__(self, shell): gtk.Window.__init__(self) + self.connect('realize', self.__realize_cb) + fixed = gtk.Fixed() scene = HomeScene(shell) - fixed.put(scene, 0, 0) + scene.set_size_request(640, 480) + self.add(scene) scene.show() - launcher = ActivityLauncher(shell) - fixed.put(launcher, 0, 0) - launcher.show() - - self.add(fixed) - fixed.show() + def __realize_cb(self, window): + self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DESKTOP) diff --git a/shell/Shell.py b/shell/Shell.py index 6866cc42..cd8f4f49 100755 --- a/shell/Shell.py +++ b/shell/Shell.py @@ -8,7 +8,6 @@ import wnck import gobject from sugar.LogWriter import LogWriter -from ConsoleLogger import ConsoleLogger from ActivityRegistry import ActivityRegistry from HomeWindow import HomeWindow from sugar import env @@ -56,7 +55,7 @@ class Shell: bus_name = dbus.service.BusName('com.redhat.Sugar.Shell', bus=session_bus) ShellDbusService(self, bus_name) - self._owner = ShellOwner() + #self._owner = ShellOwner() self._registry = ActivityRegistry() self._registry.scan_directory(env.get_activities_dir()) diff --git a/shell/data/Makefile.am b/shell/data/Makefile.am index 244b09e9..349aea0d 100644 --- a/shell/data/Makefile.am +++ b/shell/data/Makefile.am @@ -1,4 +1,8 @@ confdir = $(datadir) conf_DATA = kbdconfig -EXTRA_DIST = kbdconfig +imagesdir = $(imagesdir) +images_DATA = \ + home-background.png + +EXTRA_DIST = $(conf_DATA) $(images_DATA) diff --git a/shell/data/activity-placeholder.png b/shell/data/activity-placeholder.png new file mode 100644 index 00000000..9fea97b8 Binary files /dev/null and b/shell/data/activity-placeholder.png differ diff --git a/shell/data/home-background.png b/shell/data/home-background.png new file mode 100644 index 00000000..346b5dce Binary files /dev/null and b/shell/data/home-background.png differ diff --git a/sugar/env.py b/sugar/env.py index df1fb302..4fbad33b 100644 --- a/sugar/env.py +++ b/sugar/env.py @@ -33,6 +33,9 @@ def get_nick_name(): def get_data_dir(): return sugar_data_dir + +def get_data_file(filename): + return os.path.join(get_data_dir(), filename) def get_activities_dir(): return sugar_activities_dir diff --git a/sugar/scene/SceneView.py b/sugar/scene/StageView.py similarity index 83% rename from sugar/scene/SceneView.py rename to sugar/scene/StageView.py index b8b5c0a6..ed4d4242 100644 --- a/sugar/scene/SceneView.py +++ b/sugar/scene/StageView.py @@ -2,9 +2,10 @@ import gtk from sugar.scene.Stage import Stage -class SceneView(gtk.DrawingArea): +class StageView(gtk.Fixed): def __init__(self, stage): - gtk.DrawingArea.__init__(self) + gtk.Fixed.__init__(self) + self.set_has_window(True) self._stage = stage self._stage.connect('changed', self.__stage_changed_cb) diff --git a/sugar/scene/Transformation.py b/sugar/scene/Transformation.py index 452c599f..b5ab142a 100644 --- a/sugar/scene/Transformation.py +++ b/sugar/scene/Transformation.py @@ -15,7 +15,7 @@ class Transformation: return (translated_x, translated_y) def compose(self, transf): - composed = copy.copy(transf) + composed = copy.copy(self) composed._translation_x += transf._translation_x composed._translation_y += transf._translation_y return composed