diff options
author | Marco 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) |
commit | e4a87bea06ef2f5d943888df23a1c03a202dee5b (patch) | |
tree | 1b48afca3bb9a904515e5c8752ed5cf08524700b /sugar | |
parent | 5cec8f9734a0ac4aa26ccb0b920b456d6b8d5e9c (diff) |
Implement a stage view
Diffstat (limited to 'sugar')
-rw-r--r-- | sugar/scene/Actor.py | 8 | ||||
-rw-r--r-- | sugar/scene/View.py | 21 |
2 files changed, 29 insertions, 0 deletions
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 |