On Tue, Dec 11, 2007 at 10:22:12AM -0800, Christopher Barker wrote:
> Paul Kienzle wrote:
> > or if there are pending wx events.  The scheme isn't perfect since wx
> > doesn't see all the native events, but it seems to work well enough.
> 
> I'm confused here -- what events are missed, and why? What do you mean 
> by a "native" event?

Intermediate mouse positions, for example, seem to be consumed.  Also,
it doesn't seem to recognize pending resize events.

Try an experiment such as resizing examples/pcolor_log.py, with N large
enough to make redraws slow to see what I mean (N=200 does it for me).

I tried changing the _onSize event handler to use draw_idle rather 
than draw to improve the resize experience but I shut it off because 
the drawing area turns black and I couldn't figure out how to set it 
to the figure background colour.  It helped slow graphs a little since 
I could see what the resulting window would look like, but the black 
was jarring for quick graphs.

Any thoughts on implementing preemptive plotting?  

This would mean putting tests like the following inside potentially 
expensive loops:

    if self.isabort(): break

where isabort is a method in class artist which delegates to the canvas:

    return self.figure.canvas.isabort() if self.figure else False

For the wx canvas, isabort() would be something like:

    wx.Yield()  # Allow UI events to be processed
    return self._draw_idle_requested # abort drawing if UI triggered redraw

> > 2) Don't draw bitmap on the screen if the graph isn't shown.  Otherwise
> > a plot inside of a wx aui notebook bleeds through even if the graph
> > notebook is not on top.
> 
> hmmm odd -- this does sound right, but shouldn't wx only be re-drawing 
> in a Paint event anyway?

I haven't traced through the wx.aui code so I don't know what is going
on.  I do know that I have problems if I don't check IsWindowShown 
before blitting the bitmap onto the screen.

> > 3) Don't regenerate entire plot for each PaintEvent.  Instead, only
> > draw the graph if this is the first time the window is exposed, otherwise
> > work from the bitmap.
> 
> This is odd to me too -- I haven't dug into the wx back-end, but it 
> seems the Paint Event should only trigger a blit of the bitmap to the 
> screen anyway.

It should, but the bitmap may not be initialized when the paint event
occurs.  This happens when the window is first created (since there is 
no associated size event) and now when switching aui notebook windows
(since I don't render the bitmap if the window isn't shown).


        - Paul

-------------------------------------------------------------------------
SF.Net email is sponsored by: 
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to