Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-07-24 09:53:02 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-07-24 09:53:02 (GMT)
commit5cec8f9734a0ac4aa26ccb0b920b456d6b8d5e9c (patch)
treeb1879643d363a0ba345f2699fc5350aa7291c1ad /sugar
parent78660bfcf6d5e032cc2e0e716d123ad460188bab (diff)
Better applying of transformations
Diffstat (limited to 'sugar')
-rw-r--r--sugar/scene/Actor.py34
-rw-r--r--sugar/scene/Group.py10
-rw-r--r--sugar/scene/PixbufActor.py4
-rw-r--r--sugar/scene/Stage.py7
4 files changed, 41 insertions, 14 deletions
diff --git a/sugar/scene/Actor.py b/sugar/scene/Actor.py
index 24074da..8ebf796 100644
--- a/sugar/scene/Actor.py
+++ b/sugar/scene/Actor.py
@@ -1,17 +1,47 @@
-class Actor:
+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
+ 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 set_size(self, width, height):
self._width = width
self._height = height
- def render(self, window, transf):
+ def render(self, drawable):
pass
diff --git a/sugar/scene/Group.py b/sugar/scene/Group.py
index 3cfa5e4..df77794 100644
--- a/sugar/scene/Group.py
+++ b/sugar/scene/Group.py
@@ -1,17 +1,18 @@
from sugar.scene.Actor import Actor
-from sugar.scene.Transformation import Transformation
class Group(Actor):
def __init__(self):
+ Actor.__init__(self)
+
self._actors = []
self._layout = None
- self._transf = Transformation()
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()
@@ -33,7 +34,6 @@ class Group(Actor):
if self._layout:
self._layout.layout_group(self)
- def render(self, drawable, transf):
- transf = transf.compose(self._transf)
+ def render(self, drawable):
for actor in self._actors:
- actor.render(drawable, transf)
+ actor.render(drawable)
diff --git a/sugar/scene/PixbufActor.py b/sugar/scene/PixbufActor.py
index 59b3dce..7c5d6c6 100644
--- a/sugar/scene/PixbufActor.py
+++ b/sugar/scene/PixbufActor.py
@@ -8,7 +8,7 @@ class PixbufActor(Actor):
self._pixbuf = pixbuf
- def render(self, drawable, transf):
- (x, y) = transf.get_position(self._x, self._y)
+ 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)
diff --git a/sugar/scene/Stage.py b/sugar/scene/Stage.py
index 2573d02..e14a889 100644
--- a/sugar/scene/Stage.py
+++ b/sugar/scene/Stage.py
@@ -1,5 +1,4 @@
from sugar.scene.Group import Group
-from sugar.scene.Transformation import Transformation
class Stage(Group):
def __init__(self):
@@ -9,7 +8,5 @@ class Stage(Group):
def get_fps(self):
return self._fps
- def render(self, drawable, transf = None):
- if transf == None:
- transf = Transformation()
- Group.render(self, drawable, transf)
+ def render(self, drawable):
+ Group.render(self, drawable)