Paul Kienzle wrote:
> On Thu, Aug 30, 2007 at 02:19:47PM -0400, Michael Droettboom wrote:
>> Paul Kienzle wrote:
>>> Hi all,
>>> Before I look to deeply into this myself, is there anyone working on it 
>>> already?  Is there anything I need to look out for when implementing it?
>> I've made a few excursions down that road --
>>
>> For bitmap font rendering, the entire math expression is first laid out 
>> in a greyscale bitmap buffer, which is cached and then transferred to 
>> the main plot bitmap.  It was already that way when I got here, and I 
>> assume that's an important optimization (so the text doesn't have to be 
>> re-laid-out when the plot is zoomed/panned).  I say "perhaps" because I 
>> have no data to back it up, and don't know if that came out of profiling 
>> or not.
>>
>> There are a few key low level pieces that are missing for rotation:
>>
>> - FT2Font.draw_glyph_to_bitmap does not support rotation.  This would 
>> have to be added, or there may be a way to use 
>> set_text/draw_glyphs_to_bitmap which does support rotation.  However, 
>> that would make rendering the entire expression to a single buffer much 
>> more difficult.
> 
> Adding rotation to draw_glyph_to_bitmap looks like the easier option...
 >
>> - The horizontal lines are all drawn as filled rectangles aligned to the 
>> pixel grid, directly into the font buffers.  That will probably have to 
>> be pushed upward into the Agg layer to get good line drawing at 
>> arbitrary angles -- but that also makes caching the bitmap a little more 
>> difficult.  So maybe it makes sense to implement our own Breshenham's 
>> algorithm in ft2font.cpp.
> 
> ...but if we need to go into agg anyway, why not use Agg's font handling
> capabilities directly?

Perhaps historical reasons.  I wonder if they're still relevant.

>> All this will be affected by John's proposed refactoring of the 
>> backends, of course, which has kind of kept me off of it in a "wait and 
>> see" kind of mode.  Right now, each backend has a custom interface to 
>> communicate with mathtext -- whereas mathtext should simply be calling 
>> the same low-level methods on all backends to get its job done.  That, 
>> of course, would make this buffer optimization harder (or at least it 
>> would have to be thought about differently).
> 
> I haven't followed the refactoring proposal close enough to know if it
> makes more sense to implement mathtext via freetype in agg or to use
> freetype directly like you are currently doing.  Once that decision is
> clear, we can certainly prototype the handling of rotated text in the Agg
> backend.
> 
> Presumably this will have to be repeated for Cairo.

Cairo already works, as of a few weeks ago, it no longer uses bitmaps 
for mathtext rendering.  (I should have been more clear earlier -- my 
brain has it filed in with the vector backends, though obviously it has 
a resterizer.)

>> Let me know if you decide to implement this and let me know if you have 
>> any questions about the code.  Otherwise I'm happy to add it to my queue.
> 
> I can get by for now with limited text rotation, at least until the
> backend refactoring has settled.

That may be a while (re: John's latest message).  In the meantime, I'm 
going to explore, as he suggested, how bad doing a raster rotation would 
look, as that's the easiest path forward.

Cheers,
Mike

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to