summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFrederic Crozat <fcrozat@mandriva.com>2006-02-23 16:44:44 -0800
committerCarl Worth <cworth@cworth.org>2006-02-23 16:44:44 -0800
commit65c32ae36fe90d69131435a25e6b15a05339df47 (patch)
tree734390e04b5733445e98f3caf1ec09b70e48d35a /src
parent540c10f3fb529ad7650065a8b11735027d60b28c (diff)
Fix for sub-pixel BGR and vRGB
Diffstat (limited to 'src')
-rw-r--r--src/cairo-ft-font.c36
1 files changed, 25 insertions, 11 deletions
diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c
index 2d04e361b..7ef6a8202 100644
--- a/src/cairo-ft-font.c
+++ b/src/cairo-ft-font.c
@@ -65,6 +65,7 @@
*/
#define PRIVATE_FLAG_HINT_METRICS (0x01 << 24)
#define PRIVATE_FLAG_EMBOLDEN (0x02 << 24)
+#define PRIVATE_FLAG_BGR (0x04 << 24)
#define PRIVATE_FLAGS_MASK (0xff << 24)
/* This is the max number of FT_face objects we keep open at once
@@ -973,11 +974,20 @@ _render_glyph_outline (FT_Face face,
/* XXX not a complete set of flags. This code
* will go away when cworth rewrites the glyph
* cache code */
- if (FT_LOAD_TARGET_MODE (val->key.flags) == FT_RENDER_MODE_LCD)
- rgba = FC_RGBA_RGB;
- else if (FT_LOAD_TARGET_MODE (val->key.flags) == FT_RENDER_MODE_LCD_V)
- rgba = FC_RGBA_VBGR;
-
+ if (FT_LOAD_TARGET_MODE (val->key.flags) == FT_RENDER_MODE_LCD) {
+ if (val->key.flags & PRIVATE_FLAG_BGR) {
+ rgba = FC_RGBA_BGR;
+ } else {
+ rgba = FC_RGBA_RGB;
+ }
+ }
+ else if (FT_LOAD_TARGET_MODE (val->key.flags) == FT_RENDER_MODE_LCD_V) {
+ if (val->key.flags & PRIVATE_FLAG_BGR) {
+ rgba = FC_RGBA_VBGR;
+ } else {
+ rgba = FC_RGBA_VRGB;
+ }
+ }
switch (rgba) {
case FC_RGBA_RGB:
case FC_RGBA_BGR:
@@ -1387,13 +1397,15 @@ _get_pattern_load_flags (FcPattern *pattern)
case FC_RGBA_NONE:
default:
break;
- case FC_RGBA_RGB:
case FC_RGBA_BGR:
- target_flags = FT_LOAD_TARGET_LCD;
+ target_flags |= PRIVATE_FLAG_BGR;
+ case FC_RGBA_RGB:
+ target_flags |= FT_LOAD_TARGET_LCD;
break;
- case FC_RGBA_VRGB:
case FC_RGBA_VBGR:
- target_flags = FT_LOAD_TARGET_LCD_V;
+ target_flags |= PRIVATE_FLAG_BGR;
+ case FC_RGBA_VRGB:
+ target_flags |= FT_LOAD_TARGET_LCD_V;
break;
}
@@ -1445,13 +1457,15 @@ _get_options_load_flags (const cairo_font_options_t *options)
break;
case CAIRO_ANTIALIAS_SUBPIXEL:
switch (options->subpixel_order) {
+ case CAIRO_SUBPIXEL_ORDER_BGR:
+ load_flags |= PRIVATE_FLAG_BGR;
case CAIRO_SUBPIXEL_ORDER_DEFAULT:
case CAIRO_SUBPIXEL_ORDER_RGB:
- case CAIRO_SUBPIXEL_ORDER_BGR:
load_flags |= FT_LOAD_TARGET_LCD;
break;
- case CAIRO_SUBPIXEL_ORDER_VRGB:
case CAIRO_SUBPIXEL_ORDER_VBGR:
+ load_flags |= PRIVATE_FLAG_BGR;
+ case CAIRO_SUBPIXEL_ORDER_VRGB:
load_flags |= FT_LOAD_TARGET_LCD_V;
break;
}