From e4e5b1f00ded346f40c788fa9b6cfdd3164c1241 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Wed, 11 May 2005 16:32:44 +0000 Subject: [PATCH] Handle more cases by assuming no-super-luminescent colors. --- ChangeLog | 5 +++++ src/cairo-win32-surface.c | 12 ++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 160dcc8ce..be5599202 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-05-11 Owen Taylor + + * src/cairo-win32-surface.c (categorize_solid_dest_operator): + Handle more cases by assuming no-super-luminescent colors. + 2005-05-11 T Rowley * src/cairo-atsui-font.c: diff --git a/src/cairo-win32-surface.c b/src/cairo-win32-surface.c index 7d544e49c..9df86380b 100644 --- a/src/cairo-win32-surface.c +++ b/src/cairo-win32-surface.c @@ -604,12 +604,15 @@ _cairo_win32_surface_composite (cairo_operator_t operator, /* This big function tells us how to optimize operators for the * case of solid destination and constant-alpha source + * + * NOTE: This function needs revisiting if we add support for + * super-luminescent colors (a == 0, r,g,b > 0) */ static enum { DO_CLEAR, DO_SOURCE, DO_NOTHING, DO_UNSUPPORTED } categorize_solid_dest_operator (cairo_operator_t operator, unsigned short alpha) { - enum { SOURCE_TRANSPARENT, SOURCE_SOLID, SOURCE_OTHER } source; + enum { SOURCE_TRANSPARENT, SOURCE_LIGHT, SOURCE_SOLID, SOURCE_OTHER } source; if (alpha >= 0xff00) source = SOURCE_SOLID; @@ -633,6 +636,8 @@ categorize_solid_dest_operator (cairo_operator_t operator, case CAIRO_OPERATOR_ATOP: /* Ab 1 - Aa */ if (source == SOURCE_SOLID) return DO_SOURCE; + else if (source == SOURCE_TRANSPARENT) + return DO_NOTHING; else return DO_UNSUPPORTED; break; @@ -664,7 +669,10 @@ categorize_solid_dest_operator (cairo_operator_t operator, break; case CAIRO_OPERATOR_ADD: /* 1 1 */ - return DO_UNSUPPORTED; + if (source == SOURCE_TRANSPARENT) + return DO_NOTHING; + else + return DO_UNSUPPORTED; break; } }