[cairo] cairo_text_path() questions

Behdad Esfahbod behdad at behdad.org
Fri Nov 9 10:05:08 PST 2007

On Fri, 2007-11-09 at 11:46 -0500, Hans Breuer wrote:
> Recently I've written a prototype for outline rendering with Dia based on
> cairo_text_path(), see:
> http://svn.gnome.org/viewvc/dia/trunk/objects/standard/outline.c?view=markup
> There are two things which make it less useful than expected:
> 1) although there is a cario context required to call cairo_text_path() the
> transformation within it seems to be ignored (or I am doing something
> wrong:)) E.g. calling cairo_rotate() before cairo_text_path() does not have
> the desired effect of delivering a rotated path.

It works.  But if you do cairo_text_path() and cairo_copy_path() with
the same matrix, you always get the same result.  What you want to do is
to rotate before cairo_text_path, but go back to identity (or whatever)
before cairo_copy_path().

> 2) cairo is delivering multiple closed pathes per glyph. If for example one
> renders '#' the first path given describes the outer curve while the next
> closed path gives the inner square.
> Is there a way to detect the second outline being a hole in the glyph?

I don't think there is.  This is how fonts are defined.  You probably
can detect it.  All holes have different orientation than non-holes.
One set are clockwise, the other counterclockwise.  That's very easy to

  - Find the point on path with least y.  If many have that same y, take
the one with the least x.

  - Take it's two (degenerate) neighbors.  Compute the slope to those,
using atan2.

  - Compare the slopes and decide whether it's CW or CCW.


> This is tested with cairo 1.4.10 on Windows and Linux, the results are
> consistent across the different font backends.
> Thanks,
> 	Hans
> -------- Hans "at" Breuer "dot" Org -----------
> Tell me what you need, and I'll tell you how to
> get along without it.                -- Dilbert
> _______________________________________________
> cairo mailing list
> cairo at cairographics.org
> http://lists.cairographics.org/mailman/listinfo/cairo

"Those who would give up Essential Liberty to purchase a little
 Temporary Safety, deserve neither Liberty nor Safety."
        -- Benjamin Franklin, 1759

More information about the cairo mailing list