[Fontconfig] Re: [Cairo] Text API proposal

Owen Taylor otaylor at redhat.com
Mon Aug 11 20:18:12 PDT 2003


On Mon, 2003-08-11 at 20:04, Keith Packard wrote:
> Around 18 o'clock on Aug 11, Owen Taylor wrote:
> 
> > I don't think even linking to FreeType on, say, Windows is right; for
> > various reasons:
> 
> Hmm.  I'm thinking of applications that want to generate identical results 
> on every system; using different font mechanisms makes that very difficult.
> 
> One obvious such application is a cairo test suite...

If you haven't noticed, no two consecutive versions of FreeType produce
the same output :-). You also won't get the same output unless you
have control-point-per-control-point, hint-for-hint identical fonts.

If you really want an automated test suite, then that's where having the
ability to drop in a new font backend is really useful. You drop in a
back-end where you control the exact pixels of the glyphs; they don't
have to be anything fancy, just some boxes and circles drawn with
the Cairo API.

> > - 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.
> 
> Hmm.  Perhaps we don't need a 'cairo_font_win32_t'; all we really need is 
> the ability to convert from an FcPattern to a windows font handle (HFONT?) 
> or FT_Face.

I guess I'm pretty set on an OO mindset these days. :-) I definitely
see "a few extra win32 methods" as being inheritance rather than just
some extra code we compile in on Windows.

I'd tend to say that if we are going to have multiple font
implementations, especially on the same platform, but even if not
on the same platform, virtualization makes a lot more sense than a
bunch of #ifdef's and switches.

> > 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.
> 
> Hmm.  That means that cairo applications will only be portable if they use 
> the trivial interface; those using lower level interfaces will need system 
> specific code.  I think this means we should build an intermediate 
> interface that provides enough flexibility for "reasonable" applications 
> to succeed without needing operating-system specific code.  I think it 
> should be possible to have an application like Mozilla run on top of the 
> cairo API.

Well, depends what you mean by "an application like Mozilla". If you
mean a application that does semi-sophisticated text layout and wants
to print it", sure.

If you mean "an application that can handle Arabic and Hindi and Thai
and all the other languages of the world that anybody wants to display",
then there are two routes:

 A) Give Cairo text processing skills at the level of Pango or
    Uniscribe; possibly driving away people who already have layout
    engines. Note that it also has to be able to run *on top of* 
    Uniscribe and Apple's text layout engines.

 B) Accept that Cairo is a piece in the solution not the whole thing,
    and that:

    - People who want a full layout engine need to to add that 
      to their shopping cart. Luckily we're talking free software
      here.

    - People writing a full layout engine need to go down and use
      platform specific pieces, and that if there is a platform X
      that has a special way of doing layout, then you 

I don't think there is anything wrong with having an API at the
approximate level of Xft in Cairo, but Mozilla has all sorts of
ad-hoc FreeType and TrueType table access in it where it goes beyond
Xft.

> > 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.
> 
> I believe we can map fontconfig patterns to windows font selection 
> structures.  Some functionality may be lost; I don't believe Windows has 
> any notion of language support in the font infrastructure.

I'm not quite sure what the underlying mechanism is but the XP font
selector knows the scripts supported for each font. You probably could
also compute language coverage information and cache it much as we
do with font files.

> > 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".
> 
> Instead of 'kinda care'/'really care', I should have said 'prefer portability'/
> 'prefer native fonts' -- it's a question of whether applications should be 
> forced to support win32 fonts when freetype could just as easily be 
> provided.

I think there is room in the world for applications that use FreeType
on Windows in certain niches. After all, Adobe doesn't use the Microsoft
rasterizers in their products.

But it strikes me as something that users won't want, in general, and 
application writers won't want, in general.

So, that, to me, means that sticking a choice in the application
developer's face is wrong. If someone really wants to get down and
play with FreeType, I'm sure that the FreeType Cairo font support
will compile for Win32 as well. And if Cairo allows replacing 
the font system at runtime, it will be easy to hook it up.

But I think designing things so we are forced to make native Win32
fonts work well make sense. We don't want to have a half-working set of
Win32 stuff and then say "yeah, it's not that good, you can use FreeType
if you want, that works better, though it will look a bit different than
the system fonts"....

(Yes, Hans, you could with some justification say that's how Pango works
currently)

> > What do you mean by an "abstract interface"?  Do you mean a generic
> > interface that goes beyond being useful for don't-care applications?
> 
> Yes.  I don't want to provide a complete interface that masks the
> differences between FreeType and Win32.  That seems like a bad plan...

And quite possibly also an impossible plan. But I don't think it's
necessary.

Regards,
						Owen






More information about the cairo mailing list