From 511891d27c94afc892ecc0d203a39827cb834e78 Mon Sep 17 00:00:00 2001 From: Richard Wilson Date: Wed, 23 Mar 2005 18:14:38 +0000 Subject: [project @ 2005-03-23 18:14:38 by rjw] Fix incorrect background position calculations. Modify CSS parser to pass all background-position testcases. svn path=/import/netsurf/; revision=1574 --- css/ruleset.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'css/ruleset.c') diff --git a/css/ruleset.c b/css/ruleset.c index c09bd0d1c..54d7ff87d 100644 --- a/css/ruleset.c +++ b/css/ruleset.c @@ -1085,7 +1085,9 @@ bool css_background_position_parse(const struct css_node **node, { const struct css_node *v = *node; const struct css_node *w = v->next; - struct css_background_entry *bg = 0, *bg2 = 0; + const struct css_node *n_temp = 0; + struct css_background_entry *bg = 0, *bg2 = 0, *b_temp = 0; + bool switched = false; if (v->type == CSS_NODE_IDENT) bg = css_background_lookup(v); @@ -1151,6 +1153,14 @@ bool css_background_position_parse(const struct css_node **node, *node = w->next; return true; } + + /* reverse specifiers such that idents are places in h, v order */ + if ((v->type == CSS_NODE_IDENT && bg && bg->vertical) || + (w->type == CSS_NODE_IDENT && bg2 && bg2->horizontal)) { + n_temp = v; v = w; w = n_temp; + b_temp = bg; bg = bg2; bg2 = b_temp; + switched = true; + } if (v->type == CSS_NODE_IDENT) { /* horizontal value */ if (!bg || bg->vertical) @@ -1185,6 +1195,12 @@ bool css_background_position_parse(const struct css_node **node, vert->pos = CSS_BACKGROUND_POSITION_LENGTH; } + /* undo any switching we did */ + if (switched) { + n_temp = v; v = w; w = n_temp; + b_temp = bg; bg = bg2; bg2 = b_temp; + } + *node = w->next; return true; } -- cgit v1.2.3