summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2008-04-21 22:02:33 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2008-04-21 22:02:33 +0000
commitc4146fb8ff75e4fdd94a0942fd90186d8d34508d (patch)
tree3a1fe41f54d28c3df8092581313f8428fa9f5ae2 /render
parent05e8696fc444ffd4d39e9b1138e5a99a56a4680e (diff)
downloadnetsurf-c4146fb8ff75e4fdd94a0942fd90186d8d34508d.tar.gz
netsurf-c4146fb8ff75e4fdd94a0942fd90186d8d34508d.tar.bz2
Fix absolute positioning when there's a float between the box and its containing block.
svn path=/trunk/netsurf/; revision=4101
Diffstat (limited to 'render')
-rw-r--r--render/layout.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/render/layout.c b/render/layout.c
index aa11aa47d..a8de1e42d 100644
--- a/render/layout.c
+++ b/render/layout.c
@@ -2835,8 +2835,29 @@ bool layout_position_absolute(struct box *box,
if (!layout_position_absolute(c, c, 0, 0, content))
return false;
} else {
+ int px, py;
+ if (c->style && (c->style->float_ == CSS_FLOAT_LEFT ||
+ c->style->float_ == CSS_FLOAT_RIGHT)) {
+ /* Float x/y coords are relative to nearest
+ * ansestor with float_children, rather than
+ * relative to parent. Need to get x/y relative
+ * to parent */
+ struct box *p;
+ px = c->x;
+ py = c->y;
+ for (p = box->parent; p && !p->float_children;
+ p = p->parent) {
+ px -= p->x;
+ py -= p->y;
+ }
+ } else {
+ /* Not a float, so box x/y coords are relative
+ * to parent */
+ px = c->x;
+ py = c->y;
+ }
if (!layout_position_absolute(c, containing_block,
- cx + c->x, cy + c->y, content))
+ cx + px, cy + py, content))
return false;
}
}