summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-05-23 02:02:00 +0000
committerDana Jansens <danakj@orodu.net>2007-05-23 02:02:00 +0000
commit3b8bcd3e3a5ccb94c8d0c832c671f1f845f2ce76 (patch)
tree4623ff97ce86e7614a07470727c0739f608bfdda
parent3f3d59904e47887574b19e8291bf292e9cf1382a (diff)
get the pixel extents the "right way" in 1.16 and use our own rounding otherwise because the pango function lies.
-rw-r--r--render/font.c19
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,