diff options
author | Nicolaus L Helper <nlhepler@gmail.com> | 2010-06-17 08:56:30 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2010-06-17 09:06:13 +0100 |
commit | 7a023a62f7517ad0d54f4d59c99909fadcc05e82 (patch) | |
tree | 0598a5746ed67cbfea33a79c402efa2eb3e4060e /src/cairo-xlib-screen.c | |
parent | 36b4b0631cc220d01c411b596a4eef839338cd7c (diff) |
ft,fc,xlib: LCD filtering patch.
This adds internal API to retrieve the LCD filtering parameters from
fontconfig, or as set on the Screen, and feed them to FreeType when
rendering the glyph.
References:
Bug 10301 - LCD filtering patch
https://bugs.freedesktop.org/show_bug.cgi?id=10301
Tested-by: Brandon Wright <bearoso@gmail.com>
Forward-ported-by: Robert Hooker <sarvatt@gmail.cm>
ickle: The API is clearly not ready for public consumption, the enum are
poorly named, however this stands by itself as enabling system wide
properties.
Diffstat (limited to 'src/cairo-xlib-screen.c')
-rw-r--r-- | src/cairo-xlib-screen.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/cairo-xlib-screen.c b/src/cairo-xlib-screen.c index b094eaf4c..db01a8433 100644 --- a/src/cairo-xlib-screen.c +++ b/src/cairo-xlib-screen.c @@ -152,13 +152,22 @@ _cairo_xlib_init_screen_font_options (Display *dpy, cairo_bool_t xft_antialias; int xft_hintstyle; int xft_rgba; + int xft_lcdfilter; cairo_antialias_t antialias; cairo_subpixel_order_t subpixel_order; + cairo_lcd_filter_t lcd_filter; cairo_hint_style_t hint_style; if (!get_boolean_default (dpy, "antialias", &xft_antialias)) xft_antialias = TRUE; + if (!get_integer_default (dpy, "lcdfilter", &xft_lcdfilter)) { + /* -1 is an non-existant Fontconfig constant used to differentiate + * the case when no lcdfilter property is available. + */ + xft_lcdfilter = -1; + } + if (!get_boolean_default (dpy, "hinting", &xft_hinting)) xft_hinting = TRUE; @@ -241,6 +250,24 @@ _cairo_xlib_init_screen_font_options (Display *dpy, subpixel_order = CAIRO_SUBPIXEL_ORDER_DEFAULT; } + switch (xft_lcdfilter) { + case FC_LCD_NONE: + lcd_filter = CAIRO_LCD_FILTER_NONE; + break; + case FC_LCD_DEFAULT: + lcd_filter = CAIRO_LCD_FILTER_FIR5; + break; + case FC_LCD_LIGHT: + lcd_filter = CAIRO_LCD_FILTER_FIR3; + break; + case FC_LCD_LEGACY: + lcd_filter = CAIRO_LCD_FILTER_INTRA_PIXEL; + break; + default: + lcd_filter = CAIRO_LCD_FILTER_DEFAULT; + break; + } + if (xft_antialias) { if (subpixel_order == CAIRO_SUBPIXEL_ORDER_DEFAULT) antialias = CAIRO_ANTIALIAS_GRAY; @@ -253,6 +280,7 @@ _cairo_xlib_init_screen_font_options (Display *dpy, cairo_font_options_set_hint_style (&info->font_options, hint_style); cairo_font_options_set_antialias (&info->font_options, antialias); cairo_font_options_set_subpixel_order (&info->font_options, subpixel_order); + _cairo_font_options_set_lcd_filter (&info->font_options, lcd_filter); cairo_font_options_set_hint_metrics (&info->font_options, CAIRO_HINT_METRICS_ON); } |