[Fontconfig] Re: [Cairo] Text API proposal

Owen Taylor otaylor at redhat.com
Mon Aug 11 15:32:41 PDT 2003


On Mon, 2003-08-11 at 16:31, Keith Packard wrote:
> Around 14 o'clock on Aug 11, Owen Taylor wrote:
> 
> > If you set up things  to allow A), B) comes naturally. If you 
> > have a CairoFontWin32 implementation of CairoFont, you  can have
> > cairo_font_win32_from_logfont(). 
> 
> One option is to always provide FreeType APIs (for portability) and then to
> add native APIs at some level to let people plug things in at this level.
> 
> 	cairo_font_freetype_t cairo_font_freetype_create (FT_Font font);
> 	FT_Font cairo_font_freetype_ft_font (cairo_font_freetype_t cff);
> 	cairo_font_t cairo_font_from_freetype (cairo_font_freetype_t cff);

> 	cairo_font_win32_t cairo_font_win32_create (...);
> 	cairo_font_t cairo_font_from_win32 (cairo_font_win32_t cfw);

I don't think even linking to FreeType on, say, Windows is right; for
various reasons:

 - One more dependency that won't be there normally
 - Inconsistent rendering between different apps
 - Having cairo_font_t be polymorphic on a single system is going
   to be confusing and lead to problems where people assume that
   a font *must* be a cairo_font_win32_t.

It isn't a bad idea to allow people to plug in a new font
system on the fly if they are doing something really custom, but
having two font systems always there is rather peculiar.

> then people could choose which they prefer.  That leaves in question how to
> deal with fontconfig and the 'trivial' APIs.  One option is to map
> fontconfig patterns to native fonts inside cairo so that (by default) you'd
> get native fonts on every platform:

This is an appealing choice, as long as the goals mentioned in my last
mail are possible: consistent list of fonts with the system, and minimal
overhead when not used.

> 	cairo_font_freetypet cairo_font_freetype_create_from_pattern  (FcPattern *pattern)
> 	cairo_font_win32_t cairo_font_win32_create_from_pattern (FcPattern 
>  *pattern)
> 	cairo_font_t cairo_font_create_from_pattern (FcPattern *pattern)
> 
> Make cairo_font_create_from_pattern call one of the other two and return 
> the casted result.

Pango uses a factory setup that would look like:
 
 cairo_font_map_create_font_from_pattern (fontmap, pattern);

I think this works a bit better in general.

> Apps that "don't care" can use the generic functions, apps that "kind of
> care" can use just the freetype functions while apps that "really care" 
> can have conditional code that selects the correct code depending on the 
> underlying operating system.

Does this intermediate state of caring make sense? You shouldn't get one
rasterization if you "don't care" or "really care", and a different
rasterization if you "kind of care".

> What I want to avoid is attempting to provide an abstract interface on top 
> of the underlying font system; that will just frustrate people and cause 
> cairo to forever lag behind.

What do you mean by an "abstract interface"?  Do you mean a generic
interface that goes beyond being useful for don't-care applications?

Regards,
					Owen






More information about the cairo mailing list