summaryrefslogtreecommitdiff
path: root/src/select/properties
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
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')
-rw-r--r--src/select/properties/background_color.c2
-rw-r--r--src/select/properties/border_bottom_color.c2
-rw-r--r--src/select/properties/border_left_color.c2
-rw-r--r--src/select/properties/border_right_color.c2
-rw-r--r--src/select/properties/border_top_color.c2
-rw-r--r--src/select/properties/color.c25
-rw-r--r--src/select/properties/helpers.c9
-rw-r--r--src/select/properties/outline_color.c6
8 files changed, 36 insertions, 14 deletions
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);