rgb24-hacks.txt   [plain text]


Index: cairo/src/cairo-win32-surface.c
===================================================================
--- cairo/src/cairo-win32-surface.c	(revision 14498)
+++ cairo/src/cairo-win32-surface.c	(working copy)
@@ -824,8 +824,13 @@
      * to figure out when we can use GDI.  We don't have that checking
      * anywhere at the moment, so just bail and use the fallback
      * paths. */
-    if (surface->format != CAIRO_FORMAT_RGB24)
-	return CAIRO_INT_STATUS_UNSUPPORTED;
+    //if (surface->format != CAIRO_FORMAT_RGB24)
+    //	return CAIRO_INT_STATUS_UNSUPPORTED;
+    // FIXME: We'll go ahead and optimize this now and just assume we're ok if
+    // the color has no alpha.  Probably need to check various composite operators to
+    // get this exactly right.
+    if (color->alpha != 1.0)
+        return CAIRO_INT_STATUS_UNSUPPORTED;
 
     /* Optimize for no destination alpha (surface->pixman_image is non-NULL for all
      * surfaces with alpha.)
@@ -1016,8 +1021,9 @@
 
     /* We can only handle operator SOURCE or OVER with the destination
      * having no alpha */
-    if ((op != CAIRO_OPERATOR_SOURCE && op != CAIRO_OPERATOR_OVER) || 
-	(dst->format != CAIRO_FORMAT_RGB24))
+    if ((op != CAIRO_OPERATOR_SOURCE && op != CAIRO_OPERATOR_OVER))
+        // FIXME: It's not clear why ExtTextOut can't be called when the
+        // destination has alpha.  Remove the RGB24 restriction. || (dst->format != CAIRO_FORMAT_RGB24))
 	return CAIRO_INT_STATUS_UNSUPPORTED;
 
     /* If we have a fallback mask clip set on the dst, we have