[cairo] Re: cairo internal design ideas

David Reveman c99drn at cs.umu.se
Wed Sep 22 20:14:54 PDT 2004


On Tue, 2004-09-21 at 07:39 -0400, graydon hoare wrote: 
> On Tue, 21 Sep 2004 12:56:21 +0200, David Reveman <c99drn at cs.umu.se> wrote:
> 
> > The reason to why I'd like a different backend function for glyphs is
> > that this would allow surface backends to ask a font backend for a
> > specific representation of the glyphs. Possible scenario: a font backend
> > could be able to provide three different glyph list representations, a
> > list of image masks (would provide rendering to all types of surfaces),
> > XGlyphElt's for use with XRender and some glyph list that a native win32
> > surface backend could use.
> 
> I am part way through a patch (this week) which does something like this. so
> on the glyph front I agree with your suggestion. I haven't worked on the
> vertex / trap code much so I don't know the issues. my patch is more or less
> as follows (deriving from a conversation keithp and I had on friday):
> 
>   - a generic glyph cache object type is added, which maps glyph keys
>     ([font,matrix,glyph] tuples) to void* and performs resource and
>     lifecycle management for the entries. caches are parameterized by
>     some constructor and destructor functions.
> 
>   - surfaces own glyph caches, not fonts, and generally all surfaces using
>     a given backend share one (or a small number) of such caches. in the
>     case of xlib, there is one cache per display; the cache corresponds to
>     a GlyphSet and holds [XGlyphInfo,Glyph] pairs.
> 
>   - glyph caches hold references to fonts in their entries. fonts thus die
>     when users drop all references *and* all cache entries are flushed.
> 
>   - there is a "global" glyph cache which stores an entry type that contains
>     cairo_image_surface_t objects and metrics, from which any backend can
>     pick up glyph images and metrics. fonts are responsible for filling in
>     the global glyph image cache, and indeed fonts make *requests* against
>     the global glyph image cache in order to recalculate their metrics, when
>     asked (in a surface-independent way).
> 
> the hope is to get this working in a manner similar to Xft. we'll see how
> close is possible.

ok, it's good to see that someone is doing some work on this.

The things you've described here are all part of the font backend and I
haven't done a huge amount of thinking about exactly how that would work
but I guessed it would be something like this. I think that all this
would work very well with the surface glyph interface I suggested.
 
-David




More information about the cairo mailing list