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