diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2008-04-21 22:02:33 +0000 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2008-04-21 22:02:33 +0000 |
commit | c4146fb8ff75e4fdd94a0942fd90186d8d34508d (patch) | |
tree | 3a1fe41f54d28c3df8092581313f8428fa9f5ae2 /render | |
parent | 05e8696fc444ffd4d39e9b1138e5a99a56a4680e (diff) | |
download | netsurf-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.c | 23 |
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; } } |