[cairo] Problem with text rendering on Win32+ClearType, and possible fix

Tor Lillqvist tml at iki.fi
Thu Oct 5 22:14:14 PDT 2006

Owen Taylor writes:
 > You could probably hack around the breakage by adding some sort of
 > if (!_cairo_matrix_integer_transform(..)) return
 > CAIRO_INT_STATUS_UNSUPPORTED to that function, but I really think
 > reverting that patch is is more right.

Hmm, reverting Stuart's patch is a bit hard when I don't know exactly
what it is, so I did add that _cairo_matrix_is_integer_translation()
test you meant. (And yes, it helped the Rotated Text test.)

Behdad, this would then be my suggested patch: (Or, if you instead
choose just to revert Stuart's patch that Owen referred to, that would
be fine then I guess, instead of the first chunk of the below diff.)


--- ../1.2.4/src/cairo-win32-surface.c	Thu Aug 10 23:14:46 2006
+++ src/cairo-win32-surface.c	Fri Oct  6 08:05:18 2006
@@ -1018,6 +1018,10 @@ _cairo_win32_surface_show_glyphs (void		
 	(dst->format != CAIRO_FORMAT_RGB24))
+    /* We can't handle rotated text */
+    if (!_cairo_matrix_is_integer_translation (&source->matrix, NULL, NULL))
     /* If we have a fallback mask clip set on the dst, we have
      * to go through the fallback path */
     if (dst->base.clip &&
@@ -1116,7 +1120,7 @@ cairo_win32_surface_create (HDC hdc)
     if (GetDeviceCaps(hdc, TECHNOLOGY) == DT_RASDISPLAY) {
 	depth = GetDeviceCaps(hdc, BITSPIXEL);
 	if (depth == 32)
-	    format = CAIRO_FORMAT_ARGB32;
+	    format = CAIRO_FORMAT_RGB24;
 	else if (depth == 24)
 	    format = CAIRO_FORMAT_RGB24;
 	else if (depth == 16)

More information about the cairo mailing list