[pygtk] window.invalidate_rect speed
Nathaniel Smith
njs at pobox.com
Mon Dec 10 11:51:13 WST 2007
On Sun, Dec 09, 2007 at 05:05:19PM +0200, Donn wrote:
> I have a timeout calling a function that handles my animation.
> Within that I have a call to _draw():
>
> def _draw():
> self.alloc = self.get_allocation()
> rect = gtk.gdk.Rectangle(self.alloc.x, self.alloc.y, self.alloc.width,
> self.alloc.height)
> self.window.invalidate_rect(rect, True)
>
> This function forces an expose event which happens *at GTK's leisure*.
> (I'm open to alternate versions :) This one is monkey-copy, monkey-paste)
>
> So:
> def _timer():
> doStuff()
> _draw()
> return True # spawn another timeout
>
> What I want to ask is, is there a chance on slow computers that the expose
> event will take so long to actually run that it may happen out of synch? I
> need it to happen *and* finish *before* the timer loop returns.
What do you mean by "out of synch"? Why is it so urgent that the
redraw happen quickly?
> Should I putting in code like:
>
> def _timer():
> doStuff()
> _draw()
> while exposing:
> pass
> return True
>
> And then I set exposing to True (at the end of the actual expose handler)?
No -- invalidate_rect will generally *not* trigger the expose event
until after you return to the main loop, i.e., after your _timer
callback finishes. If you do a busy-loop like this, then not only
will you be living in a state of sin (busy-loops are bad!), but you
will never receive the expose event at all.
What are you trying to do?
-- Nathaniel
More information about the pygtk
mailing list