Get rid of the initial implementation of Diana design since that's no more the plan.

master
Marco Pesenti Gritti 18 years ago
parent 3d4330580c
commit 621e43563f

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

@ -1,61 +0,0 @@
#!/usr/bin/python
import math
import pygtk
pygtk.require('2.0')
import gtk
from sugar.scene.Stage import Stage
from sugar.scene.Group import Group
from sugar.scene.SceneView import SceneView
from sugar.scene.PixbufActor import PixbufActor
from sugar.scene.CircleLayout import CircleLayout
from sugar.scene.Timeline import Timeline
def __next_frame_cb(timeline, frame_num, group):
angle = math.pi * 2 * frame_num / timeline.get_n_frames()
group.get_layout().set_angle(angle)
group.do_layout()
def __completed_cb(timeline, group):
group.get_layout().set_angle(0)
group.do_layout()
stage = Stage()
pixbuf = gtk.gdk.pixbuf_new_from_file('background.png')
stage.add(PixbufActor(pixbuf))
icons_group = Group()
icons_group.set_position(100, 100)
i = 1
while i <= 5:
pixbuf = gtk.gdk.pixbuf_new_from_file('activity%d.png' % i)
icons_group.add(PixbufActor(pixbuf))
i += 1
layout = CircleLayout(100)
icons_group.set_layout(layout)
stage.add(icons_group)
window = gtk.Window()
window.set_default_size(640, 480)
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)
timeline.connect('next-frame', __next_frame_cb, icons_group)
timeline.connect('completed', __completed_cb, icons_group)
timeline.start()
gtk.main()

@ -1,80 +0,0 @@
import gtk
from sugar.scene.Stage import Stage
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):
gtk.HButtonBox.__init__(self)
self._shell = shell
for module in shell.get_registry().list_activities():
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(StageView):
def __init__(self, shell):
self._stage = self._create_stage()
StageView.__init__(self, self._stage)
self._shell = shell
launcher = ActivityLauncher(shell)
self.put(launcher, 10, 440)
launcher.show()
def _create_stage(self):
stage = Stage()
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)
scene.set_size_request(640, 480)
self.add(scene)
scene.show()
def __realize_cb(self, window):
self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DESKTOP)

@ -1,55 +0,0 @@
import gobject
from sugar.scene.Transformation import Transformation
class Actor(gobject.GObject):
__gsignals__ = {
'changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ())
}
def __init__(self):
gobject.GObject.__init__(self)
self._parent = None
self._x = 0
self._y = 0
self._width = -1
self._height = -1
self._transf = Transformation()
def set_position(self, x, y):
self._x = x
self._y = y
self.notify_changed()
def _get_parents(self):
parents = []
parent = self._parent
while parent:
parents.insert(0, parent)
parent = parent._parent
return parents
def _get_abs_position(self, x, y):
transf = None
parents = self._get_parents()
for actor in parents:
if transf:
transf = transf.compose(actor._transf)
else:
transf = actor._transf
return transf.get_position(x, y)
def notify_changed(self):
if self._parent:
self._parent.notify_changed()
else:
self.emit('changed')
def set_size(self, width, height):
self._width = width
self._height = height
self.notify_changed()
def render(self, drawable):
pass

@ -1,25 +0,0 @@
import math
from sugar.scene.LayoutManager import LayoutManager
class CircleLayout(LayoutManager):
def __init__(self, radius):
LayoutManager.__init__(self)
self._radius = radius
self._angle = 0
def set_angle(self, angle):
self._angle = angle
def layout_group(self, group):
step = 2 * math.pi / len(group.get_actors())
angle = self._angle
for actor in group.get_actors():
self._update_position(actor, angle)
angle += step
def _update_position(self, actor, angle):
x = math.cos(angle) * self._radius + self._radius
y = math.sin(angle) * self._radius + self._radius
actor.set_position(int(x + 0.5), int(y + 0.5))

@ -1,39 +0,0 @@
from sugar.scene.Actor import Actor
class Group(Actor):
def __init__(self):
Actor.__init__(self)
self._actors = []
self._layout = None
def set_position(self, x, y):
Actor.set_position(self, x, y)
self._transf.set_translation(x, y)
def add(self, actor):
actor._parent = self
self._actors.append(actor)
self.do_layout()
def remove(self, actor):
self._actors.remove(actor)
self.do_layout()
def get_actors(self):
return self._actors
def set_layout(self, layout):
self._layout = layout
self.do_layout()
def get_layout(self):
return self._layout
def do_layout(self):
if self._layout:
self._layout.layout_group(self)
def render(self, drawable):
for actor in self._actors:
actor.render(drawable)

@ -1,7 +0,0 @@
class LayoutManager:
def __init__(self):
pass
def layout_group(self, group):
pass

@ -1,14 +0,0 @@
import gtk
from sugar.scene.Actor import Actor
class PixbufActor(Actor):
def __init__(self, pixbuf):
Actor.__init__(self)
self._pixbuf = pixbuf
def render(self, drawable):
(x, y) = self._get_abs_position(self._x, self._y)
gc = gtk.gdk.GC(drawable)
drawable.draw_pixbuf(gc, self._pixbuf, 0, 0, x, y)

@ -1,16 +0,0 @@
import gtk
class SceneView(gtk.Fixed):
def __init__(self, stage):
gtk.Fixed.__init__(self)
self.set_has_window(True)
self.connect('expose-event', self.__expose_cb)
self._stage = stage
stage.connect('changed', self.__stage_changed_cb)
def __expose_cb(self, widget, event):
self._stage.render(widget.window)
def __stage_changed_cb(self, stage):
self.window.invalidate_rect(None, False)

@ -1,12 +0,0 @@
from sugar.scene.Group import Group
class Stage(Group):
def __init__(self):
Group.__init__(self)
self._fps = 50
def get_fps(self):
return self._fps
def render(self, drawable):
Group.render(self, drawable)

@ -1,22 +0,0 @@
import gtk
from sugar.scene.Stage import Stage
class StageView(gtk.Fixed):
def __init__(self, stage):
gtk.Fixed.__init__(self)
self.set_has_window(True)
self._stage = stage
self._stage.connect('changed', self.__stage_changed_cb)
self.connect('expose_event', self.__expose_cb)
def __stage_changed_cb(self, stage):
if self.window:
self.window.invalidate_rect(None, False)
def __expose_cb(self, widget, event):
self._stage.render(widget.window)
def get_stage(self):
return self._stage

@ -1,33 +0,0 @@
import gobject
class Timeline(gobject.GObject):
__gsignals__ = {
'next-frame': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([int])),
'completed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([]))
}
def __init__(self, stage, n_frames):
gobject.GObject.__init__(self)
self._stage = stage
self._fps = stage.get_fps()
self._n_frames = n_frames
self._current_frame = 0
def start(self):
gobject.timeout_add(1000 / self._fps, self.__timeout_cb)
def get_n_frames(self):
return self._n_frames
def __timeout_cb(self):
self.emit('next-frame', self._current_frame)
# FIXME skip frames if necessary
self._current_frame += 1
if self._current_frame < self._n_frames:
return True
else:
self.emit('completed')
return False

@ -1,21 +0,0 @@
import copy
class Transformation:
def __init__(self):
self._translation_x = 0
self._translation_y = 0
def set_translation(self, x, y):
self._translation_x = x
self._translation_y = y
def get_position(self, x, y):
translated_x = x + self._translation_x
translated_y = y + self._translation_y
return (translated_x, translated_y)
def compose(self, transf):
composed = copy.copy(self)
composed._translation_x += transf._translation_x
composed._translation_y += transf._translation_y
return composed
Loading…
Cancel
Save