WebCore:
2008-03-17 Dan Bernstein <mitz@apple.com>
Reviewed by Dave Hyatt.
- allow incremental relayout of blocks that contain floats
Tests: fast/repaint/line-flow-with-floats-[1-9].html
* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::clearFloatsIfNeeded): Cleaned up by moving most
of the function body out of an if statement which was replaced with an
early return.
(WebCore::RenderBlock::insertFloatingObject): Cleaned up by moving most
of the function body out of an if statement and moving the ASSERT, which
is a crash in release builds, to the beginning. Made this function set
the m_isDescendant flag of floating objects it creates.
(WebCore::RenderBlock::removeFloatingObject): Added a call to
markLinesDirtyInVerticalRange() when removing a float from a block with
inline children.
(WebCore::RenderBlock::markLinesDirtyInVerticalRange): Added. Marks the
lines in the given range as dirty.
(WebCore::RenderBlock::clearFloats): Added code to detect changes to
the geometry of floats intruding into this block from other blocks and
mark any lines whose available width has changed as a result as dirty.
* rendering/RenderBlock.h:
(WebCore::RenderBlock::FloatWithRect::FloatWithRect): Added a structure
to cache a float with its position and size.
(WebCore::RenderBlock::FloatingObject::FloatingObject): Added an
m_isDescendant flag, used by clearFloats() to distinguish between floats
entering the block from outside and floats internal to the block.
* rendering/RootInlineBox.h:
(WebCore::RootInlineBox::floats): Added.
(WebCore::RootInlineBox::floatsPtr): Added.
(WebCore::RootInlineBox::Overflow::Overflow): Added a data member to
hold the floats originating on the line.
* rendering/bidi.cpp:
(WebCore::RenderBlock::layoutInlineChildren): Made the existence of
floats not force a full layout. Changed to cache the geometry of floats
in the block and detect changes to it. If a float's size or position
changes, all lines from that point on are treated as dirty. An exception
is a change in the dimensions of a float on an otherwise-clean line,
which only dirties lines potentially affected by the change (see
determineStartPosition()). Added code to update each RootInlineBox's
set of floats as lines are laid out. Added code to shift floats
belonging to clean lines in the end along with the lines.
(WebCore::RenderBlock::determineStartPosition): Made this function look
for changes to floats' dimensions and mark lines as dirty accordingly.
Also look for new floats and if found, cause a full layout. Added code
to re-add floats belonging to clean lines.
(WebCore::RenderBlock::matchedEndLine): Added checking that the clean
lines in the end can be shifted vertically as needed, i.e. that the
available width along the way is uniform.
LayoutTests:
2008-03-17 Dan Bernstein <mitz@apple.com>
Reviewed by Dave Hyatt.
- test incremental relayout of blocks that contain floats
* fast/repaint/line-flow-with-floats-1.html: Added.
* fast/repaint/line-flow-with-floats-2.html: Added.
* fast/repaint/line-flow-with-floats-3.html: Added.
* fast/repaint/line-flow-with-floats-4.html: Added.
* fast/repaint/line-flow-with-floats-5.html: Added.
* fast/repaint/line-flow-with-floats-6.html: Added.
* fast/repaint/line-flow-with-floats-7.html: Added.
* fast/repaint/line-flow-with-floats-8.html: Added.
* fast/repaint/line-flow-with-floats-9.html: Added.
* fast/repaint/resources/line-flow-with-floats.html: Added.
* fast/repaint/resources/line-flow-with-floats.js: Added.
* platform/mac/fast/repaint/line-flow-with-floats-1-expected.checksum: Added.
* platform/mac/fast/repaint/line-flow-with-floats-1-expected.png: Added.
* platform/mac/fast/repaint/line-flow-with-floats-1-expected.txt: Added.
* platform/mac/fast/repaint/line-flow-with-floats-2-expected.checksum: Added.
* platform/mac/fast/repaint/line-flow-with-floats-2-expected.png: Added.
* platform/mac/fast/repaint/line-flow-with-floats-2-expected.txt: Added.
* platform/mac/fast/repaint/line-flow-with-floats-3-expected.checksum: Added.
* platform/mac/fast/repaint/line-flow-with-floats-3-expected.png: Added.
* platform/mac/fast/repaint/line-flow-with-floats-3-expected.txt: Added.
* platform/mac/fast/repaint/line-flow-with-floats-4-expected.checksum: Added.
* platform/mac/fast/repaint/line-flow-with-floats-4-expected.png: Added.
* platform/mac/fast/repaint/line-flow-with-floats-4-expected.txt: Added.
* platform/mac/fast/repaint/line-flow-with-floats-5-expected.checksum: Added.
* platform/mac/fast/repaint/line-flow-with-floats-5-expected.png: Added.
* platform/mac/fast/repaint/line-flow-with-floats-5-expected.txt: Added.
* platform/mac/fast/repaint/line-flow-with-floats-6-expected.checksum: Added.
* platform/mac/fast/repaint/line-flow-with-floats-6-expected.png: Added.
* platform/mac/fast/repaint/line-flow-with-floats-6-expected.txt: Added.
* platform/mac/fast/repaint/line-flow-with-floats-7-expected.checksum: Added.
* platform/mac/fast/repaint/line-flow-with-floats-7-expected.png: Added.
* platform/mac/fast/repaint/line-flow-with-floats-7-expected.txt: Added.
* platform/mac/fast/repaint/line-flow-with-floats-8-expected.checksum: Added.
* platform/mac/fast/repaint/line-flow-with-floats-8-expected.png: Added.
* platform/mac/fast/repaint/line-flow-with-floats-8-expected.txt: Added.
* platform/mac/fast/repaint/line-flow-with-floats-9-expected.checksum: Added.
* platform/mac/fast/repaint/line-flow-with-floats-9-expected.png: Added.
* platform/mac/fast/repaint/line-flow-with-floats-9-expected.txt: Added.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31116 268f45cc-cd09-0410-ab3c-d52691b4dbfc
44 files changed