summaryrefslogtreecommitdiff
path: root/src/select/properties/color.c
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2011-01-29 17:53:22 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2011-01-29 17:53:22 +0000
commit1b13f81b8259f4416df7b3063cb280cb977722d7 (patch)
tree5e34f4150c1fc3bcdcd436781f4799571a40cbd4 /src/select/properties/color.c
parent9838246d69a3d48a8d0d286ecbfcd1faa199ae91 (diff)
downloadlibcss-1b13f81b8259f4416df7b3063cb280cb977722d7.tar.gz
libcss-1b13f81b8259f4416df7b3063cb280cb977722d7.tar.bz2
Centralise handling of transparent colours.
Add support for currentColor svn path=/trunk/libcss/; revision=11525
Diffstat (limited to 'src/select/properties/color.c')
-rw-r--r--src/select/properties/color.c25
1 files changed, 19 insertions, 6 deletions
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);
}