diff options
| author | Dana Jansens <danakj@orodu.net> | 2007-05-23 02:02:00 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2007-05-23 02:02:00 +0000 |
| commit | 3b8bcd3e3a5ccb94c8d0c832c671f1f845f2ce76 (patch) | |
| tree | 4623ff97ce86e7614a07470727c0739f608bfdda /render | |
| parent | 3f3d59904e47887574b19e8291bf292e9cf1382a (diff) | |
get the pixel extents the "right way" in 1.16 and use our own rounding otherwise because the pango function lies.
Diffstat (limited to 'render')
| -rw-r--r-- | render/font.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/render/font.c b/render/font.c index 73449f91..48321aec 100644 --- a/render/font.c +++ b/render/font.c @@ -146,12 +146,21 @@ static void font_measure_full(const RrFont *f, const gchar *str, pango_layout_set_text(f->layout, str, -1); pango_layout_set_width(f->layout, -1); + + /* pango_layout_get_pixel_extents lies! this is the right way to get the + size of the text's area */ pango_layout_get_extents(f->layout, NULL, &rect); - /* DONT use pango_layout_get_pixel_extents. they say it's guaranteed to - fit the text but they lie. figure it out ourselves */ - *x = (rect.width + PANGO_SCALE - 1) / PANGO_SCALE - + ABS(shadow_x) + 4 /* we put a 2 px edge on each side */; - *y = (rect.height + PANGO_SCALE - 1) / PANGO_SCALE + ABS(shadow_y); +#if PANGO_VERSION_MAJOR > 1 || \ + (PANGO_VERSION_MAJOR == 1 && PANGO_VERSION_MINOR >= 16) + /* pass the logical rect as the ink rect, this is on purpose so we get the + full area for the text */ + pango_extents_to_pixels(&rect, NULL); +#else + rect.width = (rect.width + PANGO_SCALE - 1) / PANGO_SCALE; + rect.height = (rect.height + PANGO_SCALE - 1) / PANGO_SCALE; +#endif + *x = rect.width + ABS(shadow_x) + 4 /* we put a 2 px edge on each side */; + *y = rect.height + ABS(shadow_y); } RrSize *RrFontMeasureString(const RrFont *f, const gchar *str, |
