--- cairo-0.9.2/src/cairo-ft-font.c	2005-08-13 18:08:03.000000000 +0800
+++ cairo-0.9.2-new/src/cairo-ft-font.c	2005-08-29 16:47:51.000000000 +0800
@@ -1294,7 +1294,10 @@
 static int
 _get_pattern_load_flags (FcPattern *pattern)
 {
-    FcBool antialias, vertical_layout, hinting, autohint;
+    FcBool antialias, vertical_layout, hinting, autohint, bitmap;
+    FcBool transform;
+    FcMatrix *font_matrix;
+
     int rgba;
 #ifdef FC_HINT_STYLE    
     int hintstyle;
@@ -1302,14 +1305,30 @@
     int load_flags = 0;
     int target_flags = 0;
 
+#ifndef FC_EMBEDDED_BITMAP
+#define FC_EMBEDDED_BITMAP "embeddedbitmap"
+#endif
+
+    if (FcPatternGetMatrix (pattern,
+			    FC_MATRIX, 0, &font_matrix) != FcResultMatch)
+	font_matrix = NULL;
+
+    transform = (font_matrix && (font_matrix->xx != 1 || font_matrix->xy != 0 ||
+				 font_matrix->yx != 0 || font_matrix->yy != 1));
+
+    /* Check whether to use embedded bitmap forcely */
+    if (FcPatternGetBool (pattern,
+			  FC_EMBEDDED_BITMAP, 0, &bitmap) != FcResultMatch)
+	bitmap = FcFalse;
+
     /* disable antialiasing if requested */
     if (FcPatternGetBool (pattern,
 			  FC_ANTIALIAS, 0, &antialias) != FcResultMatch)
 	antialias = FcTrue;
 
-    if (antialias)
+    if ((!bitmap && antialias) || transform)
 	load_flags |= FT_LOAD_NO_BITMAP;
-    else
+    else if (!antialias)
 	load_flags |= FT_LOAD_MONOCHROME;
     
     /* disable hinting if requested */
