From: Barry W. <bar...@gm...> - 2008-07-02 20:41:38
|
I've written the start of a Cocoa-native backend for matplotlib and would like to submit feedback on the code and on the possibility of including it in the standard matplotlib distribution. The backend implementation is not complete (image rendering and mathtext rendering are currently no implemented, nor are the print_* methods of the FigureCanvas). Image rendering is trivial once I figure out how to get the pixel data out of a matplotlib image (I just haven't investigated the API yet). The print_* methods are also trivial (see point 1 below). I'm not sure how to handle mathtext yet. This backend has two major feature differences from CocoaAgg: 1. All drawing is done via native Quartz drawing calls. This has the advantage of making all of the native rendering functionality (including native font rendering and output formats (all those supported by Cocoa-eps,pdf,tiff,etc.) available to matplotlib. It has the disadvantage that the translation from matplotlib paths to Cocoa NSBezierPaths is done in python and is much slower than the compiled version of this operation in the Agg backend (this is a solvable problem, of course). 2. The reason I wrote the backend was so that matplotlib could be used seemlesslly from within a Cocoa application. Thus this backend *will not work* without an existing NSRunLoop. It won't work from the terminal or an IPython session. It will work from the in-progress Cocoa frontend for IPython or from any other Cocoa application. Again there are tradeoffs. On the positive side, figure windows are treated like any other application window, selectable from the Window menu etc. and matplotlib becomes a seemless part of the application. Existing backends designed to create their own runloop (e.g. CocoaAgg or TkAgg) cause menubar and run loop problems when used from within an existing application. It would be possible to merge the CocoaAgg and Cocoa backends in this regard to use the existing run loop if present. I've attached the backend_cocoa.py. cheers, Barry |