[cairo] cairo/quartz on iPhone

Vladimir Vukicevic vladimir at pobox.com
Fri Mar 7 09:45:37 PST 2008


On Mar 7, 2008, at 1:27 AM, Behdad Esfahbod wrote:

> On Fri, 2008-03-07 at 03:52 -0500, Vladimir Vukicevic wrote:
>>
>> The Quartz backend works as-is; the only issue there is that it was
>> including Carbon.h, when it really should just be including
>> CoreGraphics.h.  The bigger issue is that the iPhone does not have
>> ATSUI (which is fine -- ATS is being deprecated on OSX overall), so
>> I
>> wrote a start of a CGFont backend.  This really should be the main
>> backend for Quartz; we can main compat with the old ATSUI font_face
>> creation function pretty easily, but the ATSUI internals should go
>> away.  I might try to do this before we release 1.6, as I'd like to
>> see Quartz become a supported backend in 1.6 and these are really
>> general non-iPhone specific issues.
>
> Min elaborating a bit for an Apple-illiterate like me?  ATSUI is being
> deprecated?  What will do text layout in the future then?  What's the
> different between CGFont and ATS, functionality-wise?  Those kind of
> things...

ATSUI does complex text layout for OSX; it's roughly equivalent to  
Pango.  It's been deprecated (it has a horrid API and is slow for many  
things), and at least on desktop OSX, is being replaced with Core  
Text.  CT is much nicer to work with, and I'm pretty sure these days  
ATSUI is using a lot of CT under the hood.  I'm not sure what the  
complex text layout replacement is on the iPhone, but I don't think  
that matters for cairo's purposes.

CGFont is just a handle to a native (unscaled) font; you can do things  
like render glyphs, convert unicode chars to glyph ids, get glyph  
bounds, etc., but it doesn't do any complex text layout; it's also  
sticking around, unlike ATSUI :)  This is the right level for cairo to  
be hooking into anyway -- it maps pretty directly to the font_face/ 
scaled_font operations.

> Also, getting quartz as supported in 1.6 may not be very realistic.   
> If
> you are serious about it, you may want to move the quartz_image stuff
> into a separate header file for now.  Without those, the cairo- 
> quartz.h
> API looks solid.  Same about cairo-atsui.h, even if atsui will be
> deprecated, that function is still useful, and we can add other
> font-face constructors in the future.  Or should the CGFont stuff be
> done as a new font backend with a new type?

Sure, if it's just the quartz image stuff you object to, that's an  
easy fix :)  I'll move those into a separate header, do you want a  
separate configure option for it as well?  The CGFont backend is a new  
font backend, but the current atsui entry point can easily be  
implemented in terms of it (there's a straightforward way to go from  
an ATSFontRef to a CGFontRef).

     - Vlad


More information about the cairo mailing list