[cairo] Font interface problem

Maarten Breddels dmon at xs4all.nl
Tue Mar 9 16:45:44 PST 2004

> -----Original Message-----
> From: cairo-admin at cairographics.org 
> [mailto:cairo-admin at cairographics.org] On Behalf Of Bill Spitzak
> Sent: dinsdag 9 maart 2004 23:43
> To: Maarten Breddels; 'Carl Worth'
> Cc: cairo at cairographics.org
> Subject: Re: [cairo] Font interface problem
> On Tuesday 09 March 2004 01:21 pm, Maarten Breddels wrote:
> > And, do you agree that fonts drawn with:
> >   cairo_scale(2,2)
> >   cairo_scale_font(2)
> > Are '4' (whatever units) high, but it's a font of height 2, linearly
> > scaled 2 times in x in y.
> > While:
> >   cairo_scale(1,1)
> >   cairo_scale_font(4)
> > Is a font of height 4, and isn't scaled.
> > It matters(not that much though) because ttf(truetype fonts) are
> > transformed (not necessarily linear) at different sizes to keep them
> > readable. Currently they are both drawn as 4 units high, 
> not scaled in
> > any way.
> I think fonts should be drawn identically for a given 
> transform, no matter 
> what portion of that transform is in the CTM and what part is 
> in the font 
> transformation.

Are you sure, this would make things like zooming impossible. I know I'm
splitting hairs here, and it's convenient if it works like you are
describing here, but it is limiting cairo. I don't wanna make a big deal
out if, but I might be worth discussing about.

> There should be seperate arguments to the font selector 
> interface to indicate 
> "draw as though you are N points tall". This is much more 
> similar to setting 
> the weight or other attributes of the font than to scaling.
> There could be a "simple" font choosing interface that takes 
> a "size" and 
> sets the font matrix to that size and also sets the "draw as 
> though you are N 
> points tall" to the same value (or that value*96/72 to turn 
> Cairo units into 
> points on the assumption that the CTM is the default matrix). 
> But internally 
> this should be seperated as fast as possible.

Yes, good idea, sth like cairo_set_font_size(12), and you should get 12
point high font, only depending on your 'pixels_per_inch'. It could also
look at the CTM to make a matching font matrix.

> PLEASE don't make the mistake of specifying the size of the 
> font in "points" 
> or any unit other than the CTM units. This makes it 
> impossible to produce 
> predictable graphics unless I go in and retrieve exactly how 
> you map pionts 
> to font matricies and then calculate the inverse, a total 
> waste of time on 
> everybody's part. If I want to take advantage of a font 
> renderer that draws 
> differently depending on the points, you should use a fixed 
> and predictable 
> way of turning the size into "points" (such as assumming that 
> the CTM is 
> 1/96), or let me independently specify this "points" value, 
> since I know the 
> "point size" much better than Cairo does (I may be trying to 
> actually draw a 
> reduced-size image of the paper, for instance).

Ofcourse, when the font matrix scales 40x40, and CTM is set to the
identity matrix, the font should be 40 pixels high on a raster display,
instead of 40 'points', whatever that size may be.
Btw, cairo_gstate_t has a pixels_per_inch member, so that will define
the size of the font(pixelheight=pixels_per_inch*pointsize/72).

Greetings from .nl, Maarten

More information about the cairo mailing list