--- cairo-1.0.2/src/cairo-ft-font.c.orig 2005-12-20 10:56:08.000000000 +1000 +++ cairo-1.0.2/src/cairo-ft-font.c 2005-12-20 11:01:03.000000000 +1000 @@ -1328,7 +1328,9 @@ 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; @@ -1336,14 +1338,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 */