[cairo] A question regarding text extents
Zozó Teki
teknos at gmail.com
Sat Nov 10 04:33:40 PST 2012
Hi,
I use cairo_text_extents() to retrieve how much space is needed for a
piece of text to be able to draw a simple box around it. I have
noticed that this function returns a different value depending on the
transformation matrix in effect. Specifically, if I scale the context,
the returned x_advance is somewhat larger (and also the text is drawn
somewhat larger) - but not by the scaling factor.
In the example below, the two runs produce different values for
extents1.x_advance and extents2.x_advance. On Linux (1.10.2), the two
values are 115 and 116.5 (with whatever font "arial" maps to), whereas
on Windows (1.12.8) I got 109 and 117.
Is this the intended behaviour?
cairo_surface_t *surface =
cairo_image_surface_create(CAIRO_FORMAT_RGB24, 0, 0);
cairo_t *cr = cairo_create(surface);
cairo_select_font_face(cr, "arial", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(cr, 16);
cairo_text_extents_t extents1;
cairo_text_extents(cr, "Now I have both", &extents1);
cairo_destroy(cr);
cairo_surface_destroy(surface);
surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, 0, 0);
cr = cairo_create(surface);
cairo_scale(cr, 4, 4);
cairo_select_font_face(cr, "arial", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(cr, 16);
cairo_text_extents_t extents2;
cairo_text_extents(cr, "Now I have both", &extents2);
cairo_destroy(cr);
cairo_surface_destroy(surface);
Zoltan
More information about the cairo
mailing list