--- 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 */