Hi, I am stuck on this and thought it may have been lost in the noise, or didn't reach the list. Can anyone give me a suggestion?
repost: > What do you mean by "out of synch"? Why is it so urgent that the > redraw happen quickly? I mean that *if* the expose event takes too long to run, the loop may have begun again and the state of the app will have changed. I am building a 'stack' of objects that represent the state -- what gets drawn where and in what order. It goes like this: This is the loop in my _stack(gtk.DrawingArea) class: def _tick(self): 1. self.MainTimeline._tick() 2. _stack._draw() 3. if _stack.quitApp: 4. gtk.main_quit() 5. return True # spawn timeout again. This function is initially called by: gobject.timeout_add(self.speed, self._tick) gtk.main() _stack.draw() is: def _draw(self): if not self.quitApp: 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) So, it forces an expose event in the _stack class that goes through the stack and draws all the graphics to the DrawingArea. > 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. Actually, on my fairly fast machine, the expose event *is* running *and* finishing before the return from _tick(). I am worried that this is unplanned and that on other machines it may take even longer to run. So, I need to ensure (somehow) that line 5 (above) does *not* get reached until the expose event (triggered by line 2) has finished. I can use flags to prevent line 1 from running until expose has finished, but I thought I'd try to get a better picture about the timing of these events. Is there a better, faster, way to force an expose? I don't suppose I can call the expose handler directly? > 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. As I am actually getting the expose event, I must be doing something right :) > What are you trying to do? I'm writing a retained-mode API to do vector animation using Cairo. So far it's working far better than I had hoped. The user will import my module and use the simple API to setup tweens and parent-child relationships. Each object gets a draw() method where the user can use Cairo to draw stuff. (I suppose they can use anything they want that will draw in a DrawingArea, but I am using Cairo-specific matrixes for controlling everything. I hope that's clearer! \d _______________________________________________ pygtk mailing list pygtk@daa.com.au http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/