From 1b13f81b8259f4416df7b3063cb280cb977722d7 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Sat, 29 Jan 2011 17:53:22 +0000 Subject: Centralise handling of transparent colours. Add support for currentColor svn path=/trunk/libcss/; revision=11525 --- src/select/properties/background_color.c | 2 +- src/select/properties/border_bottom_color.c | 2 +- src/select/properties/border_left_color.c | 2 +- src/select/properties/border_right_color.c | 2 +- src/select/properties/border_top_color.c | 2 +- src/select/properties/color.c | 25 +++++++++++++++++++------ src/select/properties/helpers.c | 9 ++++++--- src/select/properties/outline_color.c | 6 ++++++ 8 files changed, 36 insertions(+), 14 deletions(-) (limited to 'src/select/properties') diff --git a/src/select/properties/background_color.c b/src/select/properties/background_color.c index e71fc7d..07ba82e 100644 --- a/src/select/properties/background_color.c +++ b/src/select/properties/background_color.c @@ -29,7 +29,7 @@ css_error css__set_background_color_from_hint(const css_hint *hint, css_error css__initial_background_color(css_select_state *state) { return set_background_color(state->computed, - CSS_BACKGROUND_COLOR_TRANSPARENT, 0); + CSS_BACKGROUND_COLOR_COLOR, 0); } css_error css__compose_background_color(const css_computed_style *parent, diff --git a/src/select/properties/border_bottom_color.c b/src/select/properties/border_bottom_color.c index 0df95cc..2e63982 100644 --- a/src/select/properties/border_bottom_color.c +++ b/src/select/properties/border_bottom_color.c @@ -30,7 +30,7 @@ css_error css__set_border_bottom_color_from_hint(const css_hint *hint, css_error css__initial_border_bottom_color(css_select_state *state) { return set_border_bottom_color(state->computed, - CSS_BORDER_COLOR_INITIAL, 0); + CSS_BORDER_COLOR_CURRENT_COLOR, 0); } css_error css__compose_border_bottom_color(const css_computed_style *parent, diff --git a/src/select/properties/border_left_color.c b/src/select/properties/border_left_color.c index ea631ee..cf08257 100644 --- a/src/select/properties/border_left_color.c +++ b/src/select/properties/border_left_color.c @@ -30,7 +30,7 @@ css_error css__set_border_left_color_from_hint(const css_hint *hint, css_error css__initial_border_left_color(css_select_state *state) { return set_border_left_color(state->computed, - CSS_BORDER_COLOR_INITIAL, 0); + CSS_BORDER_COLOR_CURRENT_COLOR, 0); } css_error css__compose_border_left_color(const css_computed_style *parent, diff --git a/src/select/properties/border_right_color.c b/src/select/properties/border_right_color.c index 5f9b6ca..1829784 100644 --- a/src/select/properties/border_right_color.c +++ b/src/select/properties/border_right_color.c @@ -30,7 +30,7 @@ css_error css__set_border_right_color_from_hint(const css_hint *hint, css_error css__initial_border_right_color(css_select_state *state) { return set_border_right_color(state->computed, - CSS_BORDER_COLOR_INITIAL, 0); + CSS_BORDER_COLOR_CURRENT_COLOR, 0); } css_error css__compose_border_right_color(const css_computed_style *parent, diff --git a/src/select/properties/border_top_color.c b/src/select/properties/border_top_color.c index 328ce67..1517eea 100644 --- a/src/select/properties/border_top_color.c +++ b/src/select/properties/border_top_color.c @@ -28,7 +28,7 @@ css_error css__set_border_top_color_from_hint(const css_hint *hint, css_error css__initial_border_top_color(css_select_state *state) { - return set_border_top_color(state->computed, CSS_BORDER_COLOR_INITIAL, 0); + return set_border_top_color(state->computed, CSS_BORDER_COLOR_CURRENT_COLOR, 0); } css_error css__compose_border_top_color(const css_computed_style *parent, diff --git a/src/select/properties/color.c b/src/select/properties/color.c index 3cd1e3d..dad2b9d 100644 --- a/src/select/properties/color.c +++ b/src/select/properties/color.c @@ -17,17 +17,30 @@ css_error css__cascade_color(uint32_t opv, css_style *style, css_select_state *state) { + bool inherit = isInherit(opv); uint16_t value = CSS_COLOR_INHERIT; css_color color = 0; - if (isInherit(opv) == false) { - value = CSS_COLOR_COLOR; - color = *((css_color *) style->bytecode); - advance_bytecode(style, sizeof(color)); + if (inherit == false) { + switch (getValue(opv)) { + case COLOR_TRANSPARENT: + value = CSS_COLOR_COLOR; + break; + case COLOR_CURRENT_COLOR: + /* color: currentColor always computes to inherit */ + value = CSS_COLOR_INHERIT; + inherit = true; + break; + case COLOR_SET: + value = CSS_COLOR_COLOR; + color = *((css_color *) style->bytecode); + advance_bytecode(style, sizeof(color)); + break; + } } - if (css__outranks_existing(getOpcode(opv), isImportant(opv), state, - isInherit(opv))) { + if (css__outranks_existing(getOpcode(opv), isImportant(opv), state, + inherit)) { return set_color(state->computed, value, color); } diff --git a/src/select/properties/helpers.c b/src/select/properties/helpers.c index 9635dd8..3851b36 100644 --- a/src/select/properties/helpers.c +++ b/src/select/properties/helpers.c @@ -53,14 +53,17 @@ css_error css__cascade_bg_border_color(uint32_t opv, css_style *style, css_color color = 0; assert(CSS_BACKGROUND_COLOR_INHERIT == CSS_BORDER_COLOR_INHERIT); - assert(CSS_BACKGROUND_COLOR_TRANSPARENT == - CSS_BORDER_COLOR_TRANSPARENT); assert(CSS_BACKGROUND_COLOR_COLOR == CSS_BORDER_COLOR_COLOR); + assert(CSS_BACKGROUND_COLOR_CURRENT_COLOR == + CSS_BORDER_COLOR_CURRENT_COLOR); if (isInherit(opv) == false) { switch (getValue(opv)) { case BACKGROUND_COLOR_TRANSPARENT: - value = CSS_BACKGROUND_COLOR_TRANSPARENT; + value = CSS_BACKGROUND_COLOR_COLOR; + break; + case BACKGROUND_COLOR_CURRENT_COLOR: + value = CSS_BACKGROUND_COLOR_CURRENT_COLOR; break; case BACKGROUND_COLOR_SET: value = CSS_BACKGROUND_COLOR_COLOR; diff --git a/src/select/properties/outline_color.c b/src/select/properties/outline_color.c index dced1d8..36aafd7 100644 --- a/src/select/properties/outline_color.c +++ b/src/select/properties/outline_color.c @@ -22,6 +22,12 @@ css_error css__cascade_outline_color(uint32_t opv, css_style *style, if (isInherit(opv) == false) { switch (getValue(opv)) { + case OUTLINE_COLOR_TRANSPARENT: + value = CSS_OUTLINE_COLOR_COLOR; + break; + case OUTLINE_COLOR_CURRENT_COLOR: + value = CSS_OUTLINE_COLOR_CURRENT_COLOR; + break; case OUTLINE_COLOR_SET: value = CSS_OUTLINE_COLOR_COLOR; color = *((css_color *) style->bytecode); -- cgit v1.2.3