get the pixel extents the "right way" in 1.16 and use our own rounding otherwise...
authorDana Jansens <danakj@orodu.net>
Wed, 23 May 2007 02:02:00 +0000 (02:02 +0000)
committerDana Jansens <danakj@orodu.net>
Wed, 23 May 2007 02:02:00 +0000 (02:02 +0000)
render/font.c

index 73449f9..48321ae 100644 (file)
@@ -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,