void setCairoFontOptionsFromFontConfigPattern(cairo_font_options_t* options, FcPattern* pattern) { FcBool booleanResult; int integerResult; if (FcPatternGetInteger(pattern, FC_RGBA, 0, &integerResult) == FcResultMatch) { cairo_font_options_set_subpixel_order(options, convertFontConfigSubpixelOrder(integerResult)); // Based on the logic in cairo-ft-font.c in the cairo source, a font with // a subpixel order implies that is uses subpixel antialiasing. if (integerResult != FC_RGBA_NONE) cairo_font_options_set_antialias(options, CAIRO_ANTIALIAS_SUBPIXEL); } if (FcPatternGetBool(pattern, FC_ANTIALIAS, 0, &booleanResult) == FcResultMatch) { // Only override the anti-aliasing setting if was previously turned off. Otherwise // we'll override the preference which decides between gray anti-aliasing and // subpixel anti-aliasing. if (!booleanResult) cairo_font_options_set_antialias(options, CAIRO_ANTIALIAS_NONE); else if (cairo_font_options_get_antialias(options) == CAIRO_ANTIALIAS_NONE) cairo_font_options_set_antialias(options, CAIRO_ANTIALIAS_GRAY); } if (FcPatternGetInteger(pattern, FC_HINT_STYLE, 0, &integerResult) == FcResultMatch) cairo_font_options_set_hint_style(options, convertFontConfigHintStyle(integerResult)); if (FcPatternGetBool(pattern, FC_HINTING, 0, &booleanResult) == FcResultMatch && !booleanResult) cairo_font_options_set_hint_style(options, CAIRO_HINT_STYLE_NONE); }
void setCairoFontOptionsFromFontConfigPattern(cairo_font_options_t* options, FcPattern* pattern) { FcBool booleanResult; int integerResult; // We will determine if subpixel anti-aliasing is enabled via the FC_RGBA setting. if (FcPatternGetBool(pattern, FC_ANTIALIAS, 0, &booleanResult) == FcResultMatch && booleanResult) cairo_font_options_set_antialias(options, CAIRO_ANTIALIAS_GRAY); if (FcPatternGetInteger(pattern, FC_RGBA, 0, &integerResult) == FcResultMatch) { if (integerResult != FC_RGBA_NONE) cairo_font_options_set_antialias(options, CAIRO_ANTIALIAS_SUBPIXEL); cairo_font_options_set_subpixel_order(options, convertFontConfigSubpixelOrder(integerResult)); } if (FcPatternGetInteger(pattern, FC_HINT_STYLE, 0, &integerResult) == FcResultMatch) cairo_font_options_set_hint_style(options, convertFontConfigHintStyle(integerResult)); if (FcPatternGetBool(pattern, FC_HINTING, 0, &booleanResult) == FcResultMatch && !booleanResult) cairo_font_options_set_hint_style(options, CAIRO_HINT_STYLE_NONE); }