Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-07-24 10:15:52 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-07-24 10:15:52 (GMT)
commite4a87bea06ef2f5d943888df23a1c03a202dee5b (patch)
tree1b48afca3bb9a904515e5c8752ed5cf08524700b
parent5cec8f9734a0ac4aa26ccb0b920b456d6b8d5e9c (diff)
Implement a stage view
-rwxr-xr-xexamples/scene/scene.py15
-rw-r--r--sugar/scene/Actor.py8
-rw-r--r--sugar/scene/View.py21
3 files changed, 33 insertions, 11 deletions
diff --git a/examples/scene/scene.py b/examples/scene/scene.py
index b54c40c..1f6629e 100755
--- a/examples/scene/scene.py
+++ b/examples/scene/scene.py
@@ -7,26 +7,20 @@ import gtk
from sugar.scene.Stage import Stage
from sugar.scene.Group import Group
+from sugar.scene.View import View
from sugar.scene.PixbufActor import PixbufActor
from sugar.scene.CircleLayout import CircleLayout
from sugar.scene.Timeline import Timeline
-def __drawing_area_expose_cb(widget, event, stage):
- stage.render(widget.window)
-
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()
- drawing_area.window.invalidate_rect(None, False)
-
def __completed_cb(timeline, group):
group.get_layout().set_angle(0)
group.do_layout()
- drawing_area.window.invalidate_rect(None, False)
-
stage = Stage()
pixbuf = gtk.gdk.pixbuf_new_from_file('background.png')
@@ -49,10 +43,9 @@ stage.add(icons_group)
window = gtk.Window()
window.set_default_size(640, 480)
-drawing_area = gtk.DrawingArea()
-drawing_area.connect('expose_event', __drawing_area_expose_cb, stage)
-window.add(drawing_area)
-drawing_area.show()
+view = View(stage)
+window.add(view)
+view.show()
window.show()
diff --git a/sugar/scene/Actor.py b/sugar/scene/Actor.py
index 8ebf796..a9fd644 100644
--- a/sugar/scene/Actor.py
+++ b/sugar/scene/Actor.py
@@ -20,6 +20,7 @@ class Actor(gobject.GObject):
def set_position(self, x, y):
self._x = x
self._y = y
+ self.notify_changed()
def _get_parents(self):
parents = []
@@ -39,9 +40,16 @@ class Actor(gobject.GObject):
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
diff --git a/sugar/scene/View.py b/sugar/scene/View.py
new file mode 100644
index 0000000..23470e4
--- /dev/null
+++ b/sugar/scene/View.py
@@ -0,0 +1,21 @@
+import gtk
+
+from sugar.scene.Stage import Stage
+
+class View(gtk.DrawingArea):
+ def __init__(self, stage):
+ gtk.DrawingArea.__init__(self)
+
+ 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