WebCore: https://bugs.webkit.org/show_bug.cgi?id=20329, shadows and reflections incor...
authorhyatt@apple.com <hyatt@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 Aug 2009 19:15:19 +0000 (19:15 +0000)
committerhyatt@apple.com <hyatt@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 Aug 2009 19:15:19 +0000 (19:15 +0000)
considered part of scrollable overflow.

Reviewed by Dan Bernstein.

This patch takes the engine's concept of overflow and splits it into two types:
layout overflow and visual overflow.

Layout overflow is about other boxes that spill out of an enclosing box,  For example,
in the inline flow case a tall image could spill out of a line box. Examples of
visual overflow are shadows, text stroke (and eventually outline and
border-image).

Three objects tracked overflow before this patch: RenderBlock had
m_overflowLeft/Top/Width/Height variables.  RootInlineBox had an Overflow*
that also had four overflow values.  Finally RenderReplaced elements tracked shadow/reflection
overflow using a map that cached four values.

This patch takes all of these different overflow models and unifies them into a single
new class called RenderOverflow.   This class is now a member variable in RenderBox and
InlineFlowBoxes.  It is only allocated if overflow actually exists.  Instead of tracking
four values, it tracks eight: left/top/right/bottom for layout overflow and
left/top/right/bottom for visual overflow.

Overflow computation is now done after layout is finished rather than during layout
(when child objects can be churning and moving around).  A number of layout tests progressed
by deferring overflow computation to a separate pass.

All inline flow boxes now track overflow (and not just the root line box).  This allows
repainting of line boxes to actually be tight and bail early if the overflow rect of a box
doesn't intersect.  The old code always visited all object on a line if the root line box
intersected at all.

Line box overflow no longer propagates across self-painting layers.  This fixes a number of
issues with incorrect scrollbars appearing when relative positioned inlines were used in a page.

Layer bounds have been modified to exclude visual overflow.  The width/height members only really
have one reason for continued existence, and that is that they happen to be used in repaint()
when an overflow clip object's height isn't accurate.  In this case, the bounds should exclude
visual overflow anyway, so this change tightens that repaint up.

Root lines have renamed m_selectionTop/Bottom to m_lineTop/Bottom and positionForPoint methods have
been changed to use these instead of relying on overflow (which was totally wrong).

Significant changes have been made to the "almost strict mode" line box quirk where objects with no
text children have no effect on the height of a line.  Instead of making the height() of the objects
variable and dependent on overflow, the objects now have their full height and get placed on
the baseline properly.  They simply don't contribute to overflow above lineTop/Bottom.

Reflections are no longer considered overflow of any kind.  Because reflections have their own layers,
it is not necessary to treat them as visual or layout overflow in the RenderObject tree.  The end result
of not incorporating them into RenderOverflow is that they have no effect on scrolling.  transparencyClipBox
has been extended to support fully reflecting the entire clip box when a reflection exists.  This fixes
numerous repaint bugs in transparent objects with reflections when the transparent objects had self-painting
sublayers.

* WebCore.xcodeproj/project.pbxproj:
* dom/ContainerNode.cpp:
(WebCore::ContainerNode::getUpperLeftCorner):
* editing/visible_units.cpp:
(WebCore::previousLinePosition):
(WebCore::nextLinePosition):
* page/FrameView.cpp:
(WebCore::FrameView::adjustViewSize):
(WebCore::FrameView::adjustPageHeight):
* rendering/InlineBox.cpp:
(WebCore::InlineBox::height):
* rendering/InlineBox.h:
* rendering/InlineFlowBox.cpp:
(WebCore::InlineFlowBox::adjustPosition):
(WebCore::InlineFlowBox::placeBoxesHorizontally):
(WebCore::InlineFlowBox::placeBoxesVertically):
(WebCore::InlineFlowBox::computeVerticalOverflow):
(WebCore::InlineFlowBox::nodeAtPoint):
(WebCore::InlineFlowBox::paint):
* rendering/InlineFlowBox.h:
(WebCore::InlineFlowBox::InlineFlowBox):
(WebCore::InlineFlowBox::topCombinedOverflow):
(WebCore::InlineFlowBox::bottomCombinedOverflow):
(WebCore::InlineFlowBox::leftCombinedOverflow):
(WebCore::InlineFlowBox::rightCombinedOverflow):
(WebCore::InlineFlowBox::combinedOverflowRect):
(WebCore::InlineFlowBox::topLayoutOverflow):
(WebCore::InlineFlowBox::bottomLayoutOverflow):
(WebCore::InlineFlowBox::leftLayoutOverflow):
(WebCore::InlineFlowBox::rightLayoutOverflow):
(WebCore::InlineFlowBox::layoutOverflowRect):
(WebCore::InlineFlowBox::topVisualOverflow):
(WebCore::InlineFlowBox::bottomVisualOverflow):
(WebCore::InlineFlowBox::leftVisualOverflow):
(WebCore::InlineFlowBox::rightVisualOverflow):
(WebCore::InlineFlowBox::visualOverflowRect):
(WebCore::InlineFlowBox::setHorizontalOverflowPositions):
(WebCore::InlineFlowBox::setVerticalOverflowPositions):
* rendering/InlineTextBox.cpp:
(WebCore::InlineTextBox::paint):
* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::RenderBlock):
(WebCore::RenderBlock::layout):
(WebCore::RenderBlock::layoutBlock):
(WebCore::RenderBlock::addOverflowFromBlockChildren):
(WebCore::RenderBlock::handleBottomOfBlock):
(WebCore::RenderBlock::layoutBlockChildren):
(WebCore::RenderBlock::paint):
(WebCore::RenderBlock::fillInlineSelectionGaps):
(WebCore::RenderBlock::floatRect):
(WebCore::RenderBlock::lowestPosition):
(WebCore::RenderBlock::rightmostPosition):
(WebCore::RenderBlock::leftmostPosition):
(WebCore::RenderBlock::addOverhangingFloats):
(WebCore::RenderBlock::nodeAtPoint):
(WebCore::RenderBlock::positionForPointWithInlineChildren):
(WebCore::RenderBlock::layoutColumns):
(WebCore::getHeightForLineCount):
* rendering/RenderBlock.h:
* rendering/RenderBlockLineLayout.cpp:
(WebCore::RenderBlock::computeHorizontalPositionsForLine):
(WebCore::RenderBlock::computeVerticalPositionsForLine):
(WebCore::RenderBlock::layoutInlineChildren):
(WebCore::RenderBlock::matchedEndLine):
(WebCore::RenderBlock::addOverflowFromInlineChildren):
* rendering/RenderBox.cpp:
(WebCore::RenderBox::destroy):
(WebCore::RenderBox::clippedOverflowRectForRepaint):
(WebCore::RenderBox::localCaretRect):
(WebCore::RenderBox::addShadowAndReflectionOverflow):
(WebCore::RenderBox::addOverflowFromChild):
(WebCore::RenderBox::addLayoutOverflow):
(WebCore::RenderBox::addVisualOverflow):
(WebCore::RenderBox::clearLayoutOverflow):
* rendering/RenderBox.h:
(WebCore::RenderBox::combinedOverflowRect):
(WebCore::RenderBox::topCombinedOverflow):
(WebCore::RenderBox::bottomCombinedOverflow):
(WebCore::RenderBox::leftCombinedOverflow):
(WebCore::RenderBox::rightCombinedOverflow):
(WebCore::RenderBox::layoutOverflowRect):
(WebCore::RenderBox::topLayoutOverflow):
(WebCore::RenderBox::bottomLayoutOverflow):
(WebCore::RenderBox::leftLayoutOverflow):
(WebCore::RenderBox::rightLayoutOverflow):
(WebCore::RenderBox::visualOverflowRect):
(WebCore::RenderBox::topVisualOverflow):
(WebCore::RenderBox::bottomVisualOverflow):
(WebCore::RenderBox::leftVisualOverflow):
(WebCore::RenderBox::rightVisualOverflow):
* rendering/RenderFlexibleBox.cpp:
(WebCore::RenderFlexibleBox::layoutBlock):
(WebCore::RenderFlexibleBox::layoutHorizontalBox):
(WebCore::RenderFlexibleBox::layoutVerticalBox):
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::updateLayerPosition):
(WebCore::RenderLayer::localBoundingBox):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::updateRootLayerPosition):
(WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
* rendering/RenderLineBoxList.cpp:
(WebCore::RenderLineBoxList::paint):
(WebCore::RenderLineBoxList::hitTest):
* rendering/RenderListItem.cpp:
(WebCore::RenderListItem::positionListMarker):
* rendering/RenderObject.cpp:
(WebCore::RenderObject::RenderObject):
* rendering/RenderObject.h:
* rendering/RenderOverflow.h: Added.
(WebCore::RenderOverflow::RenderOverflow):
(WebCore::RenderOverflow::topLayoutOverflow):
(WebCore::RenderOverflow::bottomLayoutOverflow):
(WebCore::RenderOverflow::leftLayoutOverflow):
(WebCore::RenderOverflow::rightLayoutOverflow):
(WebCore::RenderOverflow::topVisualOverflow):
(WebCore::RenderOverflow::bottomVisualOverflow):
(WebCore::RenderOverflow::leftVisualOverflow):
(WebCore::RenderOverflow::rightVisualOverflow):
(WebCore::RenderOverflow::setTopLayoutOverflow):
(WebCore::RenderOverflow::setBottomLayoutOverflow):
(WebCore::RenderOverflow::setLeftLayoutOverflow):
(WebCore::RenderOverflow::setRightLayoutOverflow):
(WebCore::RenderOverflow::setTopVisualOverflow):
(WebCore::RenderOverflow::setBottomVisualOverflow):
(WebCore::RenderOverflow::setLeftVisualOverflow):
(WebCore::RenderOverflow::setRightVisualOverflow):
(WebCore::RenderOverflow::layoutOverflowRect):
(WebCore::RenderOverflow::visualOverflowRect):
(WebCore::RenderOverflow::combinedOverflowRect):
(WebCore::RenderOverflow::move):
(WebCore::RenderOverflow::addLayoutOverflow):
(WebCore::RenderOverflow::addVisualOverflow):
(WebCore::RenderOverflow::resetLayoutOverflow):
* rendering/RenderPartObject.cpp:
(WebCore::RenderPartObject::layout):
* rendering/RenderReplaced.cpp:
(WebCore::RenderReplaced::~RenderReplaced):
(WebCore::RenderReplaced::layout):
(WebCore::RenderReplaced::shouldPaint):
(WebCore::RenderReplaced::positionForPoint):
(WebCore::RenderReplaced::clippedOverflowRectForRepaint):
* rendering/RenderReplaced.h:
* rendering/RenderScrollbarPart.cpp:
(WebCore::RenderScrollbarPart::layout):
(WebCore::RenderScrollbarPart::paintIntoRect):
* rendering/RenderSlider.cpp:
(WebCore::RenderSlider::layout):
* rendering/RenderTable.cpp:
(WebCore::RenderTable::layout):
(WebCore::RenderTable::paint):
* rendering/RenderTableCell.cpp:
(WebCore::RenderTableCell::clippedOverflowRectForRepaint):
* rendering/RenderTableSection.cpp:
(WebCore::RenderTableSection::layoutRows):
* rendering/RenderTableSection.h:
* rendering/RenderText.cpp:
(WebCore::RenderText::positionForPoint):
(WebCore::RenderText::localCaretRect):
* rendering/RenderView.cpp:
(WebCore::RenderView::layout):
* rendering/RootInlineBox.cpp:
(WebCore::RootInlineBox::addHighlightOverflow):
(WebCore::RootInlineBox::adjustPosition):
(WebCore::RootInlineBox::verticallyAlignBoxes):
(WebCore::RootInlineBox::selectionTop):
* rendering/RootInlineBox.h:
(WebCore::RootInlineBox::RootInlineBox):
(WebCore::RootInlineBox::nextRootBox):
(WebCore::RootInlineBox::prevRootBox):
(WebCore::RootInlineBox::lineTop):
(WebCore::RootInlineBox::lineBottom):
(WebCore::RootInlineBox::selectionBottom):
(WebCore::RootInlineBox::selectionHeight):
(WebCore::RootInlineBox::floats):
(WebCore::RootInlineBox::floatsPtr):
(WebCore::RootInlineBox::setLineTopBottomPositions):
* rendering/SVGRootInlineBox.cpp:
(WebCore::SVGRootInlineBox::layoutInlineBoxes):

LayoutTests: https://bugs.webkit.org/show_bug.cgi?id=20329, shadows and reflections incorrectly being included
as part of scrollable overflow.

Reviewed by Dan Bernstein.

Update layout tests to account for all of the changes made to overflow to split it into two types.  Remove the layout
tests that were recently added that assumed that shadows and reflections should be part of scrollable overflow.

* fast/box-shadow/box-shadow-overflow-scroll-expected.txt: Removed.
* fast/box-shadow/box-shadow-overflow-scroll.html: Removed.
* fast/reflections/reflection-overflow-scroll-expected.txt: Removed.
* fast/reflections/reflection-overflow-scroll.html: Removed.
* platform/mac/compositing/overflow/ancestor-overflow-expected.txt:
* platform/mac/compositing/reflections/reflection-on-composited-expected.txt:
* platform/mac/editing/deleting/delete-br-011-expected.txt:
* platform/mac/editing/deleting/delete-br-012-expected.txt:
* platform/mac/editing/pasteboard/select-element-1-expected.txt:
* platform/mac/fast/block/positioning/relative-overflow-block-expected.txt:
* platform/mac/fast/body-propagation/background-color/002-expected.txt:
* platform/mac/fast/body-propagation/background-color/002-xhtml-expected.txt:
* platform/mac/fast/body-propagation/background-image/002-expected.txt:
* platform/mac/fast/body-propagation/background-image/002-xhtml-expected.txt:
* platform/mac/fast/body-propagation/overflow/001-expected.txt:
* platform/mac/fast/body-propagation/overflow/001-xhtml-expected.txt:
* platform/mac/fast/body-propagation/overflow/005-declarative-expected.txt:
* platform/mac/fast/body-propagation/overflow/005-expected.txt:
* platform/mac/fast/body-propagation/overflow/005-xhtml-expected.txt:
* platform/mac/fast/borders/fieldsetBorderRadius-expected.txt:
* platform/mac/fast/box-shadow/transform-fringing-expected.txt:
* platform/mac/fast/clip/008-expected.txt:
* platform/mac/fast/clip/011-expected.txt:
* platform/mac/fast/clip/012-expected.txt:
* platform/mac/fast/dynamic/genContentDestroyChildren-expected.txt:
* platform/mac/fast/dynamic/window-resize-scrollbars-test-expected.txt:
* platform/mac/fast/encoding/utf-16-big-endian-expected.txt:
* platform/mac/fast/encoding/utf-16-little-endian-expected.txt:
* platform/mac/fast/forms/form-element-geometry-expected.txt:
* platform/mac/fast/images/image-in-map-expected.txt:
* platform/mac/fast/inline-block/003-expected.txt:
* platform/mac/fast/inline/inline-text-quirk-bpm-expected.txt:
* platform/mac/fast/invalid/012-expected.txt:
* platform/mac/fast/layers/normal-flow-hit-test-expected.txt:
* platform/mac/fast/lists/inlineBoxWrapperNullCheck-expected.txt:
* platform/mac/fast/overflow/scrollRevealButton-expected.txt:
* platform/mac/fast/reflections/reflection-direction-expected.txt:
* platform/mac/fast/reflections/reflection-masks-expected.checksum:
* platform/mac/fast/reflections/reflection-masks-expected.png:
* platform/mac/fast/reflections/reflection-masks-expected.txt:
* platform/mac/fast/reflections/reflection-masks-opacity-expected.checksum:
* platform/mac/fast/reflections/reflection-masks-opacity-expected.png:
* platform/mac/fast/reflections/reflection-masks-opacity-expected.txt:
* platform/mac/fast/reflections/reflection-nesting-expected.txt:
* platform/mac/fast/reflections/reflection-overflow-hidden-expected.png:
* platform/mac/fast/reflections/reflection-overflow-hidden-expected.txt:
* platform/mac/fast/repaint/box-shadow-h-expected.txt:
* platform/mac/fast/repaint/box-shadow-v-expected.txt:
* platform/mac/fast/repaint/reflection-redraw-expected.txt:
* platform/mac/fast/repaint/reflection-repaint-test-expected.txt:
* platform/mac/fast/repaint/transform-absolute-in-positioned-container-expected.txt:
* platform/mac/fast/repaint/transform-replaced-shadows-expected.txt:
* platform/mac/fast/replaced/border-radius-clip-expected.txt:
* platform/mac/fast/transforms/shadows-expected.txt:
* platform/mac/fast/transforms/transforms-with-opacity-expected.txt:
* platform/mac/media/video-layer-crash-expected.txt:
* platform/mac/tables/mozilla/bugs/adforce_imgis_com-expected.txt:
* platform/mac/tables/mozilla/bugs/bug10565-expected.txt:
* platform/mac/tables/mozilla/bugs/bug10633-expected.txt:
* platform/mac/tables/mozilla/bugs/bug113424-expected.txt:
* platform/mac/tables/mozilla/bugs/bug1188-expected.txt:
* platform/mac/tables/mozilla/bugs/bug131020-expected.txt:
* platform/mac/tables/mozilla/bugs/bug1318-expected.txt:
* platform/mac/tables/mozilla/bugs/bug22513-expected.txt:
* platform/mac/tables/mozilla/bugs/bug26553-expected.txt:
* platform/mac/tables/mozilla/bugs/bug3309-1-expected.txt:
* platform/mac/tables/mozilla/bugs/bug4427-expected.txt:
* platform/mac/tables/mozilla/bugs/bug4527-expected.txt:
* platform/mac/tables/mozilla/bugs/bug5538-expected.txt:
* platform/mac/tables/mozilla/bugs/bug78162-expected.txt:
* platform/mac/tables/mozilla/bugs/bug8381-expected.txt:
* platform/mac/tables/mozilla/bugs/bug86708-expected.txt:
* platform/mac/tables/mozilla/core/bloomberg-expected.txt:
* platform/mac/tables/mozilla/other/ms-expected.txt:
* platform/mac/tables/mozilla_expected_failures/bugs/bug23847-expected.txt:
* platform/mac/tables/mozilla_expected_failures/bugs/bug72393-expected.txt:
* platform/mac/tables/mozilla_expected_failures/bugs/bug89315-expected.txt:
* platform/mac/tables/mozilla_expected_failures/marvin/backgr_border-table-quirks-expected.txt:
* platform/mac/tables/mozilla_expected_failures/marvin/table_overflow_caption_bottom-expected.txt:
* platform/mac/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt:
* platform/mac/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt:
* platform/mac/transforms/3d/point-mapping/3d-point-mapping-expected.txt:
* platform/mac/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt:
* platform/mac/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt:
* platform/mac/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@47440 268f45cc-cd09-0410-ab3c-d52691b4dbfc

128 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/box-shadow/box-shadow-overflow-scroll-expected.txt [deleted file]
LayoutTests/fast/box-shadow/box-shadow-overflow-scroll.html [deleted file]
LayoutTests/fast/reflections/reflection-overflow-scroll-expected.txt [deleted file]
LayoutTests/fast/reflections/reflection-overflow-scroll.html [deleted file]
LayoutTests/fast/reflections/transparent-reflected-sublayers.html [new file with mode: 0644]
LayoutTests/platform/mac/compositing/overflow/ancestor-overflow-expected.txt
LayoutTests/platform/mac/compositing/reflections/reflection-on-composited-expected.txt
LayoutTests/platform/mac/editing/deleting/delete-br-011-expected.txt
LayoutTests/platform/mac/editing/deleting/delete-br-012-expected.txt
LayoutTests/platform/mac/editing/pasteboard/select-element-1-expected.txt
LayoutTests/platform/mac/fast/block/positioning/relative-overflow-block-expected.txt
LayoutTests/platform/mac/fast/body-propagation/background-color/002-expected.txt
LayoutTests/platform/mac/fast/body-propagation/background-color/002-xhtml-expected.txt
LayoutTests/platform/mac/fast/body-propagation/background-image/002-expected.txt
LayoutTests/platform/mac/fast/body-propagation/background-image/002-xhtml-expected.txt
LayoutTests/platform/mac/fast/body-propagation/overflow/001-expected.txt
LayoutTests/platform/mac/fast/body-propagation/overflow/001-xhtml-expected.txt
LayoutTests/platform/mac/fast/body-propagation/overflow/005-declarative-expected.txt
LayoutTests/platform/mac/fast/body-propagation/overflow/005-expected.txt
LayoutTests/platform/mac/fast/body-propagation/overflow/005-xhtml-expected.txt
LayoutTests/platform/mac/fast/borders/fieldsetBorderRadius-expected.txt
LayoutTests/platform/mac/fast/box-shadow/basic-shadows-expected.txt
LayoutTests/platform/mac/fast/box-shadow/transform-fringing-expected.txt
LayoutTests/platform/mac/fast/clip/008-expected.txt
LayoutTests/platform/mac/fast/clip/011-expected.txt
LayoutTests/platform/mac/fast/clip/012-expected.txt
LayoutTests/platform/mac/fast/dynamic/genContentDestroyChildren-expected.txt
LayoutTests/platform/mac/fast/dynamic/window-resize-scrollbars-test-expected.txt
LayoutTests/platform/mac/fast/encoding/utf-16-big-endian-expected.txt
LayoutTests/platform/mac/fast/encoding/utf-16-little-endian-expected.txt
LayoutTests/platform/mac/fast/forms/form-element-geometry-expected.txt
LayoutTests/platform/mac/fast/images/image-in-map-expected.txt
LayoutTests/platform/mac/fast/inline-block/003-expected.txt
LayoutTests/platform/mac/fast/inline/inline-text-quirk-bpm-expected.txt
LayoutTests/platform/mac/fast/invalid/012-expected.txt
LayoutTests/platform/mac/fast/layers/normal-flow-hit-test-expected.txt
LayoutTests/platform/mac/fast/lists/inlineBoxWrapperNullCheck-expected.txt
LayoutTests/platform/mac/fast/overflow/scrollRevealButton-expected.txt
LayoutTests/platform/mac/fast/reflections/reflection-direction-expected.txt
LayoutTests/platform/mac/fast/reflections/reflection-masks-expected.checksum
LayoutTests/platform/mac/fast/reflections/reflection-masks-expected.png
LayoutTests/platform/mac/fast/reflections/reflection-masks-expected.txt
LayoutTests/platform/mac/fast/reflections/reflection-masks-opacity-expected.checksum
LayoutTests/platform/mac/fast/reflections/reflection-masks-opacity-expected.png
LayoutTests/platform/mac/fast/reflections/reflection-masks-opacity-expected.txt
LayoutTests/platform/mac/fast/reflections/reflection-nesting-expected.txt
LayoutTests/platform/mac/fast/reflections/reflection-overflow-hidden-expected.png
LayoutTests/platform/mac/fast/reflections/reflection-overflow-hidden-expected.txt
LayoutTests/platform/mac/fast/reflections/transparent-reflected-sublayers-expected.checksum [new file with mode: 0644]
LayoutTests/platform/mac/fast/reflections/transparent-reflected-sublayers-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/fast/reflections/transparent-reflected-sublayers-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/fast/repaint/box-shadow-h-expected.txt
LayoutTests/platform/mac/fast/repaint/box-shadow-v-expected.txt
LayoutTests/platform/mac/fast/repaint/reflection-redraw-expected.txt
LayoutTests/platform/mac/fast/repaint/reflection-repaint-test-expected.txt
LayoutTests/platform/mac/fast/repaint/transform-absolute-in-positioned-container-expected.txt
LayoutTests/platform/mac/fast/repaint/transform-replaced-shadows-expected.txt
LayoutTests/platform/mac/fast/replaced/border-radius-clip-expected.txt
LayoutTests/platform/mac/fast/transforms/shadows-expected.txt
LayoutTests/platform/mac/fast/transforms/transforms-with-opacity-expected.txt
LayoutTests/platform/mac/media/video-layer-crash-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/adforce_imgis_com-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug10565-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug10633-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug113424-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug1188-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug131020-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug1318-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug22513-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug26553-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug3309-1-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug4427-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug4527-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug5538-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug78162-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug8381-expected.txt
LayoutTests/platform/mac/tables/mozilla/bugs/bug86708-expected.txt
LayoutTests/platform/mac/tables/mozilla/core/bloomberg-expected.txt
LayoutTests/platform/mac/tables/mozilla/other/ms-expected.txt
LayoutTests/platform/mac/tables/mozilla_expected_failures/bugs/bug23847-expected.txt
LayoutTests/platform/mac/tables/mozilla_expected_failures/bugs/bug72393-expected.txt
LayoutTests/platform/mac/tables/mozilla_expected_failures/bugs/bug89315-expected.txt
LayoutTests/platform/mac/tables/mozilla_expected_failures/marvin/backgr_border-table-quirks-expected.txt
LayoutTests/platform/mac/tables/mozilla_expected_failures/marvin/table_overflow_caption_bottom-expected.txt
LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt
LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt
LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-expected.txt
LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt
LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt
LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt
WebCore/ChangeLog
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/dom/ContainerNode.cpp
WebCore/editing/visible_units.cpp
WebCore/page/FrameView.cpp
WebCore/rendering/InlineBox.cpp
WebCore/rendering/InlineBox.h
WebCore/rendering/InlineFlowBox.cpp
WebCore/rendering/InlineFlowBox.h
WebCore/rendering/InlineTextBox.cpp
WebCore/rendering/RenderBlock.cpp
WebCore/rendering/RenderBlock.h
WebCore/rendering/RenderBlockLineLayout.cpp
WebCore/rendering/RenderBox.cpp
WebCore/rendering/RenderBox.h
WebCore/rendering/RenderFlexibleBox.cpp
WebCore/rendering/RenderLayer.cpp
WebCore/rendering/RenderLayerCompositor.cpp
WebCore/rendering/RenderLineBoxList.cpp
WebCore/rendering/RenderListItem.cpp
WebCore/rendering/RenderObject.cpp
WebCore/rendering/RenderObject.h
WebCore/rendering/RenderOverflow.h [new file with mode: 0644]
WebCore/rendering/RenderPartObject.cpp
WebCore/rendering/RenderReplaced.cpp
WebCore/rendering/RenderReplaced.h
WebCore/rendering/RenderScrollbarPart.cpp
WebCore/rendering/RenderSlider.cpp
WebCore/rendering/RenderTable.cpp
WebCore/rendering/RenderTableCell.cpp
WebCore/rendering/RenderTableSection.cpp
WebCore/rendering/RenderTableSection.h
WebCore/rendering/RenderText.cpp
WebCore/rendering/RenderView.cpp
WebCore/rendering/RootInlineBox.cpp
WebCore/rendering/RootInlineBox.h
WebCore/rendering/SVGRootInlineBox.cpp

index 33baa5f..061a27e 100644 (file)
@@ -1,3 +1,99 @@
+2009-08-16  David Hyatt  <hyatt@apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        https://bugs.webkit.org/show_bug.cgi?id=20329, shadows and reflections incorrectly being included
+        as part of scrollable overflow.
+        
+        Update layout tests to account for all of the changes made to overflow to split it into two types.  Remove the layout
+        tests that were recently added that assumed that shadows and reflections should be part of scrollable overflow.
+
+        * fast/box-shadow/box-shadow-overflow-scroll-expected.txt: Removed.
+        * fast/box-shadow/box-shadow-overflow-scroll.html: Removed.
+        * fast/reflections/reflection-overflow-scroll-expected.txt: Removed.
+        * fast/reflections/reflection-overflow-scroll.html: Removed.
+        * platform/mac/compositing/overflow/ancestor-overflow-expected.txt:
+        * platform/mac/compositing/reflections/reflection-on-composited-expected.txt:
+        * platform/mac/editing/deleting/delete-br-011-expected.txt:
+        * platform/mac/editing/deleting/delete-br-012-expected.txt:
+        * platform/mac/editing/pasteboard/select-element-1-expected.txt:
+        * platform/mac/fast/block/positioning/relative-overflow-block-expected.txt:
+        * platform/mac/fast/body-propagation/background-color/002-expected.txt:
+        * platform/mac/fast/body-propagation/background-color/002-xhtml-expected.txt:
+        * platform/mac/fast/body-propagation/background-image/002-expected.txt:
+        * platform/mac/fast/body-propagation/background-image/002-xhtml-expected.txt:
+        * platform/mac/fast/body-propagation/overflow/001-expected.txt:
+        * platform/mac/fast/body-propagation/overflow/001-xhtml-expected.txt:
+        * platform/mac/fast/body-propagation/overflow/005-declarative-expected.txt:
+        * platform/mac/fast/body-propagation/overflow/005-expected.txt:
+        * platform/mac/fast/body-propagation/overflow/005-xhtml-expected.txt:
+        * platform/mac/fast/borders/fieldsetBorderRadius-expected.txt:
+        * platform/mac/fast/box-shadow/transform-fringing-expected.txt:
+        * platform/mac/fast/clip/008-expected.txt:
+        * platform/mac/fast/clip/011-expected.txt:
+        * platform/mac/fast/clip/012-expected.txt:
+        * platform/mac/fast/dynamic/genContentDestroyChildren-expected.txt:
+        * platform/mac/fast/dynamic/window-resize-scrollbars-test-expected.txt:
+        * platform/mac/fast/encoding/utf-16-big-endian-expected.txt:
+        * platform/mac/fast/encoding/utf-16-little-endian-expected.txt:
+        * platform/mac/fast/forms/form-element-geometry-expected.txt:
+        * platform/mac/fast/images/image-in-map-expected.txt:
+        * platform/mac/fast/inline-block/003-expected.txt:
+        * platform/mac/fast/inline/inline-text-quirk-bpm-expected.txt:
+        * platform/mac/fast/invalid/012-expected.txt:
+        * platform/mac/fast/layers/normal-flow-hit-test-expected.txt:
+        * platform/mac/fast/lists/inlineBoxWrapperNullCheck-expected.txt:
+        * platform/mac/fast/overflow/scrollRevealButton-expected.txt:
+        * platform/mac/fast/reflections/reflection-direction-expected.txt:
+        * platform/mac/fast/reflections/reflection-masks-expected.checksum:
+        * platform/mac/fast/reflections/reflection-masks-expected.png:
+        * platform/mac/fast/reflections/reflection-masks-expected.txt:
+        * platform/mac/fast/reflections/reflection-masks-opacity-expected.checksum:
+        * platform/mac/fast/reflections/reflection-masks-opacity-expected.png:
+        * platform/mac/fast/reflections/reflection-masks-opacity-expected.txt:
+        * platform/mac/fast/reflections/reflection-nesting-expected.txt:
+        * platform/mac/fast/reflections/reflection-overflow-hidden-expected.png:
+        * platform/mac/fast/reflections/reflection-overflow-hidden-expected.txt:
+        * platform/mac/fast/repaint/box-shadow-h-expected.txt:
+        * platform/mac/fast/repaint/box-shadow-v-expected.txt:
+        * platform/mac/fast/repaint/reflection-redraw-expected.txt:
+        * platform/mac/fast/repaint/reflection-repaint-test-expected.txt:
+        * platform/mac/fast/repaint/transform-absolute-in-positioned-container-expected.txt:
+        * platform/mac/fast/repaint/transform-replaced-shadows-expected.txt:
+        * platform/mac/fast/replaced/border-radius-clip-expected.txt:
+        * platform/mac/fast/transforms/shadows-expected.txt:
+        * platform/mac/fast/transforms/transforms-with-opacity-expected.txt:
+        * platform/mac/media/video-layer-crash-expected.txt:
+        * platform/mac/tables/mozilla/bugs/adforce_imgis_com-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug10565-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug10633-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug113424-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug1188-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug131020-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug1318-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug22513-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug26553-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug3309-1-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug4427-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug4527-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug5538-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug78162-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug8381-expected.txt:
+        * platform/mac/tables/mozilla/bugs/bug86708-expected.txt:
+        * platform/mac/tables/mozilla/core/bloomberg-expected.txt:
+        * platform/mac/tables/mozilla/other/ms-expected.txt:
+        * platform/mac/tables/mozilla_expected_failures/bugs/bug23847-expected.txt:
+        * platform/mac/tables/mozilla_expected_failures/bugs/bug72393-expected.txt:
+        * platform/mac/tables/mozilla_expected_failures/bugs/bug89315-expected.txt:
+        * platform/mac/tables/mozilla_expected_failures/marvin/backgr_border-table-quirks-expected.txt:
+        * platform/mac/tables/mozilla_expected_failures/marvin/table_overflow_caption_bottom-expected.txt:
+        * platform/mac/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt:
+        * platform/mac/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt:
+        * platform/mac/transforms/3d/point-mapping/3d-point-mapping-expected.txt:
+        * platform/mac/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt:
+        * platform/mac/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt:
+        * platform/mac/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt:
+
 2009-08-18  Alexey Proskuryakov  <ap@apple.com>
 
         Reviewed by Darin Adler.
diff --git a/LayoutTests/fast/box-shadow/box-shadow-overflow-scroll-expected.txt b/LayoutTests/fast/box-shadow/box-shadow-overflow-scroll-expected.txt
deleted file mode 100644 (file)
index c6340d5..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-Check if the size of box-shadow's blur and spread are considered as overflow size. See this bug for detail: https://bugs.webkit.org/show_bug.cgi?id=28017.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS element.scrollLeft is 40+50+60
-PASS element.scrollTop is 40+50+60
-PASS element.scrollLeft is 40+50+60
-PASS element.scrollTop is 40+50+60
-PASS element.scrollLeft is 40+50+60
-PASS element.scrollTop is 40+50+60
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/LayoutTests/fast/box-shadow/box-shadow-overflow-scroll.html b/LayoutTests/fast/box-shadow/box-shadow-overflow-scroll.html
deleted file mode 100644 (file)
index 1fa92cc..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<link rel="stylesheet" href="resources/js-test-style.css">
-<script src="../js/resources/js-test-pre.js"></script>
-<style>
-#main div {
-  overflow: hidden;
-  width: 150px;
-  height: 150px;
-}
-.shadow {
-  -webkit-box-shadow: 40px 40px 50px 60px green;
-  background-color: red;
-}
-</style>
-</head>
-<body>
-<p id="description"></p>
-<div id="console"></div>
-
-<div id="main">
-
-You should see no red.
-
-<p>
-div:
-<div id="horizontal" style="overflow-x: scroll;">
-<div class="shadow">
-</div>
-</div>
-<div id="vertical" style="overflow-y: scroll;">
-<div class="shadow">
-</div>
-</div>
-
-<p>
-flexbox:
-<div id="horizontal_flex" style="overflow-x: scroll;">
-<div class="shadow" style="display: -webkit-box;">
-</div>
-</div>
-<div id="vertical_flex" style="overflow-y: scroll;">
-<div class="shadow" style="display: -webkit-box;">
-</div>
-</div>
-
-<p>
-table:
-<div id="horizontal_table" style="overflow-x: scroll;">
-<table class="shadow" style="width: 150px; height: 150px;">
-<tr><td></td></tr>
-</table>
-</div>
-<div id="vertical_table" style="overflow-y: scroll;">
-<table class="shadow" style="width: 150px; height: 150px;">
-<tr><td></td></tr>
-</table>
-</div>
-
-</div>
-
-<script src="resources/box-shadow-overflow-scroll.js"></script>
-<script src="../js/resources/js-test-post.js"></script>
-
-</body>
-</html>
diff --git a/LayoutTests/fast/reflections/reflection-overflow-scroll-expected.txt b/LayoutTests/fast/reflections/reflection-overflow-scroll-expected.txt
deleted file mode 100644 (file)
index 3437d6a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-Check if the size of reflected images are considered as overflow size. See this bug for detail: https://bugs.webkit.org/show_bug.cgi?id=27979.
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS element.scrollLeft is 150
-PASS element.scrollTop is 80
-PASS element.scrollLeft is 150
-PASS element.scrollTop is 80
-PASS element.scrollLeft is 150
-PASS element.scrollTop is 80
-PASS successfullyParsed is true
-
-TEST COMPLETE
-
diff --git a/LayoutTests/fast/reflections/reflection-overflow-scroll.html b/LayoutTests/fast/reflections/reflection-overflow-scroll.html
deleted file mode 100644 (file)
index 51ff1a9..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<link rel="stylesheet" href="resources/js-test-style.css">
-<script src="../js/resources/js-test-pre.js"></script>
-</head>
-<body>
-<p id="description"></p>
-<div id="console"></div>
-
-<div id="main">
-
-<p>
-There should be horizontal scroll bar.
-<div id="horizontal" style="overflow-x:scroll; width:150px;">
-<div style="-webkit-box-reflect:right; width:150px;">
-Madam, I am Adam.
-</div>
-</div>
-
-<p>
-Also, there should be vertical scroll bar.
-<div id="vertical" style="overflow-y:scroll; width:150px; height:80px;">
-<div style="-webkit-box-reflect:below; height:80px;">
-Madam,<br>
-I<br>
-am<br>
-Adam.
-</div>
-</div>
-
-<p>
-With flexbox. There should be horizontal scroll bar.
-<div id="horizontal_flex" style="overflow-x:scroll; width:150px;">
-<div style="display:-webkit-box; -webkit-box-reflect:right; width:150px;">
-Madam, I am Adam.
-</div>
-</div>
-
-<p>
-With flexbox. There should be vertical scroll bar.
-<div id="vertical_flex" style="overflow-y:scroll; width:150px; height:80px;">
-<div style="display:-webkit-box; -webkit-box-reflect:below; height:80px;">
-Madam,<br>
-I<br>
-am<br>
-Adam.
-</div>
-</div>
-
-<p>
-With table. There should be horizontal scroll bar.
-<div id="horizontal_table" style="overflow-x:scroll; width:150px;">
-<table style="-webkit-box-reflect:right; width:150px;">
-<tr><td>
-Madam, I am Adam.
-</tr></td>
-</table>
-</div>
-
-<p>
-With table. There should be vertical scroll bar.
-<div id="vertical_table" style="overflow-y:scroll; width:150px; height:80px;">
-<table style="-webkit-box-reflect:below; height:80px;">
-<tr><td>
-Madam,<br>
-I<br>
-am<br>
-Adam.
-</tr></td>
-</table>
-</div>
-
-</div>
-
-<script src="resources/reflection-overflow-scroll.js"></script>
-<script src="../js/resources/js-test-post.js"></script>
-
-</body>
-</html>
diff --git a/LayoutTests/fast/reflections/transparent-reflected-sublayers.html b/LayoutTests/fast/reflections/transparent-reflected-sublayers.html
new file mode 100644 (file)
index 0000000..96b0ca2
--- /dev/null
@@ -0,0 +1,11 @@
+<head>
+<style>
+div { width: 100px; height:100px; position: absolute; background-color: green }
+</style>
+</head>
+<body>
+You should see four green squares in a vertical line below.
+<div style="top:160px; -webkit-box-reflect: below 20px; opacity:0.5">
+<div style="top:240px;"></div>
+</div>
index ad2ae55..40fc00d 100644 (file)
@@ -33,25 +33,25 @@ layer at (214,256) size 142x142 clip at (215,257) size 140x140
   RenderBlock {DIV} at (206,206) size 142x142 [border: (1px solid #000000)]
 layer at (50,92) size 100x150 backgroundClip at (29,71) size 140x140 clip at (29,71) size 140x140 outlineClip at (29,71) size 140x140
   RenderBlock {DIV} at (11,11) size 100x150 [bgcolor=#808080]
-layer at (225,81) size 122x161
+layer at (225,81) size 122x122
   RenderBlock (positioned) {DIV} at (225,81) size 122x122 [border: (1px solid #0000FF)]
 layer at (236,92) size 100x150
   RenderBlock {DIV} at (11,11) size 100x150 [bgcolor=#808080]
 layer at (400,70) size 142x142 clip at (401,71) size 140x140 scrollHeight 171
   RenderBlock (relative positioned) {DIV} at (392,20) size 142x142 [border: (1px solid #000000)]
-layer at (411,81) size 122x161 backgroundClip at (401,71) size 140x140 clip at (401,71) size 140x140 outlineClip at (401,71) size 140x140
+layer at (411,81) size 122x122
   RenderBlock (positioned) {DIV} at (11,11) size 122x122 [border: (1px solid #0000FF)]
 layer at (422,92) size 100x150 backgroundClip at (401,71) size 140x140 clip at (401,71) size 140x140 outlineClip at (401,71) size 140x140
   RenderBlock {DIV} at (11,11) size 100x150 [bgcolor=#808080]
 layer at (50,278) size 100x150 backgroundClip at (29,257) size 140x140 clip at (29,257) size 140x140 outlineClip at (29,257) size 140x140
   RenderBlock {DIV} at (11,11) size 100x150 [bgcolor=#808080]
-layer at (225,267) size 122x161
+layer at (225,267) size 122x122
   RenderBlock (positioned) {DIV} at (225,267) size 122x122 [border: (1px solid #0000FF)]
 layer at (236,278) size 100x150
   RenderBlock {DIV} at (11,11) size 100x150 [bgcolor=#808080]
 layer at (400,256) size 142x142 clip at (401,257) size 140x140 scrollHeight 171
   RenderBlock (relative positioned) {DIV} at (392,206) size 142x142 [border: (1px solid #000000)]
-layer at (411,267) size 122x161 backgroundClip at (401,257) size 140x140 clip at (401,257) size 140x140 outlineClip at (401,257) size 140x140
+layer at (411,267) size 122x122
   RenderBlock (positioned) {DIV} at (11,11) size 122x122 [border: (1px solid #0000FF)]
 layer at (422,278) size 100x150 backgroundClip at (401,257) size 140x140 clip at (401,257) size 140x140 outlineClip at (401,257) size 140x140
   RenderBlock {DIV} at (11,11) size 100x150 [bgcolor=#808080]
index e6fd0d7..2f83929 100644 (file)
@@ -3,13 +3,13 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x460
   RenderBlock {HTML} at (0,0) size 800x460
     RenderBody {BODY} at (8,20) size 784x320
-layer at (28,20) size 200x202
+layer at (28,20) size 200x100
   RenderBlock {DIV} at (20,0) size 200x100 [bgcolor=#808080]
     RenderText {#text} at (0,0) size 109x18
       text run at (0,0) width 109: "Here is some text"
 layer at (8,240) size 784x100
   RenderBlock {DIV} at (0,220) size 784x100
-layer at (28,240) size 200x202
+layer at (28,240) size 200x100
   RenderBlock {DIV} at (20,0) size 200x100 [bgcolor=#808080]
     RenderText {#text} at (0,0) size 109x18
       text run at (0,0) width 109: "Here is some text"
index 507dae0..95923b0 100644 (file)
@@ -17,7 +17,7 @@ layer at (0,0) size 800x600
           text run at (0,0) width 31: "hello"
       RenderBlock {DIV} at (0,18) size 784x56 [border: (2px solid #FF0000)]
         RenderInline {SPAN} at (0,0) size 0x18
-          RenderInline {FONT} at (0,0) size 0x28
+          RenderInline {FONT} at (0,0) size 0x37
             RenderInline {SPAN} at (0,0) size 0x28
               RenderBR {BR} at (14,14) size 0x28
       RenderBlock (anonymous) at (0,74) size 784x0
index 2bc82e5..29ab666 100644 (file)
@@ -17,7 +17,7 @@ layer at (0,0) size 800x600
             text run at (3,3) width 49: "hello"
         RenderBlock (anonymous) at (14,48) size 756x0
       RenderBlock {DIV} at (0,62) size 784x34 [border: (3px solid #0000FF)]
-        RenderInline {FONT} at (0,0) size 0x28
+        RenderInline {FONT} at (0,0) size 0x37
           RenderInline {SPAN} at (0,0) size 0x28
             RenderBR {BR} at (3,3) size 0x28
 caret: position 0 of child 0 {BR} of child 0 {SPAN} of child 0 {FONT} of child 2 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index aeb936e..510acfb 100644 (file)
@@ -29,7 +29,7 @@ layer at (0,0) size 800x600
           text run at (0,0) width 253: "This tests copy/paste of select elements. "
           text run at (253,0) width 220: "All the options should be included."
       RenderBlock {DIV} at (0,34) size 784x13
-        RenderInline {FONT} at (0,0) size 0x13
+        RenderInline {FONT} at (0,0) size 0x18
           RenderInline {SPAN} at (0,0) size 0x13 [bgcolor=#FFFFFF]
             RenderBR {BR} at (0,0) size 0x13
       RenderBlock {DIV} at (0,47) size 784x22
index ef37679..42f6594 100644 (file)
@@ -6,7 +6,7 @@ layer at (0,0) size 785x585
       RenderText {#text} at (0,0) size 762x36
         text run at (0,0) width 762: "Document canvas should be big enough to fit both blue and red (relative positioned) rectangles (ie. have scrollbars if they"
         text run at (0,18) width 131: "don't fit to the view) "
-layer at (8,44) size 504x506
+layer at (8,44) size 504x504
   RenderBlock (positioned) {DIV} at (8,44) size 504x504 [border: (2px solid #0000FF)]
 layer at (310,346) size 504x504
   RenderBlock (relative positioned) {DIV} at (2,2) size 504x504 [border: (2px solid #FF0000)]
index 81793bf..45bf246 100644 (file)
@@ -1,6 +1,6 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
-layer at (0,0) size 800x50
+layer at (0,0) size 800x34
   RenderBlock {HTML} at (0,0) size 800x24 [bgcolor=#00FF00]
     RenderBody {BODY} at (8,16) size 784x0 [bgcolor=#FF0000]
       RenderBlock {P} at (0,0) size 784x18
index cf56fd9..43742c5 100644 (file)
@@ -1,6 +1,6 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
-layer at (0,0) size 800x50
+layer at (0,0) size 800x34
   RenderBlock {html} at (0,0) size 800x24 [bgcolor=#00FF00]
     RenderBody {body} at (8,16) size 784x0 [bgcolor=#FF0000]
       RenderBlock {p} at (0,0) size 784x18
index 19485d2..1d2f15f 100644 (file)
@@ -1,6 +1,6 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
-layer at (0,0) size 800x50
+layer at (0,0) size 800x34
   RenderBlock {HTML} at (0,0) size 800x24
     RenderBody {BODY} at (8,16) size 784x0
       RenderBlock {P} at (0,0) size 784x18
index 8ec8461..8aed703 100644 (file)
@@ -1,6 +1,6 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
-layer at (0,0) size 800x50
+layer at (0,0) size 800x34
   RenderBlock {html} at (0,0) size 800x24
     RenderBody {body} at (8,16) size 784x0
       RenderBlock {p} at (0,0) size 784x18
index e4a4dd6..8f2a397 100644 (file)
@@ -1,6 +1,6 @@
 layer at (0,0) size 785x585
   RenderView at (0,0) size 785x585
-layer at (0,0) size 785x249
+layer at (0,0) size 785x233
   RenderBlock {HTML} at (0,0) size 785x178
     RenderBody {BODY} at (8,8) size 162x162 [color=#000080] [border: (1px solid #000080)]
       RenderBlock {P} at (1,17) size 160x72
index 55b5fea..a92fdcc 100644 (file)
@@ -1,6 +1,6 @@
 layer at (0,0) size 785x585
   RenderView at (0,0) size 785x585
-layer at (0,0) size 785x249
+layer at (0,0) size 785x233
   RenderBlock {html} at (0,0) size 785x178
     RenderBody {body} at (8,8) size 162x162 [color=#000080] [border: (1px solid #000080)]
       RenderBlock {p} at (1,17) size 160x72
index cd0c12f..efa7d7e 100644 (file)
@@ -1,6 +1,6 @@
 layer at (0,0) size 785x585
   RenderView at (0,0) size 785x585
-layer at (0,0) size 785x465
+layer at (0,0) size 785x449
   RenderBlock {html} at (0,0) size 785x340
     RenderBody {body} at (8,170) size 162x162 [color=#000080] [border: (1px solid #000080)]
       RenderBlock {p} at (1,17) size 160x126
index 380e5af..675cbbd 100644 (file)
@@ -1,6 +1,6 @@
 layer at (0,0) size 785x585
   RenderView at (0,0) size 785x585
-layer at (0,0) size 785x465
+layer at (0,0) size 785x449
   RenderBlock {HTML} at (0,0) size 785x340
     RenderBody {BODY} at (8,170) size 162x162 [color=#000080] [border: (1px solid #000080)]
       RenderBlock {P} at (1,17) size 160x126
index cd0c12f..efa7d7e 100644 (file)
@@ -1,6 +1,6 @@
 layer at (0,0) size 785x585
   RenderView at (0,0) size 785x585
-layer at (0,0) size 785x465
+layer at (0,0) size 785x449
   RenderBlock {html} at (0,0) size 785x340
     RenderBody {body} at (8,170) size 162x162 [color=#000080] [border: (1px solid #000080)]
       RenderBlock {p} at (1,17) size 160x126
index 7747372..2a16ce0 100644 (file)
@@ -42,7 +42,7 @@ layer at (0,0) size 800x600
           RenderText {#text} at (0,0) size 0x0
         RenderFieldSet {FIELDSET} at (2,347) size 128x39 [border: (2px groove #C0C0C0)]
           RenderBlock {LEGEND} at (14,0) size 156x12 [border: (1px solid #0000FF)]
-layer at (458,106) size 186x49
+layer at (458,106) size 186x40
   RenderBlock (relative positioned) {DIV} at (0,98) size 100x40
     RenderFieldSet {FIELDSET} at (2,0) size 184x39 [border: (2px groove #C0C0C0)]
       RenderBlock {LEGEND} at (14,0) size 156x12 [border: (1px solid #0000FF)]
index c05fabf..5efe150 100644 (file)
@@ -1,6 +1,6 @@
-layer at (0,0) size 785x681
+layer at (0,0) size 785x671
   RenderView at (0,0) size 785x600
-layer at (0,0) size 785x681
+layer at (0,0) size 785x671
   RenderBlock {HTML} at (0,0) size 785x658
     RenderBody {BODY} at (8,8) size 769x634
       RenderBlock (anonymous) at (0,0) size 769x150
index 3eb7806..d78197d 100644 (file)
@@ -7,5 +7,5 @@ layer at (0,0) size 800x600
         RenderText {#text} at (0,0) size 361x18
           text run at (0,0) width 361: "There should not be any non-white pixels inside this box:"
       RenderBlock {DIV} at (0,34) size 206x206 [border: (3px solid #000000)]
-layer at (61,95) size 120x120
+layer at (61,95) size 100x100
   RenderBlock {DIV} at (53,53) size 100x100
index bbf1ce8..3f0c743 100644 (file)
@@ -13,7 +13,7 @@ layer at (0,0) size 800x70
       RenderText {#text} at (0,0) size 0x0
 layer at (8,62) size 100x100
   RenderBlock (positioned) {DIV} at (8,62) size 100x100
-layer at (100,100) size 200x200
+layer at (100,100) size 100x100
   RenderBlock (positioned) {DIV} at (100,100) size 100x100
 layer at (200,200) size 100x100
   RenderBlock {DIV} at (100,100) size 100x100 [bgcolor=#008000]
index e7e1c8d..5474365 100644 (file)
@@ -9,6 +9,6 @@ layer at (0,0) size 800x52
         text run at (541,0) width 239: "This test is checking to make sure clip"
         text run at (0,18) width 192: "is applying to all descendants. "
       RenderText {#text} at (0,0) size 0x0
-layer at (8,44) size 200x400 backgroundClip at (8,44) size 100x100 clip at (8,44) size 100x100 outlineClip at (8,44) size 100x100
+layer at (8,44) size 200x200 backgroundClip at (8,44) size 100x100 clip at (8,44) size 100x100 outlineClip at (8,44) size 100x100
   RenderBlock (positioned) {DIV} at (8,44) size 100x100 [bgcolor=#008000]
     RenderBlock {DIV} at (100,100) size 100x100 [bgcolor=#FF0000]
index e7e1c8d..5474365 100644 (file)
@@ -9,6 +9,6 @@ layer at (0,0) size 800x52
         text run at (541,0) width 239: "This test is checking to make sure clip"
         text run at (0,18) width 192: "is applying to all descendants. "
       RenderText {#text} at (0,0) size 0x0
-layer at (8,44) size 200x400 backgroundClip at (8,44) size 100x100 clip at (8,44) size 100x100 outlineClip at (8,44) size 100x100
+layer at (8,44) size 200x200 backgroundClip at (8,44) size 100x100 clip at (8,44) size 100x100 outlineClip at (8,44) size 100x100
   RenderBlock (positioned) {DIV} at (8,44) size 100x100 [bgcolor=#008000]
     RenderBlock {DIV} at (100,100) size 100x100 [bgcolor=#FF0000]
index f56dd96..b01bd7f 100644 (file)
@@ -4,7 +4,7 @@ layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
       RenderBlock {DIV} at (0,0) size 784x64
-        RenderInline {A} at (0,0) size 52x14
+        RenderInline {A} at (0,0) size 52x18
           RenderImage {IMG} at (0,0) size 52x64
           RenderBR {BR} at (52,64) size 0x0
         RenderText {#text} at (0,0) size 0x0
index 8850553..81757c5 100644 (file)
@@ -1,6 +1,6 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
-layer at (0,0) size 768x600
+layer at (0,0) size 768x592
   RenderBlock {HTML} at (0,0) size 768x568
     RenderBody {BODY} at (8,8) size 752x584
       RenderText {#text} at (0,0) size 484x18
index b5b972b..2f74395 100644 (file)
@@ -4,9 +4,9 @@ layer at (0,0) size 785x1103
   RenderBlock {HTML} at (0,0) size 785x1103
     RenderBody {BODY} at (8,8) size 769x1082 [bgcolor=#EEEEEE]
       RenderBlock (anonymous) at (0,0) size 769x20
-        RenderInline {SPAN} at (0,0) size 191x12
+        RenderInline {SPAN} at (0,0) size 191x15
           RenderText {#text} at (0,0) size 0x0
-          RenderInline {SPAN} at (0,0) size 191x12
+          RenderInline {SPAN} at (0,0) size 191x15
             RenderText {#text} at (0,0) size 0x0
             RenderTable {TABLE} at (0,0) size 191x20
               RenderTableSection {TBODY} at (0,0) size 191x20
@@ -59,8 +59,8 @@ layer at (0,0) size 785x1103
       RenderBlock (anonymous) at (0,164) size 769x2
         RenderBlock {HR} at (0,0) size 769x2 [border: (1px inset #000000)]
       RenderBlock (anonymous) at (0,172) size 769x40
-        RenderInline {SPAN} at (0,0) size 126x38
-          RenderInline {SPAN} at (0,0) size 126x38
+        RenderInline {SPAN} at (0,0) size 126x41
+          RenderInline {SPAN} at (0,0) size 126x41
             RenderText {#text} at (0,0) size 0x0
             RenderInline {SPAN} at (0,0) size 126x17
               RenderText {#text} at (0,0) size 0x0
@@ -465,8 +465,8 @@ layer at (23,99) size 592x38
       text run at (72,52) width 104: "DEBI STANGEL, "
       text run at (176,52) width 117: "119 GLEN COURT, "
       text run at (293,52) width 136: "DANVILLE CA Z/94526"
-layer at (23,180) size 20x12
-  RenderInline (relative positioned) {SPAN} at (0,0) size 20x12
+layer at (23,180) size 20x15
+  RenderInline (relative positioned) {SPAN} at (0,0) size 20x15
     RenderText {#text} at (0,0) size 0x0
     RenderImage {IMG} at (0,20) size 20x20
     RenderText {#text} at (0,0) size 0x0
index b5b972b..2f74395 100644 (file)
@@ -4,9 +4,9 @@ layer at (0,0) size 785x1103
   RenderBlock {HTML} at (0,0) size 785x1103
     RenderBody {BODY} at (8,8) size 769x1082 [bgcolor=#EEEEEE]
       RenderBlock (anonymous) at (0,0) size 769x20
-        RenderInline {SPAN} at (0,0) size 191x12
+        RenderInline {SPAN} at (0,0) size 191x15
           RenderText {#text} at (0,0) size 0x0
-          RenderInline {SPAN} at (0,0) size 191x12
+          RenderInline {SPAN} at (0,0) size 191x15
             RenderText {#text} at (0,0) size 0x0
             RenderTable {TABLE} at (0,0) size 191x20
               RenderTableSection {TBODY} at (0,0) size 191x20
@@ -59,8 +59,8 @@ layer at (0,0) size 785x1103
       RenderBlock (anonymous) at (0,164) size 769x2
         RenderBlock {HR} at (0,0) size 769x2 [border: (1px inset #000000)]
       RenderBlock (anonymous) at (0,172) size 769x40
-        RenderInline {SPAN} at (0,0) size 126x38
-          RenderInline {SPAN} at (0,0) size 126x38
+        RenderInline {SPAN} at (0,0) size 126x41
+          RenderInline {SPAN} at (0,0) size 126x41
             RenderText {#text} at (0,0) size 0x0
             RenderInline {SPAN} at (0,0) size 126x17
               RenderText {#text} at (0,0) size 0x0
@@ -465,8 +465,8 @@ layer at (23,99) size 592x38
       text run at (72,52) width 104: "DEBI STANGEL, "
       text run at (176,52) width 117: "119 GLEN COURT, "
       text run at (293,52) width 136: "DANVILLE CA Z/94526"
-layer at (23,180) size 20x12
-  RenderInline (relative positioned) {SPAN} at (0,0) size 20x12
+layer at (23,180) size 20x15
+  RenderInline (relative positioned) {SPAN} at (0,0) size 20x15
     RenderText {#text} at (0,0) size 0x0
     RenderImage {IMG} at (0,20) size 20x20
     RenderText {#text} at (0,0) size 0x0
index b11199c..41cf98f 100644 (file)
@@ -17,14 +17,14 @@ layer at (0,0) size 785x630
           RenderTableRow {TR} at (0,2) size 172x24
             RenderTableCell {TD} at (2,2) size 58x24 [r=0 c=0 rs=1 cs=1]
               RenderBlock {DIV} at (1,1) size 56x22 [border: (2px solid #0000FF)]
-                RenderInline {FONT} at (0,0) size 52x18
+                RenderInline {FONT} at (0,0) size 52x28
                   RenderButton {INPUT} at (2,2) size 52x18 [bgcolor=#C0C0C0]
                     RenderBlock (anonymous) at (8,2) size 36x13
                       RenderText at (0,0) size 36x13
                         text run at (0,0) width 36: "button"
             RenderTableCell {TD} at (62,2) size 68x24 [r=0 c=1 rs=1 cs=1]
               RenderBlock {DIV} at (1,1) size 66x22 [border: (2px solid #0000FF)]
-                RenderInline {FONT} at (0,0) size 62x18
+                RenderInline {FONT} at (0,0) size 62x28
                   RenderMenuList {SELECT} at (2,2) size 62x18 [bgcolor=#FFFFFF]
                     RenderBlock (anonymous) at (0,0) size 62x18
                       RenderText at (8,2) size 31x13
@@ -33,13 +33,13 @@ layer at (0,0) size 785x630
                 RenderInline {FONT} at (0,0) size 0x0
             RenderTableCell {TD} at (132,4) size 18x19 [r=0 c=2 rs=1 cs=1]
               RenderBlock {DIV} at (1,1) size 16x17 [border: (2px solid #0000FF)]
-                RenderInline {FONT} at (0,0) size 12x13
+                RenderInline {FONT} at (0,0) size 12x28
                   RenderBlock {INPUT} at (2,2) size 12x13
               RenderBlock (anonymous) at (1,18) size 16x0
                 RenderInline {FONT} at (0,0) size 0x0
             RenderTableCell {TD} at (152,5) size 18x18 [r=0 c=3 rs=1 cs=1]
               RenderBlock {DIV} at (1,1) size 16x16 [border: (2px solid #0000FF)]
-                RenderInline {FONT} at (0,0) size 12x12
+                RenderInline {FONT} at (0,0) size 12x28
                   RenderBlock {INPUT} at (2,2) size 12x12
               RenderBlock (anonymous) at (1,17) size 16x0
                 RenderInline {FONT} at (0,0) size 0x0
@@ -83,11 +83,11 @@ layer at (0,0) size 785x630
                         text run at (8,2) width 31: "menu"
             RenderTableCell {TD} at (132,4) size 18x19 [r=0 c=2 rs=1 cs=1]
               RenderBlock {DIV} at (1,1) size 16x17 [border: (2px solid #0000FF)]
-                RenderInline {FONT} at (0,0) size 12x12
+                RenderInline {FONT} at (0,0) size 12x13
                   RenderBlock {INPUT} at (2,2) size 12x13
             RenderTableCell {TD} at (152,5) size 18x18 [r=0 c=3 rs=1 cs=1]
               RenderBlock {DIV} at (1,1) size 16x16 [border: (2px solid #0000FF)]
-                RenderInline {FONT} at (0,0) size 12x12
+                RenderInline {FONT} at (0,0) size 12x13
                   RenderBlock {INPUT} at (2,2) size 12x12
       RenderTable {TABLE} at (0,226) size 512x67
         RenderTableSection {TBODY} at (0,0) size 512x67
index 7dc6fc1..6c65cd5 100644 (file)
@@ -3,7 +3,7 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
-      RenderInline {MAP} at (0,0) size 564x14
+      RenderInline {MAP} at (0,0) size 564x18
         RenderImage {IMG} at (0,0) size 564x294
       RenderText {#text} at (0,0) size 0x0
       RenderText {#text} at (0,0) size 0x0
index 30fac51..2126d4a 100644 (file)
@@ -17,7 +17,7 @@ layer at (0,0) size 800x600
       RenderBlock (anonymous) at (0,40) size 784x62
         RenderText {#text} at (0,0) size 729x18
           text run at (0,0) width 729: "The two marquees below should be on separate lines, since marquees fill the width of a containing block by default."
-        RenderInline {SPAN} at (0,0) size 784x36
+        RenderInline {SPAN} at (0,0) size 784x40
           RenderText {#text} at (0,0) size 0x0
           RenderText {#text} at (0,0) size 0x0
           RenderText {#text} at (0,0) size 0x0
index 7041adc..2f48204 100644 (file)
@@ -50,12 +50,12 @@ layer at (0,0) size 800x600
         RenderText {#text} at (0,0) size 295x18
           text run at (0,0) width 295: "There should not be a red block above this text"
       RenderBlock {DIV} at (0,260) size 784x1 [bgcolor=#FF0000] [border: (1px solid #000000) none]
-        RenderInline {SPAN} at (0,0) size 0x0
+        RenderInline {SPAN} at (0,0) size 0x18
       RenderBlock {DIV} at (0,261) size 784x18
         RenderText {#text} at (0,0) size 295x18
           text run at (0,0) width 295: "There should not be a red block above this text"
       RenderBlock {DIV} at (0,279) size 784x1 [bgcolor=#FF0000] [border: (1px solid #000000) none]
-        RenderInline {SPAN} at (0,0) size 0x0
+        RenderInline {SPAN} at (0,0) size 0x18
       RenderBlock {DIV} at (0,280) size 784x18
         RenderText {#text} at (0,0) size 295x18
           text run at (0,0) width 295: "There should not be a red block above this text"
index 2049ce7..2a31570 100644 (file)
@@ -8,7 +8,7 @@ layer at (0,0) size 800x600
           RenderText {#text} at (243,0) size 298x18
             text run at (243,0) width 298: "You should see a 100x100 green Image below."
       RenderBlock (anonymous) at (0,18) size 784x100
-        RenderInline {FONT} at (0,0) size 100x14
+        RenderInline {FONT} at (0,0) size 100x18
           RenderText {#text} at (0,0) size 0x0
           RenderImage {IMG} at (0,0) size 100x100 [bgcolor=#008000]
           RenderText {#text} at (0,0) size 0x0
index 0d48e17..3a7fb78 100644 (file)
@@ -19,5 +19,5 @@ layer at (0,0) size 800x320
       RenderBlock {DIV} at (0,278) size 784x18
         RenderText {#text} at (0,0) size 169x18
           text run at (0,0) width 169: "Found link node, so PASS"
-layer at (18,60) size 100x200
+layer at (18,60) size 100x100
   RenderBlock {DIV} at (10,10) size 100x100 [bgcolor=#808080]
index 340fb12..2023dd2 100644 (file)
@@ -7,7 +7,7 @@ layer at (0,0) size 800x600
         RenderBlock {UL} at (0,0) size 190x24
           RenderListItem {LI} at (40,0) size 150x24
             RenderListMarker at (0,0) size 7x18: bullet
-            RenderInline {A} at (0,0) size 197x14
+            RenderInline {A} at (0,0) size 197x18
               RenderText {#text} at (0,0) size 0x0
               RenderImage {IMG} at (0,0) size 197x20
             RenderText {#text} at (0,0) size 0x0
index cd1819d..69d0dbb 100644 (file)
@@ -13,7 +13,7 @@ layer at (0,0) size 785x1188
         RenderPartObject {IFRAME} at (0,0) size 304x154 [border: (2px inset #000000)]
           layer at (0,0) size 308x316
             RenderView at (0,0) size 285x135
-          layer at (0,0) size 308x316
+          layer at (0,0) size 285x316
             RenderBlock {HTML} at (0,0) size 285x316
               RenderBody {BODY} at (8,8) size 269x300
           layer at (8,8) size 300x300 clip at (8,8) size 285x300 scrollY 543 scrollHeight 1268
index 14cfd35..0b9a04f 100644 (file)
@@ -13,11 +13,11 @@ layer at (0,0) size 1357x613
           text run at (335,579) width 4: " "
         RenderText {#text} at (0,0) size 0x0
       RenderText {#text} at (0,0) size 0x0
-layer at (8,9) size 671x296
+layer at (8,9) size 335x296
   RenderImage {IMG} at (0,0) size 335x296
 layer at (344,305) size 335x296
   RenderImage {IMG} at (336,296) size 335x296
 layer at (683,305) size 335x296
   RenderImage {IMG} at (0,297) size 335x296
-layer at (1022,8) size 335x593
+layer at (1022,8) size 335x296
   RenderImage {IMG} at (339,0) size 335x296
index bc059d0..c395dfc 100644 (file)
Binary files a/LayoutTests/platform/mac/fast/reflections/reflection-masks-expected.png and b/LayoutTests/platform/mac/fast/reflections/reflection-masks-expected.png differ
index 0373bdf..96d6f58 100644 (file)
@@ -1,12 +1,12 @@
-layer at (0,0) size 785x602
-  RenderView at (0,0) size 785x600
-layer at (0,0) size 785x602
-  RenderBlock {HTML} at (0,0) size 785x600
-    RenderBody {BODY} at (8,8) size 769x584
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
       RenderText {#text} at (335,282) size 4x18
         text run at (335,282) width 4: " "
       RenderText {#text} at (0,0) size 0x0
-layer at (8,8) size 335x594
+layer at (8,8) size 335x296
   RenderImage {IMG} at (0,0) size 335x296
-layer at (347,8) size 335x594
+layer at (347,8) size 335x296
   RenderImage {IMG} at (339,0) size 335x296
index b36364c..376dcb9 100644 (file)
Binary files a/LayoutTests/platform/mac/fast/reflections/reflection-masks-opacity-expected.png and b/LayoutTests/platform/mac/fast/reflections/reflection-masks-opacity-expected.png differ
index cdb00e1..a25fa7b 100644 (file)
@@ -1,14 +1,14 @@
-layer at (0,0) size 785x602
-  RenderView at (0,0) size 785x600
-layer at (0,0) size 785x602
-  RenderBlock {HTML} at (0,0) size 785x600
-    RenderBody {BODY} at (8,8) size 769x584
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
       RenderText {#text} at (335,282) size 4x18
         text run at (335,282) width 4: " "
-layer at (8,8) size 335x594
+layer at (8,8) size 335x296
   RenderBlock {DIV} at (0,0) size 335x296
     RenderText {#text} at (0,0) size 0x0
-layer at (8,8) size 335x594
+layer at (8,8) size 335x296
   RenderImage {IMG} at (0,0) size 335x296
-layer at (347,8) size 335x594
+layer at (347,8) size 335x296
   RenderImage {IMG} at (339,0) size 335x296
index 3d2be81..37915a8 100644 (file)
@@ -7,7 +7,7 @@ layer at (0,0) size 800x600
         RenderText {#text} at (0,0) size 769x36
           text run at (0,0) width 769: "The two lime squares below should look like mirror images (with a blue rectangle filling half the left square on the left and"
           text run at (0,18) width 210: "half the right square on the right)."
-layer at (8,44) size 410x200
+layer at (8,44) size 200x200
   RenderBlock {DIV} at (0,36) size 200x200 [bgcolor=#00FF00]
-layer at (8,44) size 100x200
+layer at (8,44) size 100x100
   RenderBlock {DIV} at (0,0) size 100x100 [bgcolor=#0000FF]
index eb1baf2..d27f2eb 100644 (file)
Binary files a/LayoutTests/platform/mac/fast/reflections/reflection-overflow-hidden-expected.png and b/LayoutTests/platform/mac/fast/reflections/reflection-overflow-hidden-expected.png differ
index e59516b..1115a3b 100644 (file)
@@ -16,7 +16,7 @@ layer at (0,0) size 800x136 layerType: foreground only
           text run at (305,0) width 61: ". Test for "
           text run at (366,0) width 331: "reflection painting on overflow:hidden element. You"
           text run at (0,18) width 188: "should not see any red below."
-layer at (50,100) size 400x410
+layer at (50,100) size 400x200
   RenderBlock (positioned) {DIV} at (50,100) size 400x200
 layer at (50,100) size 400x200
   RenderBlock (relative positioned) {DIV} at (0,0) size 400x200
diff --git a/LayoutTests/platform/mac/fast/reflections/transparent-reflected-sublayers-expected.checksum b/LayoutTests/platform/mac/fast/reflections/transparent-reflected-sublayers-expected.checksum
new file mode 100644 (file)
index 0000000..45358ab
--- /dev/null
@@ -0,0 +1 @@
+0608d5281e143aa56ba6ffd4da7b55d8
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/reflections/transparent-reflected-sublayers-expected.png b/LayoutTests/platform/mac/fast/reflections/transparent-reflected-sublayers-expected.png
new file mode 100644 (file)
index 0000000..d5ba8bb
Binary files /dev/null and b/LayoutTests/platform/mac/fast/reflections/transparent-reflected-sublayers-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/reflections/transparent-reflected-sublayers-expected.txt b/LayoutTests/platform/mac/fast/reflections/transparent-reflected-sublayers-expected.txt
new file mode 100644 (file)
index 0000000..a843ed0
--- /dev/null
@@ -0,0 +1,12 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderText {#text} at (0,0) size 369x18
+        text run at (0,0) width 369: "You should see four green squares in a vertical line below."
+      RenderText {#text} at (0,0) size 0x0
+layer at (8,160) size 100x100
+  RenderBlock (positioned) {DIV} at (8,160) size 100x100 [bgcolor=#008000]
+layer at (8,400) size 100x100
+  RenderBlock (positioned) {DIV} at (0,240) size 100x100
index 3b0884e..f5346ba 100644 (file)
@@ -101,39 +101,39 @@ layer at (18,198) size 40x40
   RenderBlock {DIV} at (10,190) size 40x40 [bgcolor=#FFFF77]
 layer at (139,68) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,60) size 60x60
-layer at (149,78) size 40x45
+layer at (149,78) size 40x40
   RenderBlock (positioned) {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
 layer at (139,128) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,120) size 60x60
-layer at (149,138) size 40x45 backgroundClip at (144,178) size 5x5 clip at (144,178) size 5x5 outlineClip at (144,178) size 5x5
+layer at (149,138) size 40x40 backgroundClip at (144,178) size 5x5 clip at (144,178) size 5x5 outlineClip at (144,178) size 5x5
   RenderBlock (positioned) {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
-layer at (149,198) size 40x45
+layer at (149,198) size 40x40
   RenderBlock {DIV} at (10,190) size 40x40 [bgcolor=#FFFF77]
 layer at (270,68) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,60) size 60x60
-layer at (280,78) size 45x45
+layer at (280,78) size 40x40
   RenderBlock (positioned) {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
 layer at (270,128) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,120) size 60x60
-layer at (280,138) size 45x45 backgroundClip at (320,178) size 5x5 clip at (320,178) size 5x5 outlineClip at (320,178) size 5x5
+layer at (280,138) size 40x40 backgroundClip at (320,178) size 5x5 clip at (320,178) size 5x5 outlineClip at (320,178) size 5x5
   RenderBlock (positioned) {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
-layer at (280,198) size 45x45
+layer at (280,198) size 40x40
   RenderBlock {DIV} at (10,190) size 40x40 [bgcolor=#FFFF77]
 layer at (401,68) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,60) size 60x60
-layer at (411,78) size 45x40
+layer at (411,78) size 40x40
   RenderBlock (positioned) {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
 layer at (401,128) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,120) size 60x60
-layer at (411,138) size 45x40 backgroundClip at (451,133) size 5x5 clip at (451,133) size 5x5 outlineClip at (451,133) size 5x5
+layer at (411,138) size 40x40 backgroundClip at (451,133) size 5x5 clip at (451,133) size 5x5 outlineClip at (451,133) size 5x5
   RenderBlock (positioned) {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
-layer at (411,198) size 45x40
+layer at (411,198) size 40x40
   RenderBlock {DIV} at (10,190) size 40x40 [bgcolor=#FFFF77]
 layer at (532,68) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,60) size 60x60
-layer at (542,78) size 45x45
+layer at (542,78) size 40x40
   RenderBlock (positioned) {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
 layer at (532,128) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,120) size 60x60
-layer at (542,198) size 45x45
+layer at (542,198) size 40x40
   RenderBlock {DIV} at (10,190) size 40x40 [bgcolor=#FFFF77]
index 3b0884e..f5346ba 100644 (file)
@@ -101,39 +101,39 @@ layer at (18,198) size 40x40
   RenderBlock {DIV} at (10,190) size 40x40 [bgcolor=#FFFF77]
 layer at (139,68) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,60) size 60x60
-layer at (149,78) size 40x45
+layer at (149,78) size 40x40
   RenderBlock (positioned) {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
 layer at (139,128) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,120) size 60x60
-layer at (149,138) size 40x45 backgroundClip at (144,178) size 5x5 clip at (144,178) size 5x5 outlineClip at (144,178) size 5x5
+layer at (149,138) size 40x40 backgroundClip at (144,178) size 5x5 clip at (144,178) size 5x5 outlineClip at (144,178) size 5x5
   RenderBlock (positioned) {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
-layer at (149,198) size 40x45
+layer at (149,198) size 40x40
   RenderBlock {DIV} at (10,190) size 40x40 [bgcolor=#FFFF77]
 layer at (270,68) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,60) size 60x60
-layer at (280,78) size 45x45
+layer at (280,78) size 40x40
   RenderBlock (positioned) {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
 layer at (270,128) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,120) size 60x60
-layer at (280,138) size 45x45 backgroundClip at (320,178) size 5x5 clip at (320,178) size 5x5 outlineClip at (320,178) size 5x5
+layer at (280,138) size 40x40 backgroundClip at (320,178) size 5x5 clip at (320,178) size 5x5 outlineClip at (320,178) size 5x5
   RenderBlock (positioned) {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
-layer at (280,198) size 45x45
+layer at (280,198) size 40x40
   RenderBlock {DIV} at (10,190) size 40x40 [bgcolor=#FFFF77]
 layer at (401,68) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,60) size 60x60
-layer at (411,78) size 45x40
+layer at (411,78) size 40x40
   RenderBlock (positioned) {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
 layer at (401,128) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,120) size 60x60
-layer at (411,138) size 45x40 backgroundClip at (451,133) size 5x5 clip at (451,133) size 5x5 outlineClip at (451,133) size 5x5
+layer at (411,138) size 40x40 backgroundClip at (451,133) size 5x5 clip at (451,133) size 5x5 outlineClip at (451,133) size 5x5
   RenderBlock (positioned) {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
-layer at (411,198) size 45x40
+layer at (411,198) size 40x40
   RenderBlock {DIV} at (10,190) size 40x40 [bgcolor=#FFFF77]
 layer at (532,68) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,60) size 60x60
-layer at (542,78) size 45x45
+layer at (542,78) size 40x40
   RenderBlock (positioned) {DIV} at (10,10) size 40x40 [bgcolor=#FFFF77]
 layer at (532,128) size 60x60
   RenderBlock (relative positioned) {DIV} at (0,120) size 60x60
-layer at (542,198) size 45x45
+layer at (542,198) size 40x40
   RenderBlock {DIV} at (10,190) size 40x40 [bgcolor=#FFFF77]
index 13f258a..5821281 100644 (file)
@@ -18,14 +18,14 @@ layer at (218,240) size 150x100
         text run at (12,0) width 104: "The color of this"
         text run at (1,18) width 125: "text in the reflection"
         text run at (14,36) width 100: "should be green"
-layer at (368,240) size 310x100
+layer at (368,240) size 150x100
   RenderBlock (positioned) {DIV} at (360,120) size 150x100 [bgcolor=#808080] [border: (1px solid #000000)]
     RenderBlock {P} at (11,27) size 128x54 [color=#008000]
       RenderText {#text} at (12,0) size 125x54
         text run at (12,0) width 104: "The color of this"
         text run at (1,18) width 125: "text in the reflection"
         text run at (14,36) width 100: "should be green"
-layer at (293,350) size 150x210
+layer at (293,350) size 150x100
   RenderBlock (positioned) {DIV} at (285,230) size 150x100 [bgcolor=#808080] [border: (1px solid #000000)]
     RenderBlock {P} at (11,27) size 128x54 [color=#008000]
       RenderText {#text} at (12,0) size 125x54
index b50ba08..a60d139 100644 (file)
@@ -3,7 +3,7 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x152
   RenderBlock {HTML} at (0,0) size 800x152
     RenderBody {BODY} at (8,50) size 784x52
-layer at (58,50) size 202x104
+layer at (58,50) size 202x52
   RenderBlock {DIV} at (50,0) size 202x52 [border: (1px solid #000000)]
     RenderText {#text} at (1,1) size 39x18
       text run at (1,1) width 39: "PASS"
index ceb428e..49339e1 100644 (file)
@@ -1,6 +1,6 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
-layer at (0,0) size 800x308
+layer at (0,0) size 800x296
   RenderBlock {HTML} at (0,0) size 800x296
     RenderBody {BODY} at (8,16) size 784x272
       RenderBlock {P} at (0,0) size 784x18
index d9d8774..c387f43 100644 (file)
@@ -6,5 +6,5 @@ layer at (0,0) size 800x600
       RenderText {#text} at (0,0) size 0x0
       RenderText {#text} at (0,0) size 0x0
       RenderText {#text} at (0,0) size 0x0
-layer at (28,28) size 120x140
+layer at (28,28) size 100x100
   RenderImage {IMG} at (20,20) size 100x100 [bgcolor=#808080]
index 024f61a..5c06782 100644 (file)
@@ -1,6 +1,6 @@
 layer at (0,0) size 785x952
   RenderView at (0,0) size 785x600
-layer at (0,0) size 785x952
+layer at (0,0) size 785x928
   RenderBlock {HTML} at (0,0) size 785x928
     RenderBody {BODY} at (8,8) size 769x912
       RenderText {#text} at (0,0) size 457x18
index 7141ba5..2be6657 100644 (file)
@@ -22,37 +22,37 @@ layer at (0,0) size 800x600
       RenderBlock (floating) {DIV} at (20,500) size 40x40 [bgcolor=#FFFFE0]
         RenderText {#text} at (5,5) size 20x20
           text run at (5,5) width 20: "X"
-layer at (100,20) size 50x50
+layer at (100,20) size 40x40
   RenderBlock (floating) {DIV} at (100,20) size 40x40 [bgcolor=#FFFFE0]
-layer at (180,20) size 50x50
+layer at (180,20) size 40x40
   RenderBlock (floating) {DIV} at (180,20) size 40x40 [bgcolor=#FFFFE0]
-layer at (260,20) size 50x50
+layer at (260,20) size 40x40
   RenderBlock (floating) {DIV} at (260,20) size 40x40 [bgcolor=#FFFFE0]
-layer at (340,20) size 50x50
+layer at (340,20) size 40x40
   RenderBlock (floating) {DIV} at (340,20) size 40x40 [bgcolor=#FFFFE0]
-layer at (100,100) size 50x50
+layer at (100,100) size 40x40
   RenderBlock (floating) {DIV} at (100,100) size 40x40 [bgcolor=#FFFFE0]
-layer at (180,100) size 50x50
+layer at (180,100) size 40x40
   RenderBlock (floating) {DIV} at (180,100) size 40x40 [bgcolor=#FFFFE0]
-layer at (260,100) size 50x50
+layer at (260,100) size 40x40
   RenderBlock (floating) {DIV} at (260,100) size 40x40 [bgcolor=#FFFFE0]
-layer at (340,100) size 50x50
+layer at (340,100) size 40x40
   RenderBlock (floating) {DIV} at (340,100) size 40x40 [bgcolor=#FFFFE0]
-layer at (100,180) size 60x60
+layer at (100,180) size 40x40
   RenderBlock (floating) {DIV} at (100,180) size 40x40 [bgcolor=#FFFFE0]
-layer at (180,180) size 60x60
+layer at (180,180) size 40x40
   RenderBlock (floating) {DIV} at (180,180) size 40x40 [bgcolor=#FFFFE0]
-layer at (260,180) size 60x60
+layer at (260,180) size 40x40
   RenderBlock (floating) {DIV} at (260,180) size 40x40 [bgcolor=#FFFFE0]
-layer at (340,180) size 60x60
+layer at (340,180) size 40x40
   RenderBlock (floating) {DIV} at (340,180) size 40x40 [bgcolor=#FFFFE0]
-layer at (100,260) size 60x60
+layer at (100,260) size 40x40
   RenderBlock (floating) {DIV} at (100,260) size 40x40 [bgcolor=#FFFFE0]
-layer at (180,260) size 60x60
+layer at (180,260) size 40x40
   RenderBlock (floating) {DIV} at (180,260) size 40x40 [bgcolor=#FFFFE0]
-layer at (260,260) size 60x60
+layer at (260,260) size 40x40
   RenderBlock (floating) {DIV} at (260,260) size 40x40 [bgcolor=#FFFFE0]
-layer at (340,260) size 60x60
+layer at (340,260) size 40x40
   RenderBlock (floating) {DIV} at (340,260) size 40x40 [bgcolor=#FFFFE0]
 layer at (100,340) size 40x40
   RenderBlock (floating) {DIV} at (100,340) size 40x40 [bgcolor=#FFFFE0]
@@ -70,19 +70,19 @@ layer at (340,340) size 40x40
   RenderBlock (floating) {DIV} at (340,340) size 40x40 [bgcolor=#FFFFE0]
     RenderText {#text} at (5,5) size 20x20
       text run at (5,5) width 20: "X"
-layer at (100,420) size 45x40
+layer at (100,420) size 40x40
   RenderBlock (floating) {DIV} at (100,420) size 40x40 [bgcolor=#FFFFE0]
     RenderText {#text} at (5,5) size 20x20
       text run at (5,5) width 20: "X"
-layer at (180,420) size 45x40
+layer at (180,420) size 40x40
   RenderBlock (floating) {DIV} at (180,420) size 40x40 [bgcolor=#FFFFE0]
     RenderText {#text} at (5,5) size 20x20
       text run at (5,5) width 20: "X"
-layer at (260,420) size 45x40
+layer at (260,420) size 40x40
   RenderBlock (floating) {DIV} at (260,420) size 40x40 [bgcolor=#FFFFE0]
     RenderText {#text} at (5,5) size 20x20
       text run at (5,5) width 20: "X"
-layer at (340,420) size 45x40
+layer at (340,420) size 40x40
   RenderBlock (floating) {DIV} at (340,420) size 40x40 [bgcolor=#FFFFE0]
     RenderText {#text} at (5,5) size 20x20
       text run at (5,5) width 20: "X"
index e1b7cdc..de4e355 100644 (file)
@@ -6,9 +6,9 @@ layer at (0,0) size 800x600
       RenderBlock (anonymous) at (0,0) size 784x18
         RenderText {#text} at (0,0) size 750x18
           text run at (0,0) width 750: "In the example below you should see three blocks right next to one another, and they should all be partially transparent."
-layer at (8,26) size 120x130
+layer at (8,26) size 120x120
   RenderBlock {DIV} at (0,18) size 120x120 [bgcolor=#87CEEB] [border: (10px solid #000000)]
-layer at (18,36) size 120x130
+layer at (18,36) size 120x120
   RenderBlock {DIV} at (10,10) size 120x120 [border: (10px solid #000000)]
 layer at (28,46) size 120x120
   RenderBlock {DIV} at (10,10) size 120x120 [border: (10px solid #000000)]
index 18f47a0..6e81747 100644 (file)
@@ -16,7 +16,7 @@ layer at (0,0) size 800x600
         RenderText {#text} at (0,320) size 4x18
           text run at (0,320) width 4: " "
         RenderBR {BR} at (210,334) size 0x0
-layer at (12,60) size 206x317
+layer at (12,60) size 206x156
   RenderVideo {VIDEO} at (4,18) size 206x156 [border: (3px solid #FF0000)]
-layer at (12,220) size 206x317
+layer at (12,220) size 206x156
   RenderVideo {VIDEO} at (4,178) size 206x156 [border: (3px solid #FF0000)]
index 944cb3a..0065f3e 100644 (file)
@@ -3,7 +3,7 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
-      RenderInline {A} at (0,0) size 468x14 [color=#0000EE]
+      RenderInline {A} at (0,0) size 468x18 [color=#0000EE]
         RenderText {#text} at (0,0) size 0x0
         RenderImage {IMG} at (0,0) size 468x60
       RenderText {#text} at (0,0) size 0x0
index 289d6b8..ba83fd8 100644 (file)
@@ -10,10 +10,10 @@ layer at (0,0) size 800x600
         RenderTableSection {TBODY} at (1,1) size 674x222
           RenderTableRow {TR} at (0,0) size 674x222
             RenderTableCell {TD} at (0,0) size 331x222 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
-              RenderInline {A} at (0,0) size 329x14 [color=#0000EE]
+              RenderInline {A} at (0,0) size 329x18 [color=#0000EE]
                 RenderImage {IMG} at (1,1) size 329x220
             RenderTableCell {TD} at (331,109) size 12x3 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
               RenderImage {IMG} at (1,1) size 10x1
             RenderTableCell {TD} at (343,0) size 331x222 [border: (1px inset #808080)] [r=0 c=2 rs=1 cs=1]
-              RenderInline {A} at (0,0) size 329x14 [color=#0000EE]
+              RenderInline {A} at (0,0) size 329x18 [color=#0000EE]
                 RenderImage {IMG} at (1,1) size 329x220
index 0761860..a405ad0 100644 (file)
@@ -22,8 +22,8 @@ layer at (0,0) size 800x600
             RenderTableCell {TD} at (0,1) size 18x22 [r=1 c=0 rs=1 cs=3]
               RenderImage {IMG} at (0,0) size 18x22
             RenderTableCell {TD} at (18,3) size 187x18 [bgcolor=#FFCC00] [r=1 c=3 rs=1 cs=1]
-              RenderInline {A} at (0,0) size 120x17 [color=#0000EE]
-                RenderInline {B} at (0,0) size 120x17
+              RenderInline {A} at (0,0) size 120x18 [color=#0000EE]
+                RenderInline {B} at (0,0) size 120x18
                   RenderInline {FONT} at (0,0) size 120x17
                     RenderText {#text} at (33,0) size 120x17
                       text run at (33,0) width 120: "Detailed Search"
@@ -36,8 +36,8 @@ layer at (0,0) size 800x600
             RenderTableCell {TD} at (243,1) size 18x22 [r=1 c=6 rs=1 cs=3]
               RenderImage {IMG} at (0,0) size 18x22
             RenderTableCell {TD} at (261,3) size 187x18 [bgcolor=#FFCC00] [r=1 c=9 rs=1 cs=1]
-              RenderInline {A} at (0,0) size 150x17 [color=#0000EE]
-                RenderInline {B} at (0,0) size 150x17
+              RenderInline {A} at (0,0) size 150x18 [color=#0000EE]
+                RenderInline {B} at (0,0) size 150x18
                   RenderInline {FONT} at (0,0) size 150x17
                     RenderText {#text} at (18,0) size 150x17
                       text run at (18,0) width 150: "Search By Distance"
@@ -77,7 +77,7 @@ layer at (0,0) size 800x600
               RenderText {#text} at (0,0) size 4x18
                 text run at (0,0) width 4: " "
             RenderTableCell {TD} at (257,23) size 211x50 [bgcolor=#EBEBE4] [r=2 c=8 rs=1 cs=3]
-              RenderInline {FONT} at (0,0) size 207x50
+              RenderInline {FONT} at (0,0) size 207x57
                 RenderImage {IMG} at (0,0) size 1x5
                 RenderBR {BR} at (1,5) size 0x0
                 RenderText {#text} at (0,5) size 207x45
index bbf8a10..863e35f 100644 (file)
@@ -47,8 +47,8 @@ layer at (0,0) size 800x600
                                 RenderText {#text} at (3,3) size 30x11
                                   text run at (3,3) width 30: "03.12."
                             RenderTableCell {TD} at (264,37) size 32x16 [r=2 c=5 rs=1 cs=1]
-                              RenderInline {FONT} at (0,0) size 16x9
-                                RenderInline {A} at (0,0) size 16x9 [color=#0000EE]
+                              RenderInline {FONT} at (0,0) size 16x11
+                                RenderInline {A} at (0,0) size 16x11 [color=#0000EE]
                                   RenderImage {IMG} at (8,3) size 16x10
                     RenderTableCell {TD} at (299,0) size 299x57 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
                       RenderTable {TABLE} at (1,1) size 297x55
@@ -62,13 +62,13 @@ layer at (0,0) size 800x600
                             RenderTableCell {TD} at (1,19) size 205x17 [r=1 c=0 rs=1 cs=1]
                               RenderImage {IMG} at (97,3) size 11x11
                             RenderTableCell {TD} at (207,19) size 89x16 [r=1 c=1 rs=1 cs=1]
-                              RenderInline {FONT} at (0,0) size 16x9
-                                RenderInline {A} at (0,0) size 16x9 [color=#0000EE]
+                              RenderInline {FONT} at (0,0) size 16x11
+                                RenderInline {A} at (0,0) size 16x11 [color=#0000EE]
                                   RenderImage {IMG} at (36,3) size 16x10
                           RenderTableRow {TR} at (0,37) size 297x17 [bgcolor=#E7DEA5]
                             RenderTableCell {TD} at (1,37) size 205x17 [r=2 c=0 rs=1 cs=1]
                               RenderImage {IMG} at (97,3) size 11x11
                             RenderTableCell {TD} at (207,37) size 89x16 [r=2 c=1 rs=1 cs=1]
-                              RenderInline {FONT} at (0,0) size 16x9
-                                RenderInline {A} at (0,0) size 16x9 [color=#0000EE]
+                              RenderInline {FONT} at (0,0) size 16x11
+                                RenderInline {A} at (0,0) size 16x11 [color=#0000EE]
                                   RenderImage {IMG} at (36,3) size 16x10
index 660ca74..facd27e 100644 (file)
@@ -71,13 +71,13 @@ layer at (0,0) size 800x600
                 RenderText {#text} at (0,0) size 0x0
             RenderTableRow {TR} at (0,105) size 600x50
               RenderTableCell {TD} at (2,114) size 159x32 [r=2 c=0 rs=1 cs=1]
-                RenderInline {A} at (0,0) size 115x30 [color=#0000EE]
+                RenderInline {A} at (0,0) size 115x33 [color=#0000EE]
                   RenderInline {FONT} at (0,0) size 115x30 [color=#CC0033]
                     RenderText {#text} at (22,1) size 115x30
                       text run at (22,1) width 115: "Download Netscape"
                       text run at (26,16) width 106: "Communicator 4.5"
               RenderTableCell {TD} at (163,105) size 270x50 [r=2 c=1 rs=1 cs=1]
-                RenderInline {A} at (0,0) size 232x27 [color=#0000EE]
+                RenderInline {A} at (0,0) size 232x28 [color=#0000EE]
                   RenderImage {IMG} at (19,1) size 232x35 [border: (1px solid #0000EE)]
                   RenderBR {BR} at (251,36) size 0x0
                   RenderInline {FONT} at (0,0) size 46x13
@@ -85,7 +85,7 @@ layer at (0,0) size 800x600
                       text run at (112,36) width 46: "Click Here!"
                 RenderBR {BR} at (158,46) size 0x0
               RenderTableCell {TD} at (435,121) size 161x17 [r=2 c=2 rs=1 cs=1]
-                RenderInline {A} at (0,0) size 129x15 [color=#0000EE]
+                RenderInline {A} at (0,0) size 129x18 [color=#0000EE]
                   RenderInline {FONT} at (0,0) size 129x15 [color=#0066FF]
                     RenderText {#text} at (16,1) size 129x15
                       text run at (16,1) width 129: "Hassle-Free Upgrades"
index 3b0f562..b9f4005 100644 (file)
@@ -1,6 +1,6 @@
-layer at (0,0) size 808x585
+layer at (0,0) size 808x591
   RenderView at (0,0) size 800x585
-layer at (0,0) size 808x585
+layer at (0,0) size 808x591
   RenderBlock {HTML} at (0,0) size 800x585
     RenderBody {BODY} at (8,8) size 784x569
       RenderTable {TABLE} at (0,0) size 800x569 [border: (1px outset #808080)]
index 3599c87..423ed6c 100644 (file)
@@ -35,7 +35,7 @@ layer at (0,0) size 800x600
               RenderBlock {INPUT} at (4,4) size 12x13
           RenderTableRow {TR} at (0,116) size 784x24
             RenderTableCell {TD} at (0,119) size 622x17 [r=3 c=0 rs=1 cs=2]
-              RenderInline {A} at (0,0) size 76x15 [color=#0000EE]
+              RenderInline {A} at (0,0) size 76x18 [color=#0000EE]
                 RenderInline {FONT} at (0,0) size 76x15
                   RenderText {#text} at (273,1) size 76x15
                     text run at (273,1) width 76: "View Results"
index 7e2d6a3..dca1d58 100644 (file)
@@ -9,7 +9,7 @@ layer at (0,0) size 800x600
             RenderTableCell {TD} at (0,0) size 15x15 [bgcolor=#FFCC00] [r=0 c=0 rs=1 cs=1]
               RenderImage {IMG} at (0,0) size 15x15
             RenderTableCell {TD} at (15,1) size 100x12 [bgcolor=#FFCC00] [r=0 c=1 rs=1 cs=1]
-              RenderInline {B} at (0,0) size 62x12
+              RenderInline {B} at (0,0) size 62x18
                 RenderInline {FONT} at (0,0) size 62x12
                   RenderText {#text} at (19,0) size 62x12
                     text run at (19,0) width 62: "Downloads"
index ccb432e..884b805 100644 (file)
@@ -7,7 +7,7 @@ layer at (0,0) size 800x600
         RenderTableSection {TBODY} at (1,1) size 782x130
           RenderTableRow {TR} at (0,2) size 782x126
             RenderTableCell {TD} at (2,2) size 183x126 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
-              RenderInline {A} at (0,0) size 181x14 [color=#0000EE]
+              RenderInline {A} at (0,0) size 181x18 [color=#0000EE]
                 RenderImage {IMG} at (1,1) size 61x62
                 RenderImage {IMG} at (1,63) size 181x62
             RenderTableCell {TD} at (187,33) size 453x64 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
index 392a975..d356004 100644 (file)
@@ -21,7 +21,7 @@ layer at (0,0) size 800x600
           RenderBlock {DIV} at (0,38) size 784x54
             RenderBR {BR} at (784,0) size 0x18
             RenderBR {BR} at (784,18) size 0x18
-            RenderInline {A} at (0,0) size 134x17 [color=#0000EE]
+            RenderInline {A} at (0,0) size 134x18 [color=#0000EE]
               RenderInline {FONT} at (0,0) size 134x17 [color=#FFCC33]
                 RenderText {#text} at (650,36) size 134x17
                   text run at (650,36) width 83: "Back to the "
index 26a3ec3..6dcf167 100644 (file)
@@ -30,7 +30,7 @@ layer at (0,0) size 800x600
                       RenderImage {IMG} at (0,0) size 7x2
                   RenderTableRow {TR} at (0,2) size 175x29
                     RenderTableCell {TD} at (0,2) size 175x29 [r=1 c=0 rs=1 cs=8]
-                      RenderInline {A} at (0,0) size 156x14 [color=#0000EE]
+                      RenderInline {A} at (0,0) size 156x18 [color=#0000EE]
                         RenderImage {IMG} at (0,0) size 156x29
                       RenderImage {IMG} at (156,0) size 19x29
                   RenderTableRow {TR} at (0,31) size 175x1
index ffe1646..dee23b2 100644 (file)
@@ -10,24 +10,24 @@ layer at (0,0) size 800x600
         RenderTableSection {TBODY} at (0,0) size 613x95
           RenderTableRow {TR} at (0,0) size 613x70
             RenderTableCell {TD} at (0,5) size 126x85 [r=0 c=0 rs=2 cs=1]
-              RenderInline {A} at (0,0) size 126x14 [color=#0000EE]
+              RenderInline {A} at (0,0) size 126x18 [color=#0000EE]
                 RenderImage {IMG} at (0,0) size 126x85
               RenderText {#text} at (0,0) size 0x0
             RenderTableCell {TD} at (126,0) size 487x70 [r=0 c=1 rs=1 cs=3]
-              RenderInline {NOBR} at (0,0) size 19x14
+              RenderInline {NOBR} at (0,0) size 19x18
                 RenderPartObject {IFRAME} at (0,0) size 468x60
                   layer at (0,0) size 468x60
                     RenderView at (0,0) size 468x60
                   layer at (0,0) size 468x60
                     RenderBlock {HTML} at (0,0) size 468x60
                       RenderBody {BODY} at (0,0) size 468x60
-                        RenderInline {A} at (0,0) size 468x14 [color=#0000EE]
+                        RenderInline {A} at (0,0) size 468x18 [color=#0000EE]
                           RenderText {#text} at (0,0) size 0x0
                           RenderImage {IMG} at (0,0) size 468x60
                         RenderText {#text} at (0,0) size 0x0
                         RenderText {#text} at (0,0) size 0x0
                         RenderText {#text} at (0,0) size 0x0
-                RenderInline {A} at (0,0) size 19x14 [color=#0000EE]
+                RenderInline {A} at (0,0) size 19x18 [color=#0000EE]
                   RenderImage {IMG} at (468,0) size 19x60
               RenderBR {BR} at (487,60) size 0x0
               RenderImage {IMG} at (0,60) size 470x10
index 9c4a5d7..bc78adf 100644 (file)
@@ -13,7 +13,7 @@ layer at (0,0) size 800x600
         RenderTableSection {TBODY} at (0,0) size 600x89
           RenderTableRow {TR} at (0,0) size 600x89
             RenderTableCell {TD} at (0,0) size 128x89 [bgcolor=#336699] [r=0 c=0 rs=1 cs=1]
-              RenderInline {A} at (0,0) size 128x14 [color=#0000EE]
+              RenderInline {A} at (0,0) size 128x18 [color=#0000EE]
                 RenderImage {IMG} at (0,0) size 128x89
             RenderTableCell {TD} at (128,44) size 472x0 [r=0 c=1 rs=1 cs=1]
       RenderTable {TABLE} at (0,129) size 600x18
@@ -21,7 +21,7 @@ layer at (0,0) size 800x600
           RenderTableRow {TR} at (0,0) size 600x18
             RenderTableCell {TD} at (0,0) size 600x18 [r=0 c=0 rs=1 cs=1]
               RenderImage {IMG} at (0,0) size 348x18
-              RenderInline {MAP} at (0,0) size 0x14
+              RenderInline {MAP} at (0,0) size 0x18
               RenderImage {IMG} at (348,0) size 88x18
               RenderImage {IMG} at (436,0) size 55x18
       RenderBlock {P} at (0,163) size 784x161
index 99c7975..a23e2c2 100644 (file)
@@ -20,7 +20,7 @@ layer at (0,0) size 800x600
                         RenderTableSection {TBODY} at (0,0) size 496x80
                           RenderTableRow {TR} at (0,10) size 496x60
                             RenderTableCell {TD} at (10,10) size 476x60 [r=0 c=0 rs=1 cs=1]
-                              RenderInline {A} at (0,0) size 468x14 [color=#0000EE]
+                              RenderInline {A} at (0,0) size 468x18 [color=#0000EE]
                                 RenderImage {IMG} at (0,0) size 468x60
                       RenderBlock (anonymous) at (2,82) size 496x72
                         RenderText {#text} at (0,0) size 480x72
index 06da77b..47f91a0 100644 (file)
@@ -15,43 +15,43 @@ layer at (0,0) size 800x600
             RenderTableRow {TR} at (0,2) size 417x19
               RenderTableCell {TD} at (2,2) size 40x19 [bgcolor=#009900] [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
                 RenderBlock {DIV} at (2,2) size 36x15
-                  RenderInline {B} at (0,0) size 36x15
+                  RenderInline {B} at (0,0) size 36x18
                     RenderInline {FONT} at (0,0) size 36x15
                       RenderText {#text} at (0,0) size 36x15
                         text run at (0,0) width 36: "Credit"
               RenderTableCell {TD} at (44,2) size 39x19 [bgcolor=#009900] [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
-                RenderInline {B} at (0,0) size 23x15
+                RenderInline {B} at (0,0) size 23x18
                   RenderInline {FONT} at (0,0) size 23x15
                     RenderText {#text} at (2,2) size 23x15
                       text run at (2,2) width 23: "Bug"
               RenderTableCell {TD} at (85,2) size 138x19 [bgcolor=#009900] [border: (1px inset #808080)] [r=0 c=2 rs=1 cs=1]
-                RenderInline {B} at (0,0) size 56x15
+                RenderInline {B} at (0,0) size 56x18
                   RenderInline {FONT} at (0,0) size 56x15
                     RenderText {#text} at (2,2) size 56x15
                       text run at (2,2) width 56: "Summary"
               RenderTableCell {TD} at (225,2) size 55x19 [bgcolor=#009900] [border: (1px inset #808080)] [r=0 c=3 rs=1 cs=1]
-                RenderInline {B} at (0,0) size 34x15
+                RenderInline {B} at (0,0) size 34x18
                   RenderInline {FONT} at (0,0) size 34x15
                     RenderText {#text} at (2,2) size 34x15
                       text run at (2,2) width 34: "Status"
               RenderTableCell {TD} at (282,2) size 64x19 [bgcolor=#009900] [border: (1px inset #808080)] [r=0 c=4 rs=1 cs=1]
-                RenderInline {B} at (0,0) size 60x15
+                RenderInline {B} at (0,0) size 60x18
                   RenderInline {FONT} at (0,0) size 60x15
                     RenderText {#text} at (2,2) size 60x15
                       text run at (2,2) width 60: "Resolution"
               RenderTableCell {TD} at (348,2) size 67x19 [bgcolor=#009900] [border: (1px inset #808080)] [r=0 c=5 rs=1 cs=1]
-                RenderInline {B} at (0,0) size 63x15
+                RenderInline {B} at (0,0) size 63x18
                   RenderInline {FONT} at (0,0) size 63x15
                     RenderText {#text} at (2,2) size 63x15
                       text run at (2,2) width 63: "Date (-8/-7)"
             RenderTableRow {TR} at (0,23) size 417x19
               RenderTableCell {TD} at (2,23) size 40x19 [bgcolor=#FF0000] [border: (1px inset #808080)] [r=1 c=0 rs=1 cs=1]
-                RenderInline {B} at (0,0) size 7x15
+                RenderInline {B} at (0,0) size 7x18
                   RenderInline {FONT} at (0,0) size 7x15
                     RenderText {#text} at (2,2) size 7x15
                       text run at (2,2) width 7: "1"
               RenderTableCell {TD} at (44,23) size 39x19 [bgcolor=#FF0000] [border: (1px inset #808080)] [r=1 c=1 rs=1 cs=1]
-                RenderInline {B} at (0,0) size 35x15
+                RenderInline {B} at (0,0) size 35x18
                   RenderInline {FONT} at (0,0) size 35x15
                     RenderText {#text} at (0,0) size 0x0
                     RenderInline {A} at (0,0) size 35x15
@@ -59,22 +59,22 @@ layer at (0,0) size 800x600
                         text run at (2,2) width 35: "10000"
                     RenderText {#text} at (0,0) size 0x0
               RenderTableCell {TD} at (85,23) size 138x19 [bgcolor=#FF0000] [border: (1px inset #808080)] [r=1 c=2 rs=1 cs=1]
-                RenderInline {B} at (0,0) size 134x15
+                RenderInline {B} at (0,0) size 134x18
                   RenderInline {FONT} at (0,0) size 134x15
                     RenderText {#text} at (2,2) size 134x15
                       text run at (2,2) width 134: "JWZ returns to Mozilla"
               RenderTableCell {TD} at (225,23) size 55x19 [bgcolor=#FF0000] [border: (1px inset #808080)] [r=1 c=3 rs=1 cs=1]
-                RenderInline {B} at (0,0) size 51x15
+                RenderInline {B} at (0,0) size 51x18
                   RenderInline {FONT} at (0,0) size 51x15
                     RenderText {#text} at (2,2) size 51x15
                       text run at (2,2) width 51: "Resolved"
               RenderTableCell {TD} at (282,23) size 64x19 [bgcolor=#FF0000] [border: (1px inset #808080)] [r=1 c=4 rs=1 cs=1]
-                RenderInline {B} at (0,0) size 54x15
+                RenderInline {B} at (0,0) size 54x18
                   RenderInline {FONT} at (0,0) size 54x15
                     RenderText {#text} at (2,2) size 54x15
                       text run at (2,2) width 54: "Duplicate"
               RenderTableCell {TD} at (348,23) size 67x19 [bgcolor=#FF0000] [border: (1px inset #808080)] [r=1 c=5 rs=1 cs=1]
-                RenderInline {B} at (0,0) size 35x15
+                RenderInline {B} at (0,0) size 35x18
                   RenderInline {FONT} at (0,0) size 35x15
                     RenderText {#text} at (2,2) size 35x15
                       text run at (2,2) width 35: "July 1"
index 65bd6dd..67d79c1 100644 (file)
@@ -7,7 +7,7 @@ layer at (0,0) size 800x600
         RenderTableSection {TBODY} at (2,2) size 746x231
           RenderTableRow {TR} at (0,0) size 746x211
             RenderTableCell {TD} at (0,0) size 474x211 [bgcolor=#FF0000] [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
-              RenderInline {A} at (0,0) size 286x14 [color=#0000EE]
+              RenderInline {A} at (0,0) size 286x18 [color=#0000EE]
                 RenderImage {IMG} at (1,1) size 286x209
             RenderTableCell {TD} at (474,0) size 272x20 [bgcolor=#FFFF00] [border: (1px inset #808080)] [r=0 c=1 rs=2 cs=1]
               RenderText {#text} at (1,1) size 169x18
index 4ca4dc6..76d8938 100644 (file)
@@ -7,145 +7,145 @@ layer at (0,0) size 785x669
         RenderTableSection {TBODY} at (1,1) size 634x615
           RenderTableRow {TR} at (0,0) size 634x24
             RenderTableCell {TD} at (0,0) size 148x615 [bgcolor=#660000] [border: (1px inset #808080)] [r=0 c=0 rs=6 cs=1]
-              RenderInline {B} at (0,0) size 64x15
-                RenderInline {A} at (0,0) size 64x15
+              RenderInline {B} at (0,0) size 64x18
+                RenderInline {A} at (0,0) size 64x18
                   RenderInline {FONT} at (0,0) size 64x15 [color=#FFFFFF]
                     RenderText {#text} at (4,4) size 64x15
                       text run at (4,4) width 64: "MARKETS"
                   RenderBR {BR} at (68,16) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 32x15
+              RenderInline {A} at (0,0) size 32x18
                 RenderInline {FONT} at (0,0) size 32x15 [color=#FFFFFF]
                   RenderText {#text} at (4,19) size 32x15
                     text run at (4,19) width 32: "News"
                 RenderBR {BR} at (36,31) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 41x15
+              RenderInline {A} at (0,0) size 41x18
                 RenderInline {FONT} at (0,0) size 41x15 [color=#FFFFFF]
                   RenderText {#text} at (4,34) size 41x15
                     text run at (4,34) width 41: "Stocks"
                 RenderBR {BR} at (45,46) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 74x15
+              RenderInline {A} at (0,0) size 74x18
                 RenderInline {FONT} at (0,0) size 74x15 [color=#FFFFFF]
                   RenderText {#text} at (4,49) size 74x15
                     text run at (4,49) width 74: "Tech Stocks"
                 RenderBR {BR} at (78,61) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 117x15
+              RenderInline {A} at (0,0) size 117x18
                 RenderInline {FONT} at (0,0) size 117x15 [color=#FFFFFF]
                   RenderText {#text} at (4,64) size 117x15
                     text run at (4,64) width 117: "Stocks on the Move"
                 RenderBR {BR} at (121,76) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 65x15
+              RenderInline {A} at (0,0) size 65x18
                 RenderInline {FONT} at (0,0) size 65x15 [color=#FFFFFF]
                   RenderText {#text} at (4,79) size 65x15
                     text run at (4,79) width 65: "IPO Center"
                 RenderBR {BR} at (69,91) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 79x15
+              RenderInline {A} at (0,0) size 79x18
                 RenderInline {FONT} at (0,0) size 79x15 [color=#FFFFFF]
                   RenderText {#text} at (4,94) size 79x15
                     text run at (4,94) width 79: "World Indices"
                 RenderBR {BR} at (83,106) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 88x15
+              RenderInline {A} at (0,0) size 88x18
                 RenderInline {FONT} at (0,0) size 88x15 [color=#FFFFFF]
                   RenderInline {NOBR} at (0,0) size 88x15
                     RenderText {#text} at (4,109) size 88x15
                       text run at (4,109) width 88: "Rates & Bonds"
                 RenderBR {BR} at (92,121) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 91x15
+              RenderInline {A} at (0,0) size 91x18
                 RenderInline {FONT} at (0,0) size 91x15 [color=#FFFFFF]
                   RenderText {#text} at (4,124) size 91x15
                     text run at (4,124) width 91: "U.S. Treasuries"
                 RenderBR {BR} at (95,136) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 62x15
+              RenderInline {A} at (0,0) size 62x18
                 RenderInline {FONT} at (0,0) size 62x15 [color=#FFFFFF]
                   RenderText {#text} at (4,139) size 62x15
                     text run at (4,139) width 62: "Currencies"
                 RenderBR {BR} at (66,151) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 114x15
+              RenderInline {A} at (0,0) size 114x18
                 RenderInline {FONT} at (0,0) size 114x15 [color=#FFFFFF]
                   RenderText {#text} at (4,154) size 114x15
                     text run at (4,154) width 114: "Currency Calculator"
                 RenderBR {BR} at (118,166) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 76x15
+              RenderInline {A} at (0,0) size 76x18
                 RenderInline {FONT} at (0,0) size 76x15 [color=#FFFFFF]
                   RenderText {#text} at (4,169) size 76x15
                     text run at (4,169) width 76: "Commodities"
                 RenderBR {BR} at (80,181) size 0x0
               RenderText {#text} at (0,0) size 0x0
               RenderBR {BR} at (4,184) size 0x18
-              RenderInline {B} at (0,0) size 48x15
-                RenderInline {A} at (0,0) size 48x15
+              RenderInline {B} at (0,0) size 48x18
+                RenderInline {A} at (0,0) size 48x18
                   RenderInline {FONT} at (0,0) size 48x15 [color=#FFFFFF]
                     RenderText {#text} at (4,202) size 48x15
                       text run at (4,202) width 48: "MONEY"
                   RenderBR {BR} at (52,214) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 79x15
+              RenderInline {A} at (0,0) size 79x18
                 RenderInline {FONT} at (0,0) size 79x15 [color=#FFFFFF]
                   RenderText {#text} at (4,217) size 79x15
                     text run at (4,217) width 79: "Mutual Funds"
                 RenderBR {BR} at (83,229) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 48x15
+              RenderInline {A} at (0,0) size 48x18
                 RenderInline {FONT} at (0,0) size 48x15 [color=#FFFFFF]
                   RenderText {#text} at (4,232) size 48x15
                     text run at (4,232) width 48: "Portfolio"
                 RenderBR {BR} at (52,244) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 70x15
+              RenderInline {A} at (0,0) size 70x18
                 RenderInline {FONT} at (0,0) size 70x15 [color=#FFFFFF]
                   RenderText {#text} at (4,247) size 70x15
                     text run at (4,247) width 70: "Loan Center"
                 RenderBR {BR} at (74,259) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 116x15
+              RenderInline {A} at (0,0) size 116x18
                 RenderInline {FONT} at (0,0) size 116x15 [color=#FFFFFF]
                   RenderText {#text} at (4,262) size 116x15
                     text run at (4,262) width 116: "Mortgage Calculator"
                 RenderBR {BR} at (120,274) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 53x15
+              RenderInline {A} at (0,0) size 53x18
                 RenderInline {FONT} at (0,0) size 53x15 [color=#FFFFFF]
                   RenderText {#text} at (4,277) size 53x15
                     text run at (4,277) width 53: "Investing"
                 RenderBR {BR} at (57,289) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 63x15
+              RenderInline {A} at (0,0) size 63x18
                 RenderInline {FONT} at (0,0) size 63x15 [color=#FFFFFF]
                   RenderText {#text} at (4,292) size 63x15
                     text run at (4,292) width 63: "Retirement"
                 RenderBR {BR} at (67,304) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 120x15
+              RenderInline {A} at (0,0) size 120x18
                 RenderInline {FONT} at (0,0) size 120x15 [color=#FFFFFF]
                   RenderText {#text} at (4,307) size 120x15
                     text run at (4,307) width 120: "Negocios Bloomberg"
                 RenderBR {BR} at (124,319) size 0x0
               RenderText {#text} at (0,0) size 0x0
               RenderBR {BR} at (4,322) size 0x18
-              RenderInline {B} at (0,0) size 78x15
-                RenderInline {A} at (0,0) size 78x15
+              RenderInline {B} at (0,0) size 78x18
+                RenderInline {A} at (0,0) size 78x18
                   RenderInline {FONT} at (0,0) size 78x15 [color=#FFFFFF]
                     RenderText {#text} at (4,340) size 78x15
                       text run at (4,340) width 78: "MAGAZINES"
                   RenderBR {BR} at (82,352) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 101x15
+              RenderInline {A} at (0,0) size 101x18
                 RenderInline {FONT} at (0,0) size 101x15 [color=#FFFFFF]
                   RenderText {#text} at (4,355) size 101x15
                     text run at (4,355) width 101: "Personal Finance"
                 RenderBR {BR} at (105,367) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 94x15
+              RenderInline {A} at (0,0) size 94x18
                 RenderInline {FONT} at (0,0) size 94x15 [color=#FFFFFF]
                   RenderText {#text} at (4,370) size 94x15
                     text run at (4,370) width 94: "Wealth Manager"
@@ -158,47 +158,47 @@ layer at (0,0) size 785x669
                     text run at (4,403) width 124: "BUSINESS CENTER"
                 RenderBR {BR} at (128,415) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 91x15
+              RenderInline {A} at (0,0) size 91x18
                 RenderInline {FONT} at (0,0) size 91x15 [color=#FFFFFF]
                   RenderText {#text} at (4,418) size 91x15
                     text run at (4,418) width 91: "Small Business"
                 RenderBR {BR} at (95,430) size 0x0
               RenderText {#text} at (0,0) size 0x0
               RenderBR {BR} at (4,433) size 0x18
-              RenderInline {B} at (0,0) size 63x15
-                RenderInline {A} at (0,0) size 63x15
+              RenderInline {B} at (0,0) size 63x18
+                RenderInline {A} at (0,0) size 63x18
                   RenderInline {FONT} at (0,0) size 63x15 [color=#FFFFFF]
                     RenderText {#text} at (4,451) size 63x15
                       text run at (4,451) width 63: "CAREERS"
                   RenderBR {BR} at (67,463) size 0x0
               RenderText {#text} at (0,0) size 0x0
               RenderBR {BR} at (4,466) size 0x18
-              RenderInline {B} at (0,0) size 29x15
-                RenderInline {A} at (0,0) size 29x15
+              RenderInline {B} at (0,0) size 29x18
+                RenderInline {A} at (0,0) size 29x18
                   RenderInline {FONT} at (0,0) size 29x15 [color=#FFFFFF]
                     RenderText {#text} at (4,484) size 29x15
                       text run at (4,484) width 29: "LIFE"
                   RenderBR {BR} at (33,496) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 98x15
+              RenderInline {A} at (0,0) size 98x18
                 RenderInline {FONT} at (0,0) size 98x15 [color=#FFFFFF]
                   RenderText {#text} at (4,499) size 98x15
                     text run at (4,499) width 98: "The Finer Things"
                 RenderBR {BR} at (102,511) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 38x15
+              RenderInline {A} at (0,0) size 38x18
                 RenderInline {FONT} at (0,0) size 38x15 [color=#FFFFFF]
                   RenderText {#text} at (4,514) size 38x15
                     text run at (4,514) width 38: "Sports"
                 RenderBR {BR} at (42,526) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 74x15
+              RenderInline {A} at (0,0) size 74x18
                 RenderInline {FONT} at (0,0) size 74x15 [color=#FFFFFF]
                   RenderText {#text} at (4,529) size 74x15
                     text run at (4,529) width 74: "Charlie Rose"
                 RenderBR {BR} at (78,541) size 0x0
               RenderText {#text} at (0,0) size 0x0
-              RenderInline {A} at (0,0) size 76x15
+              RenderInline {A} at (0,0) size 76x18
                 RenderInline {FONT} at (0,0) size 76x15 [color=#FFFFFF]
                   RenderText {#text} at (4,544) size 76x15
                     text run at (4,544) width 76: "B-Commerce"
@@ -206,7 +206,7 @@ layer at (0,0) size 785x669
               RenderBR {BR} at (4,559) size 0x18
               RenderImage {IMG} at (4,577) size 140x1
               RenderBR {BR} at (144,578) size 0x0
-              RenderInline {A} at (0,0) size 74x15
+              RenderInline {A} at (0,0) size 74x18
                 RenderInline {FONT} at (0,0) size 74x15 [color=#FFFFFF]
                   RenderText {#text} at (4,578) size 74x15
                     text run at (4,578) width 74: "To Advertise"
@@ -216,14 +216,14 @@ layer at (0,0) size 785x669
               RenderImage {IMG} at (10,4) size 465x16
           RenderTableRow {TR} at (0,24) size 634x69
             RenderTableCell {TD} at (148,24) size 128x69 [border: (1px inset #808080)] [r=1 c=1 rs=1 cs=1]
-              RenderInline {A} at (0,0) size 120x14
+              RenderInline {A} at (0,0) size 120x18
                 RenderText {#text} at (0,0) size 0x0
                 RenderImage {IMG} at (4,4) size 120x60
               RenderText {#text} at (0,0) size 0x0
               RenderText {#text} at (0,0) size 0x0
               RenderImage {IMG} at (4,64) size 120x1
             RenderTableCell {TD} at (276,24) size 175x69 [border: (1px inset #808080)] [r=1 c=2 rs=1 cs=1]
-              RenderInline {A} at (0,0) size 167x14
+              RenderInline {A} at (0,0) size 167x18
                 RenderText {#text} at (0,0) size 0x0
                 RenderImage {IMG} at (4,4) size 167x60
               RenderText {#text} at (0,0) size 0x0
@@ -231,7 +231,7 @@ layer at (0,0) size 785x669
               RenderImage {IMG} at (4,64) size 167x1
             RenderTableCell {TD} at (451,24) size 183x521 [bgcolor=#CCCC99] [border: (1px inset #808080)] [r=1 c=3 rs=6 cs=1]
               RenderBlock (anonymous) at (4,4) size 175x26
-                RenderInline {FONT} at (0,0) size 143x11
+                RenderInline {FONT} at (0,0) size 143x13
                   RenderInline {FONT} at (0,0) size 143x11
                     RenderInline {SPAN} at (0,0) size 143x11
                       RenderText {#text} at (16,0) size 143x11
@@ -246,11 +246,11 @@ layer at (0,0) size 785x669
                       RenderBR {BR} at (139,23) size 0x0
                 RenderText {#text} at (0,0) size 0x0
               RenderBlock {CENTER} at (4,30) size 175x487
-                RenderInline {A} at (0,0) size 175x14
+                RenderInline {A} at (0,0) size 175x18
                   RenderImage {IMG} at (0,0) size 175x270
                 RenderText {#text} at (0,0) size 0x0
                 RenderText {#text} at (0,0) size 0x0
-                RenderInline {A} at (0,0) size 161x14
+                RenderInline {A} at (0,0) size 161x18
                   RenderText {#text} at (0,0) size 0x0
                   RenderImage {IMG} at (7,270) size 161x30
                 RenderText {#text} at (0,0) size 0x0
@@ -277,7 +277,7 @@ layer at (0,0) size 785x669
                 RenderBR {BR} at (0,0) size 0x0
                 RenderBR {BR} at (87,326) size 0x18
                 RenderBR {BR} at (87,344) size 0x18
-                RenderInline {A} at (0,0) size 125x14
+                RenderInline {A} at (0,0) size 125x18
                   RenderText {#text} at (0,0) size 0x0
                   RenderImage {IMG} at (25,362) size 125x125
                 RenderText {#text} at (0,0) size 0x0
@@ -304,7 +304,7 @@ layer at (0,0) size 785x669
             RenderTableCell {TD} at (148,209) size 303x313 [bgcolor=#C0C0C0] [border: (1px inset #808080)] [r=3 c=1 rs=1 cs=2]
               RenderImage {IMG} at (4,4) size 290x35
               RenderBR {BR} at (294,39) size 0x0
-              RenderInline {A} at (0,0) size 249x15
+              RenderInline {A} at (0,0) size 249x18
                 RenderInline {FONT} at (0,0) size 249x15
                   RenderInline {SPAN} at (0,0) size 249x15
                     RenderInline {STRON} at (0,0) size 249x15
@@ -320,7 +320,7 @@ layer at (0,0) size 785x669
                     text run at (4,84) width 282: "better searches, news, and calculators than ever"
                     text run at (4,99) width 40: "before."
               RenderBR {BR} at (44,111) size 0x0
-              RenderInline {A} at (0,0) size 215x15
+              RenderInline {A} at (0,0) size 215x18
                 RenderInline {FONT} at (0,0) size 215x15
                   RenderInline {SPAN} at (0,0) size 215x15
                     RenderInline {STRONG} at (0,0) size 215x15
@@ -337,7 +337,7 @@ layer at (0,0) size 785x669
                     text run at (4,174) width 233: "of the day's top stories. Bloomberg daily"
                     text run at (4,189) width 259: "RocketEditions are FREE until September 1."
               RenderBR {BR} at (263,201) size 0x0
-              RenderInline {A} at (0,0) size 144x15
+              RenderInline {A} at (0,0) size 144x18
                 RenderInline {FONT} at (0,0) size 144x15
                   RenderInline {SPAN} at (0,0) size 144x15
                     RenderInline {STRONG} at (0,0) size 144x15
@@ -353,7 +353,7 @@ layer at (0,0) size 785x669
                     text run at (4,234) width 294: "report of the top stories in business & finance from"
                     text run at (4,249) width 205: "BLOOMBERG NEWS at 5pm EST."
               RenderBR {BR} at (209,261) size 0x0
-              RenderInline {A} at (0,0) size 179x15
+              RenderInline {A} at (0,0) size 179x18
                 RenderInline {FONT} at (0,0) size 179x15
                   RenderInline {SPAN} at (0,0) size 179x15
                     RenderInline {STRONG} at (0,0) size 179x15
index b009497..60e6e7f 100644 (file)
@@ -13,7 +13,7 @@ layer at (0,0) size 800x600
           RenderTableSection {TBODY} at (0,0) size 800x80
             RenderTableRow {TR} at (0,0) size 800x20
               RenderTableCell {TD} at (0,0) size 328x60 [r=0 c=0 rs=2 cs=1]
-                RenderInline {A} at (0,0) size 250x14 [color=#003399]
+                RenderInline {A} at (0,0) size 250x18 [color=#003399]
                   RenderImage {IMG} at (0,0) size 250x60
               RenderTableCell {TD} at (328,0) size 23x20 [r=0 c=1 rs=1 cs=1]
                 RenderImage {IMG} at (5,0) size 18x20
@@ -68,7 +68,7 @@ layer at (0,0) size 800x600
                   RenderText {#text} at (0,0) size 0x0
             RenderTableRow {TR} at (0,20) size 800x40
               RenderTableCell {TD} at (328,20) size 472x40 [r=1 c=1 rs=1 cs=2]
-                RenderInline {A} at (0,0) size 112x14 [color=#003399]
+                RenderInline {A} at (0,0) size 112x18 [color=#003399]
                   RenderImage {IMG} at (360,0) size 112x40
             RenderTableRow {TR} at (0,60) size 800x20
               RenderTableCell {TD} at (0,64) size 800x12 [bgcolor=#6699CC] [r=2 c=0 rs=1 cs=4]
index 3b26dcf..43b8f7e 100644 (file)
@@ -14,6 +14,6 @@ layer at (0,0) size 800x600
               RenderImage {IMG} at (2,2) size 6x113
           RenderTableRow {TR} at (0,13) size 343x34
             RenderTableCell {TD} at (130,13) size 199x34 [border: (1px inset #808080)] [r=1 c=2 rs=1 cs=1]
-              RenderInline {A} at (0,0) size 195x14 [color=#0000EE]
+              RenderInline {A} at (0,0) size 195x18 [color=#0000EE]
                 RenderText {#text} at (0,0) size 0x0
                 RenderImage {IMG} at (2,2) size 195x30
index 0f208c1..4b40979 100644 (file)
@@ -29,7 +29,7 @@ layer at (0,0) size 800x600
                         RenderTableSection {TBODY} at (0,0) size 128x111
                           RenderTableRow {TR} at (0,0) size 128x111
                             RenderTableCell {TD} at (0,0) size 128x111 [r=0 c=0 rs=1 cs=1]
-                              RenderInline {A} at (0,0) size 112x14 [color=#0000EE]
+                              RenderInline {A} at (0,0) size 112x18 [color=#0000EE]
                                 RenderImage {IMG} at (0,0) size 112x111
           RenderTableRow {TR} at (0,231) size 778x184
             RenderTableCell {TD} at (0,322) size 134x2 [border: (1px inset #808080)] [r=1 c=0 rs=1 cs=1]
index cca3caa..7479ecc 100644 (file)
@@ -28,14 +28,14 @@ layer at (0,0) size 785x4619
                       RenderInline {O:P} at (0,0) size 0x0
             RenderTableRow {TR} at (0,21) size 473x34
               RenderTableCell {TD} at (0,21) size 98x34 [r=1 c=0 rs=1 cs=1]
-                RenderInline {B} at (0,0) size 54x34
+                RenderInline {B} at (0,0) size 54x35
                   RenderInline {SPAN} at (0,0) size 54x34
                     RenderText {#text} at (22,0) size 54x34
                       text run at (22,0) width 54: "Channel"
                       text run at (24,17) width 50: "number"
                 RenderText {#text} at (0,0) size 0x0
               RenderTableCell {TD} at (98,21) size 170x17 [r=1 c=1 rs=1 cs=1]
-                RenderInline {B} at (0,0) size 94x17
+                RenderInline {B} at (0,0) size 94x18
                   RenderInline {SPAN} at (0,0) size 94x17
                     RenderText {#text} at (38,0) size 94x17
                       text run at (38,0) width 94: "Member name"
@@ -189,7 +189,7 @@ layer at (0,0) size 785x4619
                     text run at (32,0) width 20: "Yes"
               RenderTableCell {TD} at (367,153) size 106x32 [r=6 c=3 rs=1 cs=1]
                 RenderBlock (anonymous) at (7,0) size 92x16
-                  RenderInline {SPAN} at (0,0) size 16x15
+                  RenderInline {SPAN} at (0,0) size 16x18
                     RenderInline {FONT} at (0,0) size 16x15
                       RenderText {#text} at (38,0) size 16x15
                         text run at (38,0) width 16: "No"
index b0b26ad..443585a 100644 (file)
@@ -159,7 +159,7 @@ layer at (0,0) size 785x1205
               RenderText {#text} at (2,2) size 43x22
                 text run at (2,2) width 43: "TD L"
       RenderBlock {DIV} at (0,1143) size 769x31
-        RenderInline {A} at (0,0) size 88x12 [color=#FFFF00]
+        RenderInline {A} at (0,0) size 88x15 [color=#FFFF00]
           RenderImage {IMG} at (0,0) size 88x31
         RenderText {#text} at (0,0) size 0x0
       RenderBlock {ADDRESS} at (0,1174) size 769x15
index a03ecda..0bfb6d0 100644 (file)
@@ -1,6 +1,6 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
-layer at (0,0) size 800x138
+layer at (0,0) size 800x521
   RenderBlock {HTML} at (0,0) size 800x138
     RenderBody {BODY} at (8,8) size 784x122
       RenderTable {TABLE} at (0,0) size 200x122 [border: (1px outset #808080)]
index 56904f7..4e915e5 100644 (file)
@@ -36,23 +36,23 @@ layer at (30,500) size 314x90
       RenderText {#text} at (0,72) size 314x18
         text run at (0,72) width 314: "PASS: event at (594, 86) hit box12 at offset (2, 2)"
     RenderBR {BR} at (314,86) size 0x0
-layer at (42,42) size 140x141
+layer at (42,42) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
-layer at (63,63) size 100x161
+layer at (63,63) size 100x100
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)]
-layer at (104,104) size 100x111
+layer at (104,104) size 100x100
   RenderBlock (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)]
 layer at (125,125) size 90x90
   RenderBlock {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)]
-layer at (288,42) size 140x141
+layer at (288,42) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
-layer at (309,63) size 100x121
+layer at (309,63) size 100x100
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)]
 layer at (330,84) size 100x100
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
 layer at (351,85) size 90x90
   RenderBlock {DIV} at (21,1) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)]
-layer at (534,42) size 140x141
+layer at (534,42) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
 layer at (555,63) size 121x121
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)]
index 6eba1b6..94d0dd3 100644 (file)
@@ -9,17 +9,17 @@ layer at (0,0) size 785x600
       RenderText {#text} at (0,0) size 0x0
       RenderText {#text} at (0,0) size 0x0
       RenderText {#text} at (0,0) size 0x0
-layer at (42,42) size 340x341
+layer at (42,42) size 340x340
   RenderBlock {DIV} at (21,21) size 340x340 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
-layer at (63,63) size 300x361
+layer at (63,63) size 300x300
   RenderBlock {DIV} at (21,21) size 300x300 [bgcolor=#81AA8A] [border: (1px solid #000000)]
-layer at (104,104) size 300x361
+layer at (104,104) size 300x300
   RenderBlock {DIV} at (41,41) size 300x300 [border: (1px solid #000000)]
-layer at (145,145) size 300x361
+layer at (145,145) size 300x300
   RenderBlock {DIV} at (41,41) size 300x300 [bgcolor=#AA7994] [border: (1px solid #000000)]
-layer at (186,186) size 300x361
+layer at (186,186) size 300x300
   RenderBlock {DIV} at (41,41) size 300x300 [border: (1px solid #000000)]
-layer at (227,227) size 300x361
+layer at (227,227) size 300x300
   RenderBlock {DIV} at (41,41) size 300x300 [bgcolor=#81AA8A] [border: (1px solid #000000)]
 layer at (268,268) size 300x300
   RenderBlock {DIV} at (41,41) size 300x300 [border: (1px solid #000000)]
index 9f8d00b..705743e 100644 (file)
@@ -56,22 +56,22 @@ layer at (30,500) size 338x162
       RenderText {#text} at (0,144) size 338x18
         text run at (0,144) width 338: "PASS: event at (472, 507) hit box14 at offset (97, 97)"
     RenderBR {BR} at (338,158) size 0x0
-layer at (42,42) size 140x141
+layer at (42,42) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
 layer at (63,63) size 100x100
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)]
-layer at (288,42) size 140x141
+layer at (288,42) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
 layer at (309,63) size 121x121
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)]
     RenderBlock {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)]
-layer at (42,288) size 140x141
+layer at (42,288) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
-layer at (63,309) size 100x121
+layer at (63,309) size 100x100
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)]
 layer at (84,330) size 100x100
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)]
-layer at (288,288) size 140x141
+layer at (288,288) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
 layer at (309,309) size 121x121
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)]
index 57cce92..d77daef 100644 (file)
@@ -56,22 +56,22 @@ layer at (30,500) size 338x162
       RenderText {#text} at (0,144) size 338x18
         text run at (0,144) width 338: "PASS: event at (500, 484) hit box14 at offset (96, 96)"
     RenderBR {BR} at (338,158) size 0x0
-layer at (42,42) size 140x141
+layer at (42,42) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
 layer at (63,63) size 100x100
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)]
-layer at (288,42) size 140x141
+layer at (288,42) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
 layer at (309,63) size 121x121
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)]
     RenderBlock {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)]
-layer at (42,288) size 140x141
+layer at (42,288) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
-layer at (63,309) size 100x121
+layer at (63,309) size 100x100
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)]
 layer at (84,330) size 100x100
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)]
-layer at (288,288) size 140x141
+layer at (288,288) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
 layer at (309,309) size 121x121
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)]
index cfe9e3d..64fe0c9 100644 (file)
@@ -30,7 +30,7 @@ layer at (21,21) size 302x302
   RenderBlock (relative positioned) {DIV} at (20,20) size 302x302 [border: (1px solid #000000)]
 layer at (42,42) size 260x260
   RenderBlock (positioned) {DIV} at (21,21) size 260x260 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
-layer at (73,63) size 200x201
+layer at (73,63) size 200x200
   RenderBlock (positioned) {DIV} at (31,21) size 200x200 [bgcolor=#AAAAAA] [border: (1px solid #000000)]
 layer at (124,114) size 100x100
   RenderBlock (relative positioned) {DIV} at (51,51) size 100x100 [bgcolor=#0000FF]
index 2904cca..3eee34b 100644 (file)
@@ -94,39 +94,39 @@ layer at (30,500) size 338x306
       RenderText {#text} at (0,288) size 338x18
         text run at (0,288) width 338: "PASS: event at (745, 505) hit box20 at offset (86, 87)"
     RenderBR {BR} at (338,302) size 0x0
-layer at (42,42) size 140x141
+layer at (42,42) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
 layer at (63,63) size 100x100
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)]
-layer at (288,42) size 140x141
+layer at (288,42) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
 layer at (309,63) size 111x111
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)]
     RenderBlock {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)]
-layer at (534,42) size 140x141
+layer at (534,42) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
-layer at (555,63) size 100x111
+layer at (555,63) size 100x100
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)]
 layer at (576,84) size 90x90
   RenderBlock (relative positioned) {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)]
-layer at (42,288) size 140x141
+layer at (42,288) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
-layer at (63,309) size 100x161
+layer at (63,309) size 100x100
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)]
 layer at (104,350) size 100x100
   RenderBlock (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)]
-layer at (288,288) size 140x141
+layer at (288,288) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
-layer at (309,309) size 100x161
+layer at (309,309) size 100x100
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)]
 layer at (350,350) size 111x111
   RenderBlock (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)]
     RenderBlock {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)]
-layer at (534,288) size 140x141
+layer at (534,288) size 140x140
   RenderBlock {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)]
-layer at (555,309) size 100x161
+layer at (555,309) size 100x100
   RenderBlock (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)]
-layer at (596,350) size 100x161
+layer at (596,350) size 100x100
   RenderBlock (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)]
 layer at (637,391) size 111x111
   RenderBlock (relative positioned) {DIV} at (41,41) size 100x100 [bgcolor=#AA7994] [border: (1px solid #000000)]
index 00e6007..d12cc67 100644 (file)
@@ -1,3 +1,240 @@
+2009-08-16  David Hyatt  <hyatt@apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        https://bugs.webkit.org/show_bug.cgi?id=20329, shadows and reflections incorrectly
+        considered part of scrollable overflow.
+
+        This patch takes the engine's concept of overflow and splits it into two types:
+        layout overflow and visual overflow.
+        
+        Layout overflow is about other boxes that spill out of an enclosing box,  For example,
+        in the inline flow case a tall image could spill out of a line box. Examples of 
+        visual overflow are shadows, text stroke (and eventually outline and
+        border-image).
+
+        Three objects tracked overflow before this patch: RenderBlock had 
+        m_overflowLeft/Top/Width/Height variables.  RootInlineBox had an Overflow*
+        that also had four overflow values.  Finally RenderReplaced elements tracked shadow/reflection
+        overflow using a map that cached four values.
+        
+        This patch takes all of these different overflow models and unifies them into a single
+        new class called RenderOverflow.   This class is now a member variable in RenderBox and
+        InlineFlowBoxes.  It is only allocated if overflow actually exists.  Instead of tracking
+        four values, it tracks eight: left/top/right/bottom for layout overflow and 
+        left/top/right/bottom for visual overflow.
+        
+        Overflow computation is now done after layout is finished rather than during layout
+        (when child objects can be churning and moving around).  A number of layout tests progressed
+        by deferring overflow computation to a separate pass.
+        
+        All inline flow boxes now track overflow (and not just the root line box).  This allows
+        repainting of line boxes to actually be tight and bail early if the overflow rect of a box
+        doesn't intersect.  The old code always visited all object on a line if the root line box
+        intersected at all.
+        
+        Line box overflow no longer propagates across self-painting layers.  This fixes a number of
+        issues with incorrect scrollbars appearing when relative positioned inlines were used in a page.
+        
+        Layer bounds have been modified to exclude visual overflow.  The width/height members only really
+        have one reason for continued existence, and that is that they happen to be used in repaint()
+        when an overflow clip object's height isn't accurate.  In this case, the bounds should exclude
+        visual overflow anyway, so this change tightens that repaint up.
+        
+        Root lines have renamed m_selectionTop/Bottom to m_lineTop/Bottom and positionForPoint methods have
+        been changed to use these instead of relying on overflow (which was totally wrong).
+
+        Significant changes have been made to the "almost strict mode" line box quirk where objects with no
+        text children have no effect on the height of a line.  Instead of making the height() of the objects
+        variable and dependent on overflow, the objects now have their full height and get placed on
+        the baseline properly.  They simply don't contribute to overflow above lineTop/Bottom.
+        
+        Reflections are no longer considered overflow of any kind.  Because reflections have their own layers,
+        it is not necessary to treat them as visual or layout overflow in the RenderObject tree.  The end result
+        of not incorporating them into RenderOverflow is that they have no effect on scrolling.  transparencyClipBox
+        has been extended to support fully reflecting the entire clip box when a reflection exists.  This fixes
+        numerous repaint bugs in transparent objects with reflections when the transparent objects had self-painting
+        sublayers.
+
+        * WebCore.xcodeproj/project.pbxproj:
+        * dom/ContainerNode.cpp:
+        (WebCore::ContainerNode::getUpperLeftCorner):
+        * editing/visible_units.cpp:
+        (WebCore::previousLinePosition):
+        (WebCore::nextLinePosition):
+        * page/FrameView.cpp:
+        (WebCore::FrameView::adjustViewSize):
+        (WebCore::FrameView::adjustPageHeight):
+        * rendering/InlineBox.cpp:
+        (WebCore::InlineBox::height):
+        * rendering/InlineBox.h:
+        * rendering/InlineFlowBox.cpp:
+        (WebCore::InlineFlowBox::adjustPosition):
+        (WebCore::InlineFlowBox::placeBoxesHorizontally):
+        (WebCore::InlineFlowBox::placeBoxesVertically):
+        (WebCore::InlineFlowBox::computeVerticalOverflow):
+        (WebCore::InlineFlowBox::nodeAtPoint):
+        (WebCore::InlineFlowBox::paint):
+        * rendering/InlineFlowBox.h:
+        (WebCore::InlineFlowBox::InlineFlowBox):
+        (WebCore::InlineFlowBox::topCombinedOverflow):
+        (WebCore::InlineFlowBox::bottomCombinedOverflow):
+        (WebCore::InlineFlowBox::leftCombinedOverflow):
+        (WebCore::InlineFlowBox::rightCombinedOverflow):
+        (WebCore::InlineFlowBox::combinedOverflowRect):
+        (WebCore::InlineFlowBox::topLayoutOverflow):
+        (WebCore::InlineFlowBox::bottomLayoutOverflow):
+        (WebCore::InlineFlowBox::leftLayoutOverflow):
+        (WebCore::InlineFlowBox::rightLayoutOverflow):
+        (WebCore::InlineFlowBox::layoutOverflowRect):
+        (WebCore::InlineFlowBox::topVisualOverflow):
+        (WebCore::InlineFlowBox::bottomVisualOverflow):
+        (WebCore::InlineFlowBox::leftVisualOverflow):
+        (WebCore::InlineFlowBox::rightVisualOverflow):
+        (WebCore::InlineFlowBox::visualOverflowRect):
+        (WebCore::InlineFlowBox::setHorizontalOverflowPositions):
+        (WebCore::InlineFlowBox::setVerticalOverflowPositions):
+        * rendering/InlineTextBox.cpp:
+        (WebCore::InlineTextBox::paint):
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::RenderBlock):
+        (WebCore::RenderBlock::layout):
+        (WebCore::RenderBlock::layoutBlock):
+        (WebCore::RenderBlock::addOverflowFromBlockChildren):
+        (WebCore::RenderBlock::handleBottomOfBlock):
+        (WebCore::RenderBlock::layoutBlockChildren):
+        (WebCore::RenderBlock::paint):
+        (WebCore::RenderBlock::fillInlineSelectionGaps):
+        (WebCore::RenderBlock::floatRect):
+        (WebCore::RenderBlock::lowestPosition):
+        (WebCore::RenderBlock::rightmostPosition):
+        (WebCore::RenderBlock::leftmostPosition):
+        (WebCore::RenderBlock::addOverhangingFloats):
+        (WebCore::RenderBlock::nodeAtPoint):
+        (WebCore::RenderBlock::positionForPointWithInlineChildren):
+        (WebCore::RenderBlock::layoutColumns):
+        (WebCore::getHeightForLineCount):
+        * rendering/RenderBlock.h:
+        * rendering/RenderBlockLineLayout.cpp:
+        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
+        (WebCore::RenderBlock::computeVerticalPositionsForLine):
+        (WebCore::RenderBlock::layoutInlineChildren):
+        (WebCore::RenderBlock::matchedEndLine):
+        (WebCore::RenderBlock::addOverflowFromInlineChildren):
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::destroy):
+        (WebCore::RenderBox::clippedOverflowRectForRepaint):
+        (WebCore::RenderBox::localCaretRect):
+        (WebCore::RenderBox::addShadowAndReflectionOverflow):
+        (WebCore::RenderBox::addOverflowFromChild):
+        (WebCore::RenderBox::addLayoutOverflow):
+        (WebCore::RenderBox::addVisualOverflow):
+        (WebCore::RenderBox::clearLayoutOverflow):
+        * rendering/RenderBox.h:
+        (WebCore::RenderBox::combinedOverflowRect):
+        (WebCore::RenderBox::topCombinedOverflow):
+        (WebCore::RenderBox::bottomCombinedOverflow):
+        (WebCore::RenderBox::leftCombinedOverflow):
+        (WebCore::RenderBox::rightCombinedOverflow):
+        (WebCore::RenderBox::layoutOverflowRect):
+        (WebCore::RenderBox::topLayoutOverflow):
+        (WebCore::RenderBox::bottomLayoutOverflow):
+        (WebCore::RenderBox::leftLayoutOverflow):
+        (WebCore::RenderBox::rightLayoutOverflow):
+        (WebCore::RenderBox::visualOverflowRect):
+        (WebCore::RenderBox::topVisualOverflow):
+        (WebCore::RenderBox::bottomVisualOverflow):
+        (WebCore::RenderBox::leftVisualOverflow):
+        (WebCore::RenderBox::rightVisualOverflow):
+        * rendering/RenderFlexibleBox.cpp:
+        (WebCore::RenderFlexibleBox::layoutBlock):
+        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
+        (WebCore::RenderFlexibleBox::layoutVerticalBox):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::updateLayerPosition):
+        (WebCore::RenderLayer::localBoundingBox):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
+        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
+        * rendering/RenderLineBoxList.cpp:
+        (WebCore::RenderLineBoxList::paint):
+        (WebCore::RenderLineBoxList::hitTest):
+        * rendering/RenderListItem.cpp:
+        (WebCore::RenderListItem::positionListMarker):
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::RenderObject):
+        * rendering/RenderObject.h:
+        * rendering/RenderOverflow.h: Added.
+        (WebCore::RenderOverflow::RenderOverflow):
+        (WebCore::RenderOverflow::topLayoutOverflow):
+        (WebCore::RenderOverflow::bottomLayoutOverflow):
+        (WebCore::RenderOverflow::leftLayoutOverflow):
+        (WebCore::RenderOverflow::rightLayoutOverflow):
+        (WebCore::RenderOverflow::topVisualOverflow):
+        (WebCore::RenderOverflow::bottomVisualOverflow):
+        (WebCore::RenderOverflow::leftVisualOverflow):
+        (WebCore::RenderOverflow::rightVisualOverflow):
+        (WebCore::RenderOverflow::setTopLayoutOverflow):
+        (WebCore::RenderOverflow::setBottomLayoutOverflow):
+        (WebCore::RenderOverflow::setLeftLayoutOverflow):
+        (WebCore::RenderOverflow::setRightLayoutOverflow):
+        (WebCore::RenderOverflow::setTopVisualOverflow):
+        (WebCore::RenderOverflow::setBottomVisualOverflow):
+        (WebCore::RenderOverflow::setLeftVisualOverflow):
+        (WebCore::RenderOverflow::setRightVisualOverflow):
+        (WebCore::RenderOverflow::layoutOverflowRect):
+        (WebCore::RenderOverflow::visualOverflowRect):
+        (WebCore::RenderOverflow::combinedOverflowRect):
+        (WebCore::RenderOverflow::move):
+        (WebCore::RenderOverflow::addLayoutOverflow):
+        (WebCore::RenderOverflow::addVisualOverflow):
+        (WebCore::RenderOverflow::resetLayoutOverflow):
+        * rendering/RenderPartObject.cpp:
+        (WebCore::RenderPartObject::layout):
+        * rendering/RenderReplaced.cpp:
+        (WebCore::RenderReplaced::~RenderReplaced):
+        (WebCore::RenderReplaced::layout):
+        (WebCore::RenderReplaced::shouldPaint):
+        (WebCore::RenderReplaced::positionForPoint):
+        (WebCore::RenderReplaced::clippedOverflowRectForRepaint):
+        * rendering/RenderReplaced.h:
+        * rendering/RenderScrollbarPart.cpp:
+        (WebCore::RenderScrollbarPart::layout):
+        (WebCore::RenderScrollbarPart::paintIntoRect):
+        * rendering/RenderSlider.cpp:
+        (WebCore::RenderSlider::layout):
+        * rendering/RenderTable.cpp:
+        (WebCore::RenderTable::layout):
+        (WebCore::RenderTable::paint):
+        * rendering/RenderTableCell.cpp:
+        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
+        * rendering/RenderTableSection.cpp:
+        (WebCore::RenderTableSection::layoutRows):
+        * rendering/RenderTableSection.h:
+        * rendering/RenderText.cpp:
+        (WebCore::RenderText::positionForPoint):
+        (WebCore::RenderText::localCaretRect):
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::layout):
+        * rendering/RootInlineBox.cpp:
+        (WebCore::RootInlineBox::addHighlightOverflow):
+        (WebCore::RootInlineBox::adjustPosition):
+        (WebCore::RootInlineBox::verticallyAlignBoxes):
+        (WebCore::RootInlineBox::selectionTop):
+        * rendering/RootInlineBox.h:
+        (WebCore::RootInlineBox::RootInlineBox):
+        (WebCore::RootInlineBox::nextRootBox):
+        (WebCore::RootInlineBox::prevRootBox):
+        (WebCore::RootInlineBox::lineTop):
+        (WebCore::RootInlineBox::lineBottom):
+        (WebCore::RootInlineBox::selectionBottom):
+        (WebCore::RootInlineBox::selectionHeight):
+        (WebCore::RootInlineBox::floats):
+        (WebCore::RootInlineBox::floatsPtr):
+        (WebCore::RootInlineBox::setLineTopBottomPositions):
+        * rendering/SVGRootInlineBox.cpp:
+        (WebCore::SVGRootInlineBox::layoutInlineBoxes):
+
 2009-08-18  Alexey Proskuryakov  <ap@apple.com>
 
         Reviewed by Darin Adler.
index b530d32..c7c7365 100644 (file)
                BCEFE1EA0DCA5F6400739219 /* JSXSLTProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCEFE1E80DCA5F6400739219 /* JSXSLTProcessor.cpp */; };
                BCEFE1EB0DCA5F6400739219 /* JSXSLTProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = BCEFE1E90DCA5F6400739219 /* JSXSLTProcessor.h */; };
                BCF524600FEBEE5D0095BF26 /* HTMLDataGridElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCF5245F0FEBEE5D0095BF26 /* HTMLDataGridElement.cpp */; };
+               BCFA930810333193007B25D1 /* RenderOverflow.h in Headers */ = {isa = PBXBuildFile; fileRef = BCFA930710333193007B25D1 /* RenderOverflow.h */; settings = {ATTRIBUTES = (Private, ); }; };
                BCFB2E5E0979E46400BA703D /* CachedResourceClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BCFB2E5D0979E46400BA703D /* CachedResourceClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
                BCFB2F76097A2E1A00BA703D /* Arena.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCFB2F74097A2E1A00BA703D /* Arena.cpp */; };
                BCFB2F77097A2E1A00BA703D /* Arena.h in Headers */ = {isa = PBXBuildFile; fileRef = BCFB2F75097A2E1A00BA703D /* Arena.h */; };
                BCEFE1E80DCA5F6400739219 /* JSXSLTProcessor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSXSLTProcessor.cpp; sourceTree = "<group>"; };
                BCEFE1E90DCA5F6400739219 /* JSXSLTProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSXSLTProcessor.h; sourceTree = "<group>"; };
                BCF5245F0FEBEE5D0095BF26 /* HTMLDataGridElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLDataGridElement.cpp; sourceTree = "<group>"; };
+               BCFA930710333193007B25D1 /* RenderOverflow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderOverflow.h; sourceTree = "<group>"; };
                BCFB2E5D0979E46400BA703D /* CachedResourceClient.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CachedResourceClient.h; sourceTree = "<group>"; };
                BCFB2F74097A2E1A00BA703D /* Arena.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Arena.cpp; sourceTree = "<group>"; };
                BCFB2F75097A2E1A00BA703D /* Arena.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Arena.h; sourceTree = "<group>"; };
                                BCEA4841097D93020094C9E4 /* RenderObject.h */,
                                BC60EFB60F33A0E700812A93 /* RenderObjectChildList.cpp */,
                                BC2CC8DE0F32881000A9DF26 /* RenderObjectChildList.h */,
+                               BCFA930710333193007B25D1 /* RenderOverflow.h */,
                                A871DEC80A1530C700B12A68 /* RenderPart.cpp */,
                                A871DECF0A1530C700B12A68 /* RenderPart.h */,
                                A871DECE0A1530C700B12A68 /* RenderPartObject.cpp */,
                                416E29A6102FA962007FC14E /* WorkerReportingProxy.h in Headers */,
                                B5C1123C102B6C4600096578 /* SQLTransactionCoordinator.h in Headers */,
                                D8B6152F1032495100C8554A /* Cookie.h in Headers */,
+                               BCFA930810333193007B25D1 /* RenderOverflow.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
index 569756c..1ec4eb3 100644 (file)
@@ -690,7 +690,7 @@ bool ContainerNode::getUpperLeftCorner(FloatPoint& point) const
             point = o->container()->localToAbsolute();
             if (o->isText() && toRenderText(o)->firstTextBox()) {
                 point.move(toRenderText(o)->linesBoundingBox().x(),
-                           toRenderText(o)->firstTextBox()->root()->topOverflow());
+                           toRenderText(o)->firstTextBox()->root()->lineTop());
             } else if (o->isBox()) {
                 RenderBox* box = toRenderBox(o);
                 point.move(box->x(), box->y());
index 869c893..c96fdfd 100644 (file)
@@ -611,7 +611,7 @@ VisiblePosition previousLinePosition(const VisiblePosition &visiblePosition, int
         Node* node = renderer->node();
         if (node && editingIgnoresContent(node))
             return Position(node->parent(), node->nodeIndex());
-        return renderer->positionForPoint(IntPoint(x - absPos.x(), root->topOverflow()));
+        return renderer->positionForPoint(IntPoint(x - absPos.x(), root->lineTop()));
     }
     
     // Could not find a previous line. This means we must already be on the first line.
@@ -712,7 +712,7 @@ VisiblePosition nextLinePosition(const VisiblePosition &visiblePosition, int x)
         Node* node = renderer->node();
         if (node && editingIgnoresContent(node))
             return Position(node->parent(), node->nodeIndex());
-        return renderer->positionForPoint(IntPoint(x - absPos.x(), root->topOverflow()));
+        return renderer->positionForPoint(IntPoint(x - absPos.x(), root->lineTop()));
     }    
 
     // Could not find a next line. This means we must already be on the last line.
index 1094a67..3dfdf61 100644 (file)
@@ -373,7 +373,7 @@ void FrameView::adjustViewSize()
     RenderView* root = m_frame->contentRenderer();
     if (!root)
         return;
-    setContentsSize(IntSize(root->overflowWidth(), root->overflowHeight()));
+    setContentsSize(IntSize(root->rightLayoutOverflow(), root->bottomLayoutOverflow()));
 }
 
 void FrameView::applyOverflowToViewport(RenderObject* o, ScrollbarMode& hMode, ScrollbarMode& vMode)
@@ -1596,7 +1596,7 @@ void FrameView::adjustPageHeight(float *newBottom, float oldTop, float oldBottom
         // Use a context with painting disabled.
         GraphicsContext context((PlatformGraphicsContext*)0);
         root->setTruncatedAt((int)floorf(oldBottom));
-        IntRect dirtyRect(0, (int)floorf(oldTop), root->overflowWidth(), (int)ceilf(oldBottom - oldTop));
+        IntRect dirtyRect(0, (int)floorf(oldTop), root->rightLayoutOverflow(), (int)ceilf(oldBottom - oldTop));
         root->layer()->paint(&context, dirtyRect);
         *newBottom = root->bestTruncatedAt();
         if (*newBottom == 0)
index bbf11b3..2575fb7 100644 (file)
@@ -98,18 +98,11 @@ int InlineBox::height() const
         return toRenderBox(m_renderer)->height();
 
     ASSERT(isInlineFlowBox());
-    const InlineFlowBox* flowBox = static_cast<const InlineFlowBox*>(this);
     RenderBoxModelObject* flowObject = boxModelObject();
     const Font& font = renderer()->style(m_firstLine)->font();
     int result = font.height();
-    bool strictMode = renderer()->document()->inStrictMode();
     if (parent())
         result += flowObject->borderTop() + flowObject->paddingTop() + flowObject->borderBottom() + flowObject->paddingBottom();
-    if (strictMode || flowBox->hasTextChildren() || flowObject->hasHorizontalBordersOrPadding())
-        return result;
-    int bottom = root()->bottomOverflow();
-    if (y() + result > bottom)
-        result = bottom - y();
     return result;
 }
 
index c03758d..e165f0c 100644 (file)
@@ -208,11 +208,6 @@ public:
     inline int baselinePosition(bool isRootLineBox) const { return renderer()->baselinePosition(m_firstLine, isRootLineBox); }
     inline int lineHeight(bool isRootLineBox) const { return renderer()->lineHeight(m_firstLine, isRootLineBox); }
 
-    virtual int topOverflow() const { return y(); }
-    virtual int bottomOverflow() const { return y() + height(); }
-    virtual int leftOverflow() const { return x(); }
-    virtual int rightOverflow() const { return x() + width(); }
-
     virtual int caretMinOffset() const;
     virtual int caretMaxOffset() const;
     virtual unsigned caretMaxRenderedOffset() const;
index 98c5c43..b97f40c 100644 (file)
@@ -168,6 +168,8 @@ void InlineFlowBox::adjustPosition(int dx, int dy)
     InlineRunBox::adjustPosition(dx, dy);
     for (InlineBox* child = firstChild(); child; child = child->nextOnLine())
         child->adjustPosition(dx, dy);
+    if (m_overflow)
+        m_overflow->move(dx, dy);
 }
 
 RenderLineBoxList* InlineFlowBox::rendererLineBoxes() const
@@ -249,16 +251,21 @@ void InlineFlowBox::determineSpacingForFlowBoxes(bool lastLine, RenderObject* en
     }
 }
 
-int InlineFlowBox::placeBoxesHorizontally(int xPos, int& leftPosition, int& rightPosition, bool& needsWordSpacing)
+int InlineFlowBox::placeBoxesHorizontally(int xPos, bool& needsWordSpacing)
 {
     // Set our x position.
     setX(xPos);
 
+    int leftLayoutOverflow = xPos;
+    int rightLayoutOverflow = xPos;
+    int leftVisualOverflow = xPos;
+    int rightVisualOverflow = xPos;
+
     int boxShadowLeft;
     int boxShadowRight;
     renderer()->style(m_firstLine)->getBoxShadowHorizontalExtent(boxShadowLeft, boxShadowRight);
 
-    leftPosition = min(xPos + boxShadowLeft, leftPosition);
+    leftVisualOverflow = min(xPos + boxShadowLeft, leftVisualOverflow);
 
     int startX = xPos;
     xPos += borderLeft() + paddingLeft();
@@ -276,23 +283,24 @@ int InlineFlowBox::placeBoxesHorizontally(int xPos, int& leftPosition, int& righ
             
             int strokeOverflow = static_cast<int>(ceilf(rt->style()->textStrokeWidth() / 2.0f));
             
-            // If letter-spacing is negative, we should factor that into right overflow. (Even in RTL, letter-spacing is
+            // If letter-spacing is negative, we should factor that into right layout overflow. (Even in RTL, letter-spacing is
             // applied to the right, so this is not an issue with left overflow.
             int letterSpacing = min(0, (int)rt->style(m_firstLine)->font().letterSpacing());
-            
+            rightLayoutOverflow = max(xPos + text->width() - letterSpacing, rightLayoutOverflow);
+
             int leftGlyphOverflow = -strokeOverflow;
             int rightGlyphOverflow = strokeOverflow - letterSpacing;
             
-            int visualOverflowLeft = leftGlyphOverflow;
-            int visualOverflowRight = rightGlyphOverflow;
+            int childOverflowLeft = leftGlyphOverflow;
+            int childOverflowRight = rightGlyphOverflow;
             for (ShadowData* shadow = rt->style()->textShadow(); shadow; shadow = shadow->next) {
-                visualOverflowLeft = min(visualOverflowLeft, shadow->x - shadow->blur + leftGlyphOverflow);
-                visualOverflowRight = max(visualOverflowRight, shadow->x + shadow->blur + rightGlyphOverflow);
+                childOverflowLeft = min(childOverflowLeft, shadow->x - shadow->blur + leftGlyphOverflow);
+                childOverflowRight = max(childOverflowRight, shadow->x + shadow->blur + rightGlyphOverflow);
             }
             
-            leftPosition = min(xPos + visualOverflowLeft, leftPosition);
-            rightPosition = max(xPos + text->width() + visualOverflowRight, rightPosition);
-            m_maxHorizontalVisualOverflow = max(max(visualOverflowRight, -visualOverflowLeft), (int)m_maxHorizontalVisualOverflow);
+            leftVisualOverflow = min(xPos + childOverflowLeft, leftVisualOverflow);
+            rightVisualOverflow = max(xPos + text->width() + childOverflowRight, rightVisualOverflow);
+            
             xPos += text->width();
         } else {
             if (curr->renderer()->isPositioned()) {
@@ -308,13 +316,21 @@ int InlineFlowBox::placeBoxesHorizontally(int xPos, int& leftPosition, int& righ
             if (curr->renderer()->isRenderInline()) {
                 InlineFlowBox* flow = static_cast<InlineFlowBox*>(curr);
                 xPos += flow->marginLeft();
-                xPos = flow->placeBoxesHorizontally(xPos, leftPosition, rightPosition, needsWordSpacing);
+                xPos = flow->placeBoxesHorizontally(xPos, needsWordSpacing);
                 xPos += flow->marginRight();
+                leftLayoutOverflow = min(leftLayoutOverflow, flow->leftLayoutOverflow());
+                rightLayoutOverflow = max(rightLayoutOverflow, flow->rightLayoutOverflow());
+                leftVisualOverflow = min(leftVisualOverflow, flow->leftVisualOverflow());
+                rightVisualOverflow = max(rightVisualOverflow, flow->rightVisualOverflow());
             } else if (!curr->renderer()->isListMarker() || toRenderListMarker(curr->renderer())->isInside()) {
                 xPos += curr->boxModelObject()->marginLeft();
                 curr->setX(xPos);
-                leftPosition = min(xPos + toRenderBox(curr->renderer())->overflowLeft(false), leftPosition);
-                rightPosition = max(xPos + toRenderBox(curr->renderer())->overflowWidth(false), rightPosition);
+                if (!toRenderBox(curr->renderer())->hasOverflowClip()) {
+                    leftLayoutOverflow = min(xPos + toRenderBox(curr->renderer())->leftLayoutOverflow(), leftLayoutOverflow);
+                    rightLayoutOverflow = max(xPos + toRenderBox(curr->renderer())->rightLayoutOverflow(), rightLayoutOverflow);
+                }
+                leftVisualOverflow = min(xPos + toRenderBox(curr->renderer())->leftVisualOverflow(), leftVisualOverflow);
+                rightVisualOverflow = max(xPos + toRenderBox(curr->renderer())->rightVisualOverflow(), rightVisualOverflow);
                 xPos += curr->width() + curr->boxModelObject()->marginRight();
             }
         }
@@ -322,45 +338,13 @@ int InlineFlowBox::placeBoxesHorizontally(int xPos, int& leftPosition, int& righ
 
     xPos += borderRight() + paddingRight();
     setWidth(xPos - startX);
-    rightPosition = max(x() + width() + boxShadowRight, rightPosition);
+    rightVisualOverflow = max(x() + width() + boxShadowRight, rightVisualOverflow);
+    rightLayoutOverflow = max(x() + width(), rightLayoutOverflow);
 
+    setHorizontalOverflowPositions(leftLayoutOverflow, rightLayoutOverflow, leftVisualOverflow, rightVisualOverflow);
     return xPos;
 }
 
-int InlineFlowBox::verticallyAlignBoxes(int heightOfBlock)
-{
-    int maxPositionTop = 0;
-    int maxPositionBottom = 0;
-    int maxAscent = 0;
-    int maxDescent = 0;
-
-    // Figure out if we're in strict mode.  Note that we can't simply use !style()->htmlHacks(),
-    // because that would match almost strict mode as well.
-    RenderObject* curr = renderer();
-    while (curr && !curr->node())
-        curr = curr->container();
-    bool strictMode = (curr && curr->document()->inStrictMode());
-    
-    computeLogicalBoxHeights(maxPositionTop, maxPositionBottom, maxAscent, maxDescent, strictMode);
-
-    if (maxAscent + maxDescent < max(maxPositionTop, maxPositionBottom))
-        adjustMaxAscentAndDescent(maxAscent, maxDescent, maxPositionTop, maxPositionBottom);
-
-    int maxHeight = maxAscent + maxDescent;
-    int topPosition = heightOfBlock;
-    int bottomPosition = heightOfBlock;
-    int selectionTop = heightOfBlock;
-    int selectionBottom = heightOfBlock;
-    placeBoxesVertically(heightOfBlock, maxHeight, maxAscent, strictMode, topPosition, bottomPosition, selectionTop, selectionBottom);
-
-    setVerticalOverflowPositions(topPosition, bottomPosition);
-    setVerticalSelectionPositions(selectionTop, selectionBottom);
-    
-    heightOfBlock += maxHeight;
-    
-    return heightOfBlock;
-}
-
 void InlineFlowBox::adjustMaxAscentAndDescent(int& maxAscent, int& maxDescent,
                                               int maxPositionTop, int maxPositionBottom)
 {
@@ -480,11 +464,10 @@ void InlineFlowBox::computeLogicalBoxHeights(int& maxPositionTop, int& maxPositi
     }
 }
 
-void InlineFlowBox::placeBoxesVertically(int yPos, int maxHeight, int maxAscent, bool strictMode,
-                                         int& topPosition, int& bottomPosition, int& selectionTop, int& selectionBottom)
+void InlineFlowBox::placeBoxesVertically(int yPos, int maxHeight, int maxAscent, bool strictMode, int& selectionTop, int& selectionBottom)
 {
     if (isRootInlineBox())
-        setY(yPos + max(0, maxAscent - baselinePosition(true))); // Place our root box.
+        setY(yPos + maxAscent - baselinePosition(true)); // Place our root box.
 
     for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) {
         if (curr->renderer()->isPositioned())
@@ -494,7 +477,7 @@ void InlineFlowBox::placeBoxesVertically(int yPos, int maxHeight, int maxAscent,
         // line-height).
         bool isInlineFlow = curr->isInlineFlowBox();
         if (isInlineFlow)
-            static_cast<InlineFlowBox*>(curr)->placeBoxesVertically(yPos, maxHeight, maxAscent, strictMode, topPosition, bottomPosition, selectionTop, selectionBottom);
+            static_cast<InlineFlowBox*>(curr)->placeBoxesVertically(yPos, maxHeight, maxAscent, strictMode, selectionTop, selectionBottom);
 
         bool childAffectsTopBottomPos = true;
         if (curr->y() == PositionTop)
@@ -505,43 +488,18 @@ void InlineFlowBox::placeBoxesVertically(int yPos, int maxHeight, int maxAscent,
             if ((isInlineFlow && !static_cast<InlineFlowBox*>(curr)->hasTextChildren()) && !curr->boxModelObject()->hasHorizontalBordersOrPadding() && !strictMode)
                 childAffectsTopBottomPos = false;
             int posAdjust = maxAscent - curr->baselinePosition(false);
-            if (!childAffectsTopBottomPos)
-                posAdjust = max(0, posAdjust);
             curr->setY(curr->y() + yPos + posAdjust);
         }
         
-        // FIXME: By only considering overflow as part of the root line box, we can't get an accurate picture regarding what the line
-        // actually needs to paint.  A line box that is part of a self-painting layer technically shouldn't contribute to the overflow
-        // of the line, but in order to not do this and paint accurately, we have to track the overflow somewhere else (either by storing overflow
-        // in each InlineFlowBox up the chain or in the layer itself).  Relative positioned objects on a line will cause scrollbars
-        // to appear when they shouldn't until we fix this issue.
         int newY = curr->y();
-        int overflowTop = 0;
-        int overflowBottom = 0;
         if (curr->isText() || curr->isInlineFlowBox()) {
             const Font& font = curr->renderer()->style(m_firstLine)->font();
             newY += curr->baselinePosition(false) - font.ascent();
-
-            curr->renderer()->style(m_firstLine)->getBoxShadowVerticalExtent(overflowTop, overflowBottom);
-
-            for (ShadowData* textShadow = curr->renderer()->style(m_firstLine)->textShadow(); textShadow; textShadow = textShadow->next) {
-                overflowTop = min(overflowTop, textShadow->y - textShadow->blur);
-                overflowBottom = max(overflowBottom, textShadow->y + textShadow->blur);
-            }
-
-            if (curr->renderer()->hasReflection()) {
-                RenderBox* box = toRenderBox(curr->renderer());
-                overflowTop = min(overflowTop, box->reflectionBox().y());
-                overflowBottom = max(overflowBottom, box->reflectionBox().bottom());
-            }
-
             if (curr->isInlineFlowBox())
                 newY -= curr->boxModelObject()->borderTop() + curr->boxModelObject()->paddingTop();
         } else if (!curr->renderer()->isBR()) {
             RenderBox* box = toRenderBox(curr->renderer());
             newY += box->marginTop();
-            overflowTop = box->overflowTop(false);
-            overflowBottom = box->overflowHeight(false) - box->height();
         }
 
         curr->setY(newY);
@@ -550,8 +508,6 @@ void InlineFlowBox::placeBoxesVertically(int yPos, int maxHeight, int maxAscent,
             int boxHeight = curr->height();
             selectionTop = min(selectionTop, newY);
             selectionBottom = max(selectionBottom, newY + boxHeight);
-            topPosition = min(topPosition, newY + overflowTop);
-            bottomPosition = max(bottomPosition, newY + boxHeight + overflowBottom);
         }
     }
 
@@ -565,8 +521,90 @@ void InlineFlowBox::placeBoxesVertically(int yPos, int maxHeight, int maxAscent,
     }
 }
 
+void InlineFlowBox::computeVerticalOverflow(int lineTop, int lineBottom, bool strictMode)
+{
+    int boxHeight = height();
+
+    // Any spillage outside of the line top and bottom is not considered overflow.  We just ignore this, since it only happens
+    // from the "your ascent/descent don't affect the line" quirk.
+    // FIXME: Technically this means there can be repaint errors in the case where a line box has a shadow or background that spills
+    // outside of the block. We should consider making any line box that has anything to render just stop respecting the quirk or making
+    // boxes that render something set visual overflow.
+    int topOverflow = max(y(), lineTop);
+    int bottomOverflow = min(y() + boxHeight, lineBottom);
+    
+    int topLayoutOverflow = topOverflow;
+    int bottomLayoutOverflow = bottomOverflow;
+    
+    int topVisualOverflow = topOverflow;
+    int bottomVisualOverflow = bottomOverflow;
+  
+    // box-shadow on root line boxes is applying to the block and not to the lines.
+    if (parent()) {
+        int boxShadowTop;
+        int boxShadowBottom;
+        renderer()->style(m_firstLine)->getBoxShadowVerticalExtent(boxShadowTop, boxShadowBottom);
+        
+        topVisualOverflow = min(y() + boxShadowTop, topVisualOverflow);
+        bottomVisualOverflow = max(y() + boxHeight + boxShadowBottom, bottomVisualOverflow);
+    }
+
+    for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) {
+        if (curr->renderer()->isPositioned())
+            continue; // Positioned placeholders don't affect calculations.
+        
+        if (curr->renderer()->isText()) {
+            InlineTextBox* text = static_cast<InlineTextBox*>(curr);
+            RenderText* rt = toRenderText(text->renderer());
+            if (rt->isBR())
+                continue;
+
+            int strokeOverflow = static_cast<int>(ceilf(rt->style()->textStrokeWidth() / 2.0f));
+            
+            int topGlyphOverflow = -strokeOverflow;
+            int bottomGlyphOverflow = strokeOverflow;
+            
+            int childOverflowTop = topGlyphOverflow;
+            int childOverflowBottom = bottomGlyphOverflow;
+            for (ShadowData* shadow = rt->style()->textShadow(); shadow; shadow = shadow->next) {
+                childOverflowTop = min(childOverflowTop, shadow->y - shadow->blur + topGlyphOverflow);
+                childOverflowBottom = max(childOverflowBottom, shadow->y + shadow->blur + bottomGlyphOverflow);
+            }
+            
+            topVisualOverflow = min(curr->y() + childOverflowTop, topVisualOverflow);
+            bottomVisualOverflow = max(curr->y() + text->height() + childOverflowBottom, bottomVisualOverflow);
+        } else if (!curr->boxModelObject()->hasSelfPaintingLayer()) {
+            // Only include overflow from inline flows and replaced inlines if they do not paint themselves.
+            if (curr->renderer()->isRenderInline()) {
+                InlineFlowBox* flow = static_cast<InlineFlowBox*>(curr);
+                flow->computeVerticalOverflow(lineTop, lineBottom, strictMode);
+                topLayoutOverflow = min(topLayoutOverflow, flow->topLayoutOverflow());
+                bottomLayoutOverflow = max(bottomLayoutOverflow, flow->bottomLayoutOverflow());
+                topVisualOverflow = min(topVisualOverflow, flow->topVisualOverflow());
+                bottomVisualOverflow = max(bottomVisualOverflow, flow->bottomVisualOverflow());
+            } else {
+                RenderBox* box = toRenderBox(curr->renderer());
+                int boxY = box->y();
+                if (!box->hasOverflowClip()) {
+                    topLayoutOverflow = min(boxY + toRenderBox(curr->renderer())->topLayoutOverflow(), topLayoutOverflow);
+                    bottomLayoutOverflow = max(boxY + toRenderBox(curr->renderer())->bottomLayoutOverflow(), bottomLayoutOverflow);
+                }
+                topVisualOverflow = min(boxY + toRenderBox(curr->renderer())->topVisualOverflow(), topVisualOverflow);
+                bottomVisualOverflow = max(boxY + toRenderBox(curr->renderer())->bottomVisualOverflow(), bottomVisualOverflow);
+            }
+        }
+    }
+    
+    setVerticalOverflowPositions(topLayoutOverflow, bottomLayoutOverflow, topVisualOverflow, bottomVisualOverflow, boxHeight);
+}
+
 bool InlineFlowBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& result, int x, int y, int tx, int ty)
 {
+    IntRect overflowRect(combinedOverflowRect());
+    overflowRect.move(tx, ty);
+    if (!overflowRect.contains(x, y))
+        return false;
+
     // Check children first.
     for (InlineBox* curr = lastChild(); curr; curr = curr->prevOnLine()) {
         if ((curr->renderer()->isText() || !curr->boxModelObject()->hasSelfPaintingLayer()) && curr->nodeAtPoint(request, result, x, y, tx, ty)) {
@@ -587,23 +625,14 @@ bool InlineFlowBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re
 
 void InlineFlowBox::paint(RenderObject::PaintInfo& paintInfo, int tx, int ty)
 {
-    int xPos = tx + m_x - renderer()->maximalOutlineSize(paintInfo.phase);
-    int w = width() + 2 * renderer()->maximalOutlineSize(paintInfo.phase);
-    int shadowLeft;
-    int shadowRight;
-
-    renderer()->style(m_firstLine)->getBoxShadowHorizontalExtent(shadowLeft, shadowRight);
-
-    for (ShadowData* textShadow = renderer()->style(m_firstLine)->textShadow(); textShadow; textShadow = textShadow->next) {
-        shadowLeft = min(textShadow->x - textShadow->blur, shadowLeft);
-        shadowRight = max(textShadow->x + textShadow->blur, shadowRight);
-    }
-
-    xPos += shadowLeft;
-    w += -shadowLeft + shadowRight;
-    bool intersectsDamageRect = xPos < paintInfo.rect.right() && xPos + w > paintInfo.rect.x();
+    IntRect overflowRect(combinedOverflowRect());
+    overflowRect.inflate(renderer()->maximalOutlineSize(paintInfo.phase));
+    overflowRect.move(tx, ty);
+    
+    if (!paintInfo.rect.intersects(overflowRect))
+        return;
 
-    if (intersectsDamageRect && paintInfo.phase != PaintPhaseChildOutlines) {
+    if (paintInfo.phase != PaintPhaseChildOutlines) {
         if (paintInfo.phase == PaintPhaseOutline || paintInfo.phase == PaintPhaseSelfOutline) {
             // Add ourselves to the paint info struct's list of inlines that need to paint their
             // outlines.
@@ -646,7 +675,7 @@ void InlineFlowBox::paint(RenderObject::PaintInfo& paintInfo, int tx, int ty)
     }
 
     // 4. Paint our strike-through
-    if (intersectsDamageRect && (paintInfo.phase == PaintPhaseForeground || paintInfo.phase == PaintPhaseSelection))
+    if (paintInfo.phase == PaintPhaseForeground || paintInfo.phase == PaintPhaseSelection)
         paintTextDecorations(paintInfo, tx, ty, true);
 }
 
index 809fd54..b51d74c 100644 (file)
@@ -22,6 +22,7 @@
 #define InlineFlowBox_h
 
 #include "InlineRunBox.h"
+#include "RenderOverflow.h"
 
 namespace WebCore {
 
@@ -35,10 +36,8 @@ public:
         : InlineRunBox(obj)
         , m_firstChild(0)
         , m_lastChild(0)
-        , m_maxHorizontalVisualOverflow(0)
         , m_includeLeftEdge(false)
         , m_includeRightEdge(false)
-        , m_hasTextChildren(true)
 #ifndef NDEBUG
         , m_hasBadChildList(false)
 #endif
@@ -121,18 +120,13 @@ public:
     void determineSpacingForFlowBoxes(bool lastLine, RenderObject* endObject);
     int getFlowSpacingWidth();
     bool onEndChain(RenderObject* endObject);
-    virtual int placeBoxesHorizontally(int x, int& leftPosition, int& rightPosition, bool& needsWordSpacing);
-    virtual int verticallyAlignBoxes(int heightOfBlock);
+    virtual int placeBoxesHorizontally(int x, bool& needsWordSpacing);
     void computeLogicalBoxHeights(int& maxPositionTop, int& maxPositionBottom,
                                   int& maxAscent, int& maxDescent, bool strictMode);
     void adjustMaxAscentAndDescent(int& maxAscent, int& maxDescent,
                                    int maxPositionTop, int maxPositionBottom);
-    void placeBoxesVertically(int y, int maxHeight, int maxAscent, bool strictMode,
-                              int& topPosition, int& bottomPosition, int& selectionTop, int& selectionBottom);
-    
-    virtual void setVerticalOverflowPositions(int /*top*/, int /*bottom*/) { }
-    virtual void setVerticalSelectionPositions(int /*top*/, int /*bottom*/) { }
-    short maxHorizontalVisualOverflow() const { return m_maxHorizontalVisualOverflow; }
+    void placeBoxesVertically(int y, int maxHeight, int maxAscent, bool strictMode, int& lineTop, int& lineBottom);
+    void computeVerticalOverflow(int lineTop, int lineBottom, bool strictMode);
 
     void removeChild(InlineBox* child);
 
@@ -146,12 +140,35 @@ public:
     void checkConsistency() const;
     void setHasBadChildList();
 
+    int topCombinedOverflow() const { return std::min(topLayoutOverflow(), topVisualOverflow()); }
+    int bottomCombinedOverflow() const { return std::max(bottomLayoutOverflow(), bottomVisualOverflow()); }
+    int leftCombinedOverflow() const { return std::min(leftLayoutOverflow(), leftVisualOverflow()); }
+    int rightCombinedOverflow() const { return std::max(rightLayoutOverflow(), rightVisualOverflow()); }
+    IntRect combinedOverflowRect() const { return m_overflow ? m_overflow->combinedOverflowRect() : IntRect(m_x, m_y, m_width, height());  }
+
+    int topLayoutOverflow() const { return m_overflow ? m_overflow->topLayoutOverflow() : m_y; }
+    int bottomLayoutOverflow() const { return m_overflow ? m_overflow->bottomLayoutOverflow() : m_y + height(); }
+    int leftLayoutOverflow() const { return m_overflow ? m_overflow->leftLayoutOverflow() : m_x; }
+    int rightLayoutOverflow() const { return m_overflow ? m_overflow->rightLayoutOverflow() : m_x + m_width; }
+    IntRect layoutOverflowRect() const { return m_overflow ? m_overflow->layoutOverflowRect() : IntRect(m_x, m_y, m_width, height()); }
+
+    int topVisualOverflow() const { return m_overflow ? m_overflow->topVisualOverflow() : m_y; }
+    int bottomVisualOverflow() const { return m_overflow ? m_overflow->bottomVisualOverflow() : m_y + height(); }
+    int leftVisualOverflow() const { return m_overflow ? m_overflow->leftVisualOverflow() : m_x; }
+    int rightVisualOverflow() const { return m_overflow ? m_overflow->rightVisualOverflow() : m_x + m_width; }
+    IntRect visualOverflowRect() const { return m_overflow ? m_overflow->visualOverflowRect() : IntRect(m_x, m_y, m_width, height()); }
+
+    void setHorizontalOverflowPositions(int leftLayoutOverflow, int rightLayoutOverflow, int leftVisualOverflow, int rightVisualOverflow);
+    void setVerticalOverflowPositions(int topLayoutOverflow, int bottomLayoutOverflow, int topVisualOverflow, int bottomVisualOverflow, int boxHeight);
+
+protected:
+    OwnPtr<RenderOverflow> m_overflow;
+
 private:
     virtual bool isInlineFlowBox() const { return true; }
 
     InlineBox* m_firstChild;
     InlineBox* m_lastChild;
-    short m_maxHorizontalVisualOverflow;
     
     bool m_includeLeftEdge : 1;
     bool m_includeRightEdge : 1;
@@ -162,6 +179,34 @@ private:
 #endif
 };
 
+inline void InlineFlowBox::setHorizontalOverflowPositions(int leftLayoutOverflow, int rightLayoutOverflow, int leftVisualOverflow, int rightVisualOverflow) 
+{ 
+    if (!m_overflow) {
+        if (leftLayoutOverflow == m_x && rightLayoutOverflow == m_x + m_width && leftVisualOverflow == m_x && rightVisualOverflow == m_x + m_width)
+            return;
+        m_overflow.set(new RenderOverflow(IntRect(m_x, m_y, m_width, m_renderer->style(m_firstLine)->font().height())));    
+    }
+
+    m_overflow->setLeftLayoutOverflow(leftLayoutOverflow);
+    m_overflow->setRightLayoutOverflow(rightLayoutOverflow);
+    m_overflow->setLeftVisualOverflow(leftVisualOverflow); 
+    m_overflow->setRightVisualOverflow(rightVisualOverflow);  
+}
+
+inline void InlineFlowBox::setVerticalOverflowPositions(int topLayoutOverflow, int bottomLayoutOverflow, int topVisualOverflow, int bottomVisualOverflow, int boxHeight)
+{
+    if (!m_overflow) {
+        if (topLayoutOverflow == m_y && bottomLayoutOverflow == m_y + boxHeight && topVisualOverflow == m_y && bottomVisualOverflow == m_y + boxHeight)
+            return;
+        m_overflow.set(new RenderOverflow(IntRect(m_x, m_y, m_width, boxHeight)));
+    }
+
+    m_overflow->setTopLayoutOverflow(topLayoutOverflow);
+    m_overflow->setBottomLayoutOverflow(bottomLayoutOverflow);
+    m_overflow->setTopVisualOverflow(topVisualOverflow); 
+    m_overflow->setBottomVisualOverflow(bottomVisualOverflow);  
+}
+
 #ifdef NDEBUG
 inline void InlineFlowBox::checkConsistency() const
 {
index 619fb95..751340d 100644 (file)
@@ -312,8 +312,12 @@ void InlineTextBox::paint(RenderObject::PaintInfo& paintInfo, int tx, int ty)
 
     ASSERT(paintInfo.phase != PaintPhaseSelfOutline && paintInfo.phase != PaintPhaseChildOutlines);
 
-    int xPos = tx + m_x - parent()->maxHorizontalVisualOverflow();
-    int w = width() + 2 * parent()->maxHorizontalVisualOverflow();
+    // FIXME: Technically we're potentially incorporating other visual overflow that had nothing to do with us.
+    // Would it be simpler to just check our own shadow and stroke overflow by hand here?
+    int leftOverflow = parent()->x() - parent()->leftVisualOverflow();
+    int rightOverflow = parent()->rightVisualOverflow() - (parent()->x() + parent()->width());
+    int xPos = tx + m_x - leftOverflow;
+    int w = width() + leftOverflow + rightOverflow;
     if (xPos >= paintInfo.rect.right() || xPos + w <= paintInfo.rect.x())
         return;
 
index 86cb953..7061920 100644 (file)
@@ -129,10 +129,6 @@ RenderBlock::RenderBlock(Node* node)
       , m_positionedObjects(0)
       , m_inlineContinuation(0)
       , m_maxMargin(0)
-      , m_overflowHeight(0)
-      , m_overflowWidth(0)
-      , m_overflowLeft(0)
-      , m_overflowTop(0)
       , m_lineHeight(-1)
 {
     setChildrenInline(true);
@@ -551,103 +547,6 @@ void RenderBlock::removeChild(RenderObject* oldChild)
     }
 }
 
-int RenderBlock::overflowHeight(bool includeInterior) const
-{
-    if (!includeInterior && hasOverflowClip()) {
-        int shadowTop;
-        int shadowBottom;
-        style()->getBoxShadowVerticalExtent(shadowTop, shadowBottom);
-
-        int inflatedHeight = height() + shadowBottom;
-        if (hasReflection())
-            inflatedHeight = max(inflatedHeight, reflectionBox().bottom());
-        return inflatedHeight;
-    }
-    return m_overflowHeight;
-}
-
-int RenderBlock::overflowWidth(bool includeInterior) const
-{
-    if (!includeInterior && hasOverflowClip()) {
-        int shadowLeft;
-        int shadowRight;
-        style()->getBoxShadowHorizontalExtent(shadowLeft, shadowRight);
-
-        int inflatedWidth = width() + shadowRight;
-        if (hasReflection())
-            inflatedWidth = max(inflatedWidth, reflectionBox().right());
-        return inflatedWidth;
-    }
-    return m_overflowWidth;
-}
-
-int RenderBlock::overflowLeft(bool includeInterior) const
-{
-    if (!includeInterior && hasOverflowClip()) {
-        int shadowLeft;
-        int shadowRight;
-        style()->getBoxShadowHorizontalExtent(shadowLeft, shadowRight);
-
-        int left = shadowLeft;
-        if (hasReflection())
-            left = min(left, reflectionBox().x());
-        return left;
-    }
-    return m_overflowLeft;
-}
-
-int RenderBlock::overflowTop(bool includeInterior) const
-{
-    if (!includeInterior && hasOverflowClip()) {
-        int shadowTop;
-        int shadowBottom;
-        style()->getBoxShadowVerticalExtent(shadowTop, shadowBottom);
-
-        int top = shadowTop;
-        if (hasReflection())
-            top = min(top, reflectionBox().y());
-        return top;
-    }
-    return m_overflowTop;
-}
-
-IntRect RenderBlock::overflowRect(bool includeInterior) const
-{
-    if (!includeInterior && hasOverflowClip()) {
-        IntRect box = borderBoxRect();
-
-        int shadowLeft;
-        int shadowRight;
-        int shadowTop;
-        int shadowBottom;
-        style()->getBoxShadowExtent(shadowTop, shadowRight, shadowBottom, shadowLeft);
-
-        box.move(shadowLeft, shadowTop);
-        box.setWidth(box.width() - shadowLeft + shadowRight);
-        box.setHeight(box.height() - shadowTop + shadowBottom);
-
-        if (hasReflection()) {
-            IntRect reflection(reflectionBox());
-            int reflectTop = min(box.y(), reflection.y());
-            int reflectBottom = max(box.bottom(), reflection.bottom());
-            box.setHeight(reflectBottom - reflectTop);
-            box.setY(reflectTop);
-            
-            int reflectLeft = min(box.x(), reflection.x());
-            int reflectRight = max(box.right(), reflection.right());
-            box.setWidth(reflectRight - reflectLeft);
-            box.setX(reflectLeft);
-        }
-        return box;
-    }
-
-    if (!includeInterior && hasOverflowClip())
-        return borderBoxRect();
-    int l = overflowLeft(includeInterior);
-    int t = overflowTop(includeInterior);
-    return IntRect(l, t, overflowWidth(includeInterior) - l, max(overflowHeight(includeInterior), height()) - t);
-}
-
 bool RenderBlock::isSelfCollapsingBlock() const
 {
     // We are not self-collapsing if we
@@ -731,31 +630,6 @@ void RenderBlock::updateScrollInfoAfterLayout()
     }
 }
 
-void RenderBlock::updateOverflowWithShadowAndReflection()
-{
-    if (hasOverflowClip())
-        return;
-
-    int shadowLeft;
-    int shadowRight;
-    int shadowTop;
-    int shadowBottom;
-    style()->getBoxShadowExtent(shadowTop, shadowRight, shadowBottom, shadowLeft);
-
-    m_overflowLeft = min(m_overflowLeft, shadowLeft);
-    m_overflowWidth = max(m_overflowWidth, width() + shadowRight);
-    m_overflowTop = min(m_overflowTop, shadowTop);
-    m_overflowHeight = max(m_overflowHeight, height() + shadowBottom);
-
-    if (hasReflection()) {
-        IntRect reflection(reflectionBox());
-        m_overflowLeft = min(m_overflowLeft, reflection.x());
-        m_overflowWidth = max(m_overflowWidth, reflection.right());
-        m_overflowTop = min(m_overflowTop, reflection.y());
-        m_overflowHeight = max(m_overflowHeight, reflection.bottom());
-    }
-}
-
 void RenderBlock::layout()
 {
     // Update our first letter info now.
@@ -766,13 +640,9 @@ void RenderBlock::layout()
     layoutBlock(false);
     
     // It's safe to check for control clip here, since controls can never be table cells.
-    if (hasControlClip()) {
-        // Because of the lightweight clip, there can never be any overflow from children.
-        m_overflowWidth = width();
-        m_overflowHeight = height();
-        m_overflowLeft = 0;
-        m_overflowTop = 0;
-    }
+    // If we have a lightweight clip, there can never be any overflow from children.
+    if (hasControlClip() && m_overflow)
+        clearLayoutOverflow();
 }
 
 void RenderBlock::layoutBlock(bool relayoutChildren)
@@ -794,8 +664,7 @@ void RenderBlock::layoutBlock(bool relayoutChildren)
     calcWidth();
     calcColumnWidth();
 
-    m_overflowWidth = width();
-    m_overflowLeft = 0;
+    m_overflow.clear();
 
     if (oldWidth != width() || oldColumnWidth != desiredColumnWidth())
         relayoutChildren = true;
@@ -805,8 +674,6 @@ void RenderBlock::layoutBlock(bool relayoutChildren)
     int previousHeight = height();
     setHeight(0);
 
-    m_overflowHeight = 0;
-
     // We use four values, maxTopPos, maxTopNeg, maxBottomPos, and maxBottomNeg, to track
     // our current maximal positive and negative margins.  These values are used when we
     // are collapsed with adjacent blocks, so for example, if you have block A and B
@@ -871,31 +738,35 @@ void RenderBlock::layoutBlock(bool relayoutChildren)
                 }
             }
         }
+        
         // We have to rebalance columns to the new height.
         layoutColumns(singleColumnBottom);
-
-        // If the block got expanded in size, then increase our overflowheight to match.
-        if (m_overflowHeight > height())
-            m_overflowHeight -= toAdd;
-        if (m_overflowHeight < height())
-            m_overflowHeight = height();
     }
+
     if (previousHeight != height())
         relayoutChildren = true;
 
-    if ((isCell || isInline() || isFloatingOrPositioned() || isRoot()) && !hasOverflowClip() && !hasControlClip())
-        addVisualOverflow(floatRect());
+    // It's weird that we're treating float information as normal flow overflow, but we do this because floatRect() isn't
+    // able to be propagated up the render tree yet.  Overflow information is however.  This check is designed to catch anyone
+    // who wasn't going to propagate float information up to the parent and yet could potentially be painted by its ancestor.
+    if (isRoot() || expandsToEncloseOverhangingFloats())
+        addOverflowFromFloats();
 
-    layoutPositionedObjects(relayoutChildren || isRoot());
-
-    positionListMarker();
+    // Add overflow from children (unless we're multi-column, since in that case all our child overflow is clipped anyway).
+    if (!hasColumns()) {
+        if (childrenInline())
+            addOverflowFromInlineChildren();
+        else
+            addOverflowFromBlockChildren();
+    }
 
-    // Always ensure our overflow width/height are at least as large as our width/height.
-    m_overflowWidth = max(m_overflowWidth, width());
-    m_overflowHeight = max(m_overflowHeight, height());
+    // Add visual overflow from box-shadow and reflections.
+    addShadowOverflow();
 
-    updateOverflowWithShadowAndReflection();
+    layoutPositionedObjects(relayoutChildren || isRoot());
 
+    positionListMarker();
+    
     statePusher.pop();
 
     // Update our scroll information if we're overflow:auto/scroll/hidden now that we know if
@@ -905,7 +776,7 @@ void RenderBlock::layoutBlock(bool relayoutChildren)
     // Repaint with our new bounds if they are different from our old bounds.
     bool didFullRepaint = repainter.repaintAfterLayout();
     if (!didFullRepaint && repaintTop != repaintBottom && (style()->visibility() == VISIBLE || enclosingLayer()->hasVisibleContent())) {
-        IntRect repaintRect(m_overflowLeft, repaintTop, m_overflowWidth - m_overflowLeft, repaintBottom - repaintTop);
+        IntRect repaintRect(leftCombinedOverflow(), repaintTop, rightCombinedOverflow() - leftCombinedOverflow(), repaintBottom - repaintTop);
 
         // FIXME: Deal with multiple column repainting.  We have to split the repaint
         // rect up into multiple rects if it spans columns.
@@ -934,6 +805,28 @@ void RenderBlock::layoutBlock(bool relayoutChildren)
     setNeedsLayout(false);
 }
 
+void RenderBlock::addOverflowFromBlockChildren()
+{
+    for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBox()) {
+        if (!child->isFloatingOrPositioned())
+            addOverflowFromChild(child);
+    }
+}
+
+void RenderBlock::addOverflowFromFloats()
+{
+    IntRect result;
+    if (!m_floatingObjects)
+        return;
+    FloatingObject* r;
+    DeprecatedPtrListIterator<FloatingObject> it(*m_floatingObjects);
+    for (; (r = it.current()); ++it) {
+        if (r->m_shouldPaint && !r->m_renderer->hasSelfPaintingLayer())
+            addOverflowFromChild(r->m_renderer, IntSize(r->m_left + r->m_renderer->marginLeft(), r->m_top + r->m_renderer->marginTop()));
+    }
+    return;
+}
+
 bool RenderBlock::expandsToEncloseOverhangingFloats() const
 {
     return isInlineBlockOrInlineTable() || isFloatingOrPositioned() || hasOverflowClip() || (parent() && parent()->isFlexibleBox()) || hasColumns() || isTableCell() || isFieldset();
@@ -1314,9 +1207,6 @@ void RenderBlock::handleBottomOfBlock(int top, int bottom, MarginInfo& marginInf
     // If this happens, ensure that the computed height is increased to the minimal height.
     setHeight(max(height(), top + bottom));
 
-    // Always make sure our overflow height is at least our height.
-    m_overflowHeight = max(height(), m_overflowHeight);
-
     // Update our bottom collapsed margin info.
     setCollapsedBottomMargin(marginInfo);
 }
@@ -1344,8 +1234,7 @@ void RenderBlock::layoutBlockChildren(bool relayoutChildren, int& maxFloatBottom
     int top = borderTop() + paddingTop();
     int bottom = borderBottom() + paddingBottom() + horizontalScrollbarHeight();
 
-    m_overflowHeight = top;
-    setHeight(m_overflowHeight);
+    setHeight(top);
 
     // The margin struct caches all our current margin collapsing state.  The compact struct caches state when we encounter compacts,
     MarginInfo marginInfo(this, top, bottom);
@@ -1474,15 +1363,6 @@ void RenderBlock::layoutBlockChildren(bool relayoutChildren, int& maxFloatBottom
         if (child->isBlockFlow() && toRenderBlock(child)->containsFloats())
             maxFloatBottom = max(maxFloatBottom, addOverhangingFloats(toRenderBlock(child), -child->x(), -child->y(), !childNeededLayout));
 
-        // Update our visual overflow in case the child spills out the block, but only if we were going to paint
-        // the child block ourselves.
-        if (!child->hasSelfPaintingLayer()) {
-            m_overflowTop = min(m_overflowTop, child->y() + child->overflowTop(false));
-            m_overflowHeight = max(m_overflowHeight, height() + child->overflowHeight(false) - child->height());
-            m_overflowWidth = max(child->x() + child->overflowWidth(false), m_overflowWidth);
-            m_overflowLeft = min(child->x() + child->overflowLeft(false), m_overflowLeft);
-        }
-
         IntSize childOffset(child->x() - oldRect.x(), child->y() - oldRect.y());
         if (childOffset.width() || childOffset.height()) {
             view()->addLayoutDelta(childOffset);
@@ -1501,7 +1381,7 @@ void RenderBlock::layoutBlockChildren(bool relayoutChildren, int& maxFloatBottom
 
         ASSERT(oldLayoutDelta == view()->layoutDelta());
     }
-
+    
     // Now do the handling of the bottom of the block, adding in our bottom border/padding and
     // determining the correct collapsed bottom margin information.
     handleBottomOfBlock(top, bottom, marginInfo);
@@ -1610,7 +1490,7 @@ void RenderBlock::paint(PaintInfo& paintInfo, int tx, int ty)
     // FIXME: Could eliminate the isRoot() check if we fix background painting so that the RenderView
     // paints the root's background.
     if (!isRoot()) {
-        IntRect overflowBox = overflowRect(false);
+        IntRect overflowBox = combinedOverflowRect();
         overflowBox.inflate(maximalOutlineSize(paintInfo.phase));
         overflowBox.move(tx, ty);
         if (!overflowBox.intersects(paintInfo.rect))
@@ -2147,9 +2027,9 @@ GapRects RenderBlock::fillInlineSelectionGaps(RenderBlock* rootBlock, int blockX
 
     if (lastSelectedLine && selectionState() != SelectionEnd && selectionState() != SelectionBoth) {
         // Go ahead and update our lastY to be the bottom of the last selected line.
-        lastTop = (ty - blockY) + lastSelectedLine->bottomOverflow();
-        lastLeft = leftSelectionOffset(rootBlock, lastSelectedLine->bottomOverflow());
-        lastRight = rightSelectionOffset(rootBlock, lastSelectedLine->bottomOverflow());
+        lastTop = (ty - blockY) + lastSelectedLine->selectionBottom();
+        lastLeft = leftSelectionOffset(rootBlock, lastSelectedLine->selectionBottom());
+        lastRight = rightSelectionOffset(rootBlock, lastSelectedLine->selectionBottom());
     }
     return result;
 }
@@ -2700,13 +2580,13 @@ RenderBlock::floatBottom() const
 IntRect RenderBlock::floatRect() const
 {
     IntRect result;
-    if (!m_floatingObjects || hasOverflowClip())
+    if (!m_floatingObjects || hasOverflowClip() || hasColumns())
         return result;
     FloatingObject* r;
     DeprecatedPtrListIterator<FloatingObject> it(*m_floatingObjects);
     for (; (r = it.current()); ++it) {
         if (r->m_shouldPaint && !r->m_renderer->hasSelfPaintingLayer()) {
-            IntRect childRect = r->m_renderer->overflowRect(false);
+            IntRect childRect = r->m_renderer->combinedOverflowRect();
             childRect.move(r->m_left + r->m_renderer->marginLeft(), r->m_top + r->m_renderer->marginTop());
             result.unite(childRect);
         }
@@ -2717,10 +2597,11 @@ IntRect RenderBlock::floatRect() const
 
 int RenderBlock::lowestPosition(bool includeOverflowInterior, bool includeSelf) const
 {
+    int bottom = includeSelf && width() > 0 ? height() : 0;
+
     if (!includeOverflowInterior && (hasOverflowClip() || hasControlClip()))
-        return includeSelf && width() > 0 ? overflowHeight(false) : 0;
+        return bottom;
     
-    int bottom = includeSelf && width() > 0 ? height() : 0;
     if (!hasColumns()) {
         // FIXME: Come up with a way to use the layer tree to avoid visiting all the kids.
         // For now, we have to descend into all the children, since we may have a huge abs div inside
@@ -2744,7 +2625,7 @@ int RenderBlock::lowestPosition(bool includeOverflowInterior, bool includeSelf)
     int relativeOffset = includeSelf && isRelPositioned() ? relativePositionOffsetY() : 0;
 
     if (includeSelf)
-        bottom = max(bottom, m_overflowHeight + relativeOffset);
+        bottom = max(bottom, bottomLayoutOverflow() + relativeOffset);
         
     if (m_positionedObjects) {
         RenderBox* r;
@@ -2786,8 +2667,8 @@ int RenderBlock::lowestPosition(bool includeOverflowInterior, bool includeSelf)
     if (!includeSelf) {
         bottom = max(bottom, borderTop() + paddingTop() + paddingBottom() + relativeOffset);
         if (childrenInline()) {
-            if (lastLineBox()) {
-                int childBottomEdge = lastLineBox()->y() + lastLineBox()->height();
+            if (lastRootBox()) {
+                int childBottomEdge = lastRootBox()->selectionBottom();
                 bottom = max(bottom, childBottomEdge + paddingBottom() + relativeOffset);
             }
         } else {
@@ -2807,11 +2688,11 @@ int RenderBlock::lowestPosition(bool includeOverflowInterior, bool includeSelf)
 
 int RenderBlock::rightmostPosition(bool includeOverflowInterior, bool includeSelf) const
 {
-    if (!includeOverflowInterior && (hasOverflowClip() || hasControlClip()))
-        return includeSelf && height() > 0 ? overflowWidth(false) : 0;
-
     int right = includeSelf && height() > 0 ? width() : 0;
 
+    if (!includeOverflowInterior && (hasOverflowClip() || hasControlClip()))
+        return right;
+
     if (!hasColumns()) {
         // FIXME: Come up with a way to use the layer tree to avoid visiting all the kids.
         // For now, we have to descend into all the children, since we may have a huge abs div inside
@@ -2834,7 +2715,7 @@ int RenderBlock::rightmostPosition(bool includeOverflowInterior, bool includeSel
     int relativeOffset = includeSelf && isRelPositioned() ? relativePositionOffsetX() : 0;
 
     if (includeSelf)
-        right = max(right, m_overflowWidth + relativeOffset);
+        right = max(right, rightLayoutOverflow() + relativeOffset);
 
     if (m_positionedObjects) {
         RenderBox* r;
@@ -2901,10 +2782,11 @@ int RenderBlock::rightmostPosition(bool includeOverflowInterior, bool includeSel
 
 int RenderBlock::leftmostPosition(bool includeOverflowInterior, bool includeSelf) const
 {
+    int left = includeSelf && height() > 0 ? 0 : width();
+    
     if (!includeOverflowInterior && (hasOverflowClip() || hasControlClip()))
-        return includeSelf && height() > 0 ? overflowLeft(false) : width();
+        return left;
 
-    int left = includeSelf && height() > 0 ? 0 : width();
     if (!hasColumns()) {
         // FIXME: Come up with a way to use the layer tree to avoid visiting all the kids.
         // For now, we have to descend into all the children, since we may have a huge abs div inside
@@ -2927,7 +2809,7 @@ int RenderBlock::leftmostPosition(bool includeOverflowInterior, bool includeSelf
     int relativeOffset = includeSelf && isRelPositioned() ? relativePositionOffsetX() : 0;
 
     if (includeSelf)
-        left = min(left, m_overflowLeft + relativeOffset);
+        left = min(left, leftLayoutOverflow() + relativeOffset);
 
     if (m_positionedObjects) {
         RenderBox* r;
@@ -3121,9 +3003,8 @@ int RenderBlock::addOverhangingFloats(RenderBlock* child, int xoff, int yoff, bo
 
     int lowestFloatBottom = 0;
 
-    // Floats that will remain the child's responsiblity to paint should factor into its
-    // visual overflow.
-    IntRect floatsOverflowRect;
+    // Floats that will remain the child's responsibility to paint should factor into its
+    // overflow.
     DeprecatedPtrListIterator<FloatingObject> it(*child->m_floatingObjects);
     for (FloatingObject* r; (r = it.current()); ++it) {
         int bottom = child->y() + r->m_bottom;
@@ -3164,13 +3045,9 @@ int RenderBlock::addOverhangingFloats(RenderBlock* child, int xoff, int yoff, bo
             // it should paint.
             r->m_shouldPaint = true;
 
-        if (r->m_shouldPaint && !r->m_renderer->hasSelfPaintingLayer()) {
-            IntRect floatOverflowRect = r->m_renderer->overflowRect(false);
-            floatOverflowRect.move(r->m_left + r->m_renderer->marginLeft(), r->m_top + r->m_renderer->marginTop());
-            floatsOverflowRect.unite(floatOverflowRect);
-        }
+        if (r->m_shouldPaint && !r->m_renderer->hasSelfPaintingLayer())
+            child->addOverflowFromChild(r->m_renderer, IntSize(r->m_left + r->m_renderer->marginLeft(), r->m_top + r->m_renderer->marginTop()));
     }
-    child->addVisualOverflow(floatsOverflowRect);
     return lowestFloatBottom;
 }
 
@@ -3299,16 +3176,6 @@ int RenderBlock::getClearDelta(RenderBox* child, int yPos)
     return result;
 }
 
-void RenderBlock::addVisualOverflow(const IntRect& r)
-{
-    if (r.isEmpty())
-        return;
-    m_overflowLeft = min(m_overflowLeft, r.x());
-    m_overflowWidth = max(m_overflowWidth, r.right());
-    m_overflowTop = min(m_overflowTop, r.y());
-    m_overflowHeight = max(m_overflowHeight, r.bottom());
-}
-
 bool RenderBlock::isPointInOverflowControl(HitTestResult& result, int _x, int _y, int _tx, int _ty)
 {
     if (!scrollsOverflow())
@@ -3324,7 +3191,7 @@ bool RenderBlock::nodeAtPoint(const HitTestRequest& request, HitTestResult& resu
 
     if (!isRenderView()) {
         // Check if we need to do anything at all.
-        IntRect overflowBox = overflowRect(false);
+        IntRect overflowBox = combinedOverflowRect();
         overflowBox.move(tx, ty);
         if (!overflowBox.contains(_x, _y))
             return false;
@@ -3533,9 +3400,9 @@ VisiblePosition RenderBlock::positionForPointWithInlineChildren(const IntPoint&
         if (root->nextRootBox()) {
             // FIXME: We would prefer to make the break point halfway between the bottom
             // of the previous root box and the top of the next root box.
-            bottom = root->nextRootBox()->topOverflow();
+            bottom = root->nextRootBox()->lineTop();
         } else
-            bottom = root->bottomOverflow() + verticalLineClickFudgeFactor;
+            bottom = root->lineBottom() + verticalLineClickFudgeFactor;
 
         // check if this root line box is located at this y coordinate
         if (pointInContents.y() < bottom) {
@@ -3554,7 +3421,7 @@ VisiblePosition RenderBlock::positionForPointWithInlineChildren(const IntPoint&
     }
 
     if (closestBox) {
-        if (!useWindowsBehavior && pointInContents.y() < firstRootBoxWithChildren->topOverflow() - verticalLineClickFudgeFactor) {
+        if (!useWindowsBehavior && pointInContents.y() < firstRootBoxWithChildren->lineTop() - verticalLineClickFudgeFactor) {
             // y coordinate is above first root line box, so return the start of the first
             return VisiblePosition(positionForBox(firstRootBoxWithChildren->firstLeafChild(), true), DOWNSTREAM);
         }
@@ -3827,14 +3694,16 @@ int RenderBlock::layoutColumns(int endOfContent)
             colCount++;
     }
 
-    m_overflowWidth = max(width(), currX - colGap);
-    m_overflowLeft = min(0, currX + desiredColumnWidth + colGap);
-
-    m_overflowHeight = maxColBottom;
+    int overflowRight = max(width(), currX - colGap);
+    int overflowLeft = min(0, currX + desiredColumnWidth + colGap);
+    int overflowHeight = maxColBottom;
     int toAdd = borderBottom() + paddingBottom() + horizontalScrollbarHeight();
         
     if (computeIntrinsicHeight)
-        setHeight(m_overflowHeight + toAdd);
+        setHeight(maxColBottom + toAdd);
+
+    m_overflow.clear();
+    addLayoutOverflow(IntRect(overflowLeft, 0, overflowRight - overflowLeft, overflowHeight));
 
     v->setPrintRect(IntRect());
     v->setTruncatedAt(0);
@@ -4754,7 +4623,7 @@ static int getHeightForLineCount(RenderBlock* block, int l, bool includeBottom,
         if (block->childrenInline()) {
             for (RootInlineBox* box = block->firstRootBox(); box; box = box->nextRootBox()) {
                 if (++count == l)
-                    return box->bottomOverflow() + (includeBottom ? (block->borderBottom() + block->paddingBottom()) : 0);
+                    return box->lineBottom() + (includeBottom ? (block->borderBottom() + block->paddingBottom()) : 0);
             }
         }
         else {
index 8ce6a4a..7343bd4 100644 (file)
@@ -67,17 +67,6 @@ public:
 
     void deleteLineBoxTree();
 
-    // The height (and width) of a block when you include overflow spillage out of the bottom
-    // of the block (e.g., a <div style="height:25px"> that has a 100px tall image inside
-    // it would have an overflow height of borderTop() + paddingTop() + 100px.
-    virtual int overflowHeight(bool includeInterior = true) const;
-    virtual int overflowWidth(bool includeInterior = true) const;
-    virtual int overflowLeft(bool includeInterior = true) const;
-    virtual int overflowTop(bool includeInterior = true) const;
-    virtual IntRect overflowRect(bool includeInterior = true) const;
-
-    void addVisualOverflow(const IntRect&);
-
     virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0);
     virtual void removeChild(RenderObject*);
 
@@ -150,9 +139,6 @@ public:
     RenderBlock* createAnonymousBlock(bool isFlexibleBox = false) const;
 
 protected:
-    virtual void setOverflowHeight(int h) { m_overflowHeight = h; }
-    virtual void setOverflowWidth(int w) { m_overflowWidth = w; }
-
     int maxTopPosMargin() const { return m_maxMargin ? m_maxMargin->m_topPos : MaxMargin::topPosDefault(this); }
     int maxTopNegMargin() const { return m_maxMargin ? m_maxMargin->m_topNeg : MaxMargin::topNegDefault(this); }
     int maxBottomPosMargin() const { return m_maxMargin ? m_maxMargin->m_bottomPos : MaxMargin::bottomPosDefault(this); }
@@ -205,8 +191,6 @@ protected:
     virtual bool hasLineIfEmpty() const;
     bool layoutOnlyPositionedObjects();
 
-    void updateOverflowWithShadowAndReflection();
-
 private:
     virtual RenderObjectChildList* virtualChildren() { return children(); }
     virtual const RenderObjectChildList* virtualChildren() const { return children(); }
@@ -274,11 +258,14 @@ private:
     InlineFlowBox* createLineBoxes(RenderObject*, bool firstLine);
     void computeHorizontalPositionsForLine(RootInlineBox*, bool firstLine, BidiRun* firstRun, BidiRun* trailingSpaceRun, bool reachedEnd);
     void computeVerticalPositionsForLine(RootInlineBox*, BidiRun*);
-    void checkLinesForOverflow();
     void deleteEllipsisLineBoxes();
     void checkLinesForTextOverflow();
+    void addOverflowFromInlineChildren();
     // End of functions defined in RenderBlockLineLayout.cpp.
 
+    void addOverflowFromBlockChildren();
+    void addOverflowFromFloats();
+
     void paintFloats(PaintInfo&, int tx, int ty, bool preservePhase = false);
     void paintContents(PaintInfo&, int tx, int ty);
     void paintColumnContents(PaintInfo&, int tx, int ty, bool paintFloats = false);
@@ -529,14 +516,6 @@ private:
     RenderObjectChildList m_children;
     RenderLineBoxList m_lineBoxes;   // All of the root line boxes created for this block flow.  For example, <div>Hello<br>world.</div> will have two total lines for the <div>.
 
-protected:
-    // How much content overflows out of our block vertically or horizontally.
-    int m_overflowHeight;
-    int m_overflowWidth;
-    int m_overflowLeft;
-    int m_overflowTop;
-
-private:
     mutable int m_lineHeight;
 };
 
index 2a70d6a..4ff970c 100644 (file)
@@ -763,11 +763,8 @@ void RenderBlock::computeHorizontalPositionsForLine(RootInlineBox* lineBox, bool
 
     // The widths of all runs are now known.  We can now place every inline box (and
     // compute accurate widths for the inline flow boxes).
-    int leftPosition = x;
-    int rightPosition = x;
     needsWordSpacing = false;
-    lineBox->placeBoxesHorizontally(x, leftPosition, rightPosition, needsWordSpacing);
-    lineBox->setHorizontalOverflowPositions(leftPosition, rightPosition);
+    lineBox->placeBoxesHorizontally(x, needsWordSpacing);
 }
 
 void RenderBlock::computeVerticalPositionsForLine(RootInlineBox* lineBox, BidiRun* firstRun)
@@ -775,11 +772,6 @@ void RenderBlock::computeVerticalPositionsForLine(RootInlineBox* lineBox, BidiRu
     setHeight(lineBox->verticallyAlignBoxes(height()));
     lineBox->setBlockHeight(height());
 
-    // See if the line spilled out.  If so set overflow height accordingly.
-    int bottomOfLine = lineBox->bottomOverflow();
-    if (bottomOfLine > height() && bottomOfLine > m_overflowHeight)
-        m_overflowHeight = bottomOfLine;
-
     // Now make sure we place replaced render objects correctly.
     for (BidiRun* r = firstRun; r; r = r->next()) {
         ASSERT(r->m_box);
@@ -824,7 +816,7 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
 {
     bool useRepaintBounds = false;
     
-    m_overflowHeight = 0;
+    m_overflow.clear();
         
     setHeight(borderTop() + paddingTop());
     int toAdd = borderBottom() + paddingBottom() + horizontalScrollbarHeight();
@@ -921,8 +913,8 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
             RenderArena* arena = renderArena();
             RootInlineBox* box = startLine;
             while (box) {
-                repaintTop = min(repaintTop, box->topOverflow());
-                repaintBottom = max(repaintBottom, box->bottomOverflow());
+                repaintTop = min(repaintTop, box->topCombinedOverflow());
+                repaintBottom = max(repaintBottom, box->bottomCombinedOverflow());
                 RootInlineBox* next = box->nextRootBox();
                 box->deleteLine(arena);
                 box = next;
@@ -1058,8 +1050,8 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
                 if (lineBox) {
                     lineBox->setLineBreakInfo(end.obj, end.pos, resolver.status());
                     if (useRepaintBounds) {
-                        repaintTop = min(repaintTop, lineBox->topOverflow());
-                        repaintBottom = max(repaintBottom, lineBox->bottomOverflow());
+                        repaintTop = min(repaintTop, lineBox->topCombinedOverflow());
+                        repaintBottom = max(repaintBottom, lineBox->bottomCombinedOverflow());
                     }
                 }
 
@@ -1098,8 +1090,8 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
                 for (RootInlineBox* line = endLine; line; line = line->nextRootBox()) {
                     line->attachLine();
                     if (delta) {
-                        repaintTop = min(repaintTop, line->topOverflow() + min(delta, 0));
-                        repaintBottom = max(repaintBottom, line->bottomOverflow() + max(delta, 0));
+                        repaintTop = min(repaintTop, line->topCombinedOverflow() + min(delta, 0));
+                        repaintBottom = max(repaintBottom, line->bottomCombinedOverflow() + max(delta, 0));
                         line->adjustPosition(0, delta);
                     }
                     if (Vector<RenderBox*>* cleanLineFloats = line->floatsPtr()) {
@@ -1115,12 +1107,12 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
                 setHeight(lastRootBox()->blockHeight());
             } else {
                 // Delete all the remaining lines.
-                InlineRunBox* line = endLine;
+                RootInlineBox* line = endLine;
                 RenderArena* arena = renderArena();
                 while (line) {
-                    repaintTop = min(repaintTop, line->topOverflow());
-                    repaintBottom = max(repaintBottom, line->bottomOverflow());
-                    InlineRunBox* next = line->nextLineBox();
+                    repaintTop = min(repaintTop, line->topCombinedOverflow());
+                    repaintBottom = max(repaintBottom, line->bottomCombinedOverflow());
+                    RootInlineBox* next = line->nextRootBox();
                     line->deleteLine(arena);
                     line = next;
                 }
@@ -1158,12 +1150,6 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
     // Now add in the bottom border/padding.
     setHeight(height() + toAdd);
 
-    // Always make sure this is at least our height.
-    m_overflowHeight = max(height(), m_overflowHeight);
-
-    // See if any lines spill out of the block.  If so, we need to update our overflow width.
-    checkLinesForOverflow();
-
     if (!firstLineBox() && hasLineIfEmpty())
         setHeight(height() + lineHeight(true, true));
 
@@ -1390,8 +1376,8 @@ bool RenderBlock::matchedEndLine(const InlineBidiResolver& resolver, const Inlin
             RootInlineBox* boxToDelete = endLine;
             RenderArena* arena = renderArena();
             while (boxToDelete && boxToDelete != result) {
-                repaintTop = min(repaintTop, boxToDelete->topOverflow());
-                repaintBottom = max(repaintBottom, boxToDelete->bottomOverflow());
+                repaintTop = min(repaintTop, boxToDelete->topCombinedOverflow());
+                repaintBottom = max(repaintBottom, boxToDelete->bottomCombinedOverflow());
                 RootInlineBox* next = boxToDelete->nextRootBox();
                 boxToDelete->deleteLine(arena);
                 boxToDelete = next;
@@ -2211,14 +2197,12 @@ InlineIterator RenderBlock::findNextLineBreak(InlineBidiResolver& resolver, bool
     return lBreak;
 }
 
-void RenderBlock::checkLinesForOverflow()
+void RenderBlock::addOverflowFromInlineChildren()
 {
-    m_overflowWidth = width();
     for (RootInlineBox* curr = firstRootBox(); curr; curr = curr->nextRootBox()) {
-        m_overflowLeft = min(curr->leftOverflow(), m_overflowLeft);
-        m_overflowTop = min(curr->topOverflow(), m_overflowTop);
-        m_overflowWidth = max(curr->rightOverflow(), m_overflowWidth);
-        m_overflowHeight = max(curr->bottomOverflow(), m_overflowHeight);
+        addLayoutOverflow(curr->layoutOverflowRect());
+        if (!hasOverflowClip())
+            addVisualOverflow(curr->visualOverflowRect());
     }
 }
 
index 7406830..15394ae 100644 (file)
@@ -1072,7 +1072,7 @@ IntRect RenderBox::clippedOverflowRectForRepaint(RenderBoxModelObject* repaintCo
     if (style()->visibility() != VISIBLE && !enclosingLayer()->hasVisibleContent())
         return IntRect();
 
-    IntRect r = overflowRect(false);
+    IntRect r = combinedOverflowRect();
 
     RenderView* v = view();
     if (v) {
@@ -2605,9 +2605,9 @@ IntRect RenderBox::localCaretRect(InlineBox* box, int caretOffset, int* extraWid
 
     if (box) {
         RootInlineBox* rootBox = box->root();
-        int top = rootBox->topOverflow();
+        int top = rootBox->lineTop();
         rect.setY(top);
-        rect.setHeight(rootBox->bottomOverflow() - top);
+        rect.setHeight(rootBox->lineBottom() - top);
     }
 
     // If height of box is smaller than font height, use the latter one,
@@ -2767,6 +2767,81 @@ bool RenderBox::avoidsFloats() const
     return isReplaced() || hasOverflowClip() || isHR();
 }
 
+void RenderBox::addShadowOverflow()
+{
+    int shadowLeft;
+    int shadowRight;
+    int shadowTop;
+    int shadowBottom;
+    style()->getBoxShadowExtent(shadowTop, shadowRight, shadowBottom, shadowLeft);
+    IntRect borderBox = borderBoxRect();
+    int overflowLeft = borderBox.x() + shadowLeft;
+    int overflowRight = borderBox.right() + shadowRight;
+    int overflowTop = borderBox.y() + shadowTop;
+    int overflowBottom = borderBox.bottom() + shadowBottom;
+    addVisualOverflow(IntRect(overflowLeft, overflowTop, overflowRight - overflowLeft, overflowBottom - overflowTop));
+}
+
+void RenderBox::addOverflowFromChild(RenderBox* child, const IntSize& delta)
+{
+    // Update our overflow in case the child spills out the block, but only if we were going to paint
+    // the child block ourselves.
+    if (child->hasSelfPaintingLayer())
+        return;
+
+    // Only propagate layout overflow from the child if the child isn't clipping its overflow.  If it is, then
+    // its overflow is internal to it, and we don't care about it.
+    IntRect childLayoutOverflowRect = child->hasOverflowClip() ? child->borderBoxRect() : child->layoutOverflowRect();
+    childLayoutOverflowRect.move(delta);
+    addLayoutOverflow(childLayoutOverflowRect);
+            
+    // Add in visual overflow from the child.  Even if the child clips its overflow, it may still
+    // have visual overflow of its own set from box shadows or reflections.  It is unnecessary to propagate this
+    // overflow if we are clipping our own overflow.
+    if (hasOverflowClip())
+        return;
+    IntRect childVisualOverflowRect = child->visualOverflowRect();
+    childVisualOverflowRect.move(delta);
+    addVisualOverflow(childVisualOverflowRect);
+}
+
+void RenderBox::addLayoutOverflow(const IntRect& rect)
+{
+    IntRect borderBox = borderBoxRect();
+    if (borderBox.contains(rect))
+        return;
+        
+    if (!m_overflow)
+        m_overflow.set(new RenderOverflow(borderBox));
+    
+    m_overflow->addLayoutOverflow(rect);
+}
+
+void RenderBox::addVisualOverflow(const IntRect& rect)
+{
+    IntRect borderBox = borderBoxRect();
+    if (borderBox.contains(rect))
+        return;
+        
+    if (!m_overflow)
+        m_overflow.set(new RenderOverflow(borderBox));
+    
+    m_overflow->addVisualOverflow(rect);
+}
+
+void RenderBox::clearLayoutOverflow()
+{
+    if (!m_overflow)
+        return;
+    
+    if (visualOverflowRect() == borderBoxRect()) {
+        m_overflow.clear();
+        return;
+    }
+    
+    m_overflow->resetLayoutOverflow(borderBoxRect());
+}
+
 #if ENABLE(SVG)
 
 TransformationMatrix RenderBox::localTransform() const
index 2a969b3..193d457 100644 (file)
@@ -24,6 +24,7 @@
 #define RenderBox_h
 
 #include "RenderBoxModelObject.h"
+#include "RenderOverflow.h"
 #include "ScrollTypes.h"
 
 namespace WebCore {
@@ -80,16 +81,31 @@ public:
     RenderBox* nextSiblingBox() const;
     RenderBox* parentBox() const;
 
-    // The height of a block when you include normal flow overflow spillage out of the bottom
-    // of the block (e.g., a <div style="height:25px"> that has a 100px tall image inside
-    // it would have an overflow height of borderTop() + paddingTop() + 100px.
-    virtual int overflowHeight(bool /*includeInterior*/ = true) const { return height(); }
-    virtual int overflowWidth(bool /*includeInterior*/ = true) const { return width(); }
-    virtual void setOverflowHeight(int) { }
-    virtual void setOverflowWidth(int) { }
-    virtual int overflowLeft(bool /*includeInterior*/ = true) const { return 0; }
-    virtual int overflowTop(bool /*includeInterior*/ = true) const { return 0; }
-    virtual IntRect overflowRect(bool /*includeInterior*/ = true) const { return borderBoxRect(); }
+    IntRect combinedOverflowRect() const { return hasOverflowClip() ? visualOverflowRect() : (m_overflow ? m_overflow->combinedOverflowRect() : borderBoxRect()); }
+    int topCombinedOverflow() const { return hasOverflowClip() ? topVisualOverflow() : std::min(topLayoutOverflow(), topVisualOverflow()); }
+    int bottomCombinedOverflow() const { return hasOverflowClip() ? bottomVisualOverflow() : std::max(bottomLayoutOverflow(), bottomVisualOverflow()); }
+    int leftCombinedOverflow() const { return hasOverflowClip() ? leftVisualOverflow() : std::min(leftLayoutOverflow(), leftVisualOverflow()); }
+    int rightCombinedOverflow() const { return hasOverflowClip() ? rightVisualOverflow() :  std::max(rightLayoutOverflow(), rightVisualOverflow()); }
+    
+    IntRect layoutOverflowRect() const { return m_overflow ? m_overflow->layoutOverflowRect() : borderBoxRect(); }
+    int topLayoutOverflow() const { return m_overflow? m_overflow->topLayoutOverflow() : 0; }
+    int bottomLayoutOverflow() const { return m_overflow ? m_overflow->bottomLayoutOverflow() : height(); }
+    int leftLayoutOverflow() const { return m_overflow ? m_overflow->leftLayoutOverflow() : 0; }
+    int rightLayoutOverflow() const { return m_overflow ? m_overflow->rightLayoutOverflow() : width(); }
+    
+    IntRect visualOverflowRect() const { return m_overflow ? m_overflow->visualOverflowRect() : borderBoxRect(); }
+    int topVisualOverflow() const { return m_overflow? m_overflow->topVisualOverflow() : 0; }
+    int bottomVisualOverflow() const { return m_overflow ? m_overflow->bottomVisualOverflow() : height(); }
+    int leftVisualOverflow() const { return m_overflow ? m_overflow->leftVisualOverflow() : 0; }
+    int rightVisualOverflow() const { return m_overflow ? m_overflow->rightVisualOverflow() : width(); }
+
+    void addLayoutOverflow(const IntRect&);
+    void addVisualOverflow(const IntRect&);
+    
+    void addShadowOverflow();
+    void addOverflowFromChild(RenderBox* child) { addOverflowFromChild(child, IntSize(child->x(), child->y())); }
+    void addOverflowFromChild(RenderBox* child, const IntSize& delta);
+    void clearLayoutOverflow();
 
     int contentWidth() const { return clientWidth() - paddingLeft() - paddingRight(); }
     int contentHeight() const { return clientHeight() - paddingTop() - paddingBottom(); }
@@ -353,6 +369,9 @@ protected:
     // For inline replaced elements, the inline box that owns us.
     InlineBox* m_inlineBoxWrapper;
 
+    // Our overflow information.
+    OwnPtr<RenderOverflow> m_overflow;
+
 private:
     // Used to store state between styleWillChange and styleDidChange
     static bool s_hadOverflowClip;
index dd4e1a3..63c72fd 100644 (file)
@@ -216,7 +216,8 @@ void RenderFlexibleBox::layoutBlock(bool relayoutChildren)
     
     calcWidth();
     calcHeight();
-    m_overflowWidth = width();
+    
+    m_overflow.clear();
 
     if (previousWidth != width() || previousHeight != height() ||
         (parent()->isFlexibleBox() && parent()->style()->boxOrient() == HORIZONTAL &&
@@ -224,7 +225,7 @@ void RenderFlexibleBox::layoutBlock(bool relayoutChildren)
         relayoutChildren = true;
 
     setHeight(0);
-    m_overflowHeight = 0;
+
     m_flexingChildren = m_stretchingChildren = false;
 
     initMaxMarginValues();
@@ -242,15 +243,8 @@ void RenderFlexibleBox::layoutBlock(bool relayoutChildren)
     else
         layoutVerticalBox(relayoutChildren);
 
-    int oldHeight = height();
     calcHeight();
-    if (oldHeight != height()) {
-        // If the block got expanded in size, then increase our overflowheight to match.
-        if (m_overflowHeight > height())
-            m_overflowHeight -= (borderBottom() + paddingBottom() + horizontalScrollbarHeight());
-        if (m_overflowHeight < height())
-            m_overflowHeight = height();
-    }
+
     if (previousHeight != height())
         relayoutChildren = true;
 
@@ -273,12 +267,14 @@ void RenderFlexibleBox::layoutBlock(bool relayoutChildren)
         setMaxTopMargins(pos, neg);
         setMaxBottomMargins(0, 0);
     }
+    
+    // Add in the overflow from children.
+    FlexBoxIterator iterator(this);
+    for (RenderBox* child = iterator.first(); child; child = iterator.next())
+        addOverflowFromChild(child);
 
-    // Always ensure our overflow width is at least as large as our width.
-    if (m_overflowWidth < width())
-        m_overflowWidth = width();
-
-    updateOverflowWithShadowAndReflection();
+    // Add visual overflow from box-shadow and reflections.
+    addShadowOverflow();
 
     statePusher.pop();
 
@@ -327,7 +323,7 @@ void RenderFlexibleBox::layoutHorizontalBox(bool relayoutChildren)
     int oldHeight = 0;
 
     int remainingSpace = 0;
-    m_overflowHeight = height();
+
 
     FlexBoxIterator iterator(this);
     unsigned int highestFlexGroup = 0;
@@ -344,7 +340,7 @@ void RenderFlexibleBox::layoutHorizontalBox(bool relayoutChildren)
     do {
         // Reset our height.
         setHeight(yPos);
-        m_overflowHeight = height();
+
         xPos = borderLeft() + paddingLeft();
                 
         // Our first pass is done without flexing.  We simply lay the children
@@ -395,10 +391,6 @@ void RenderFlexibleBox::layoutHorizontalBox(bool relayoutChildren)
             setHeight(height() + lineHeight(true, true));
         
         setHeight(height() + toAdd);
-
-        // Always make sure our overflowheight is at least our height.
-        if (m_overflowHeight < height())
-            m_overflowHeight = height();
         
         oldHeight = height();
         calcHeight();
@@ -457,12 +449,6 @@ void RenderFlexibleBox::layoutHorizontalBox(bool relayoutChildren)
             }
 
             placeChild(child, xPos, childY);
-
-            if (child->isRenderBlock())
-                toRenderBlock(child)->addVisualOverflow(toRenderBlock(child)->floatRect());
-
-            m_overflowHeight = max(m_overflowHeight, childY + child->overflowHeight(false));
-            m_overflowTop = min(m_overflowTop, child->y() + child->overflowTop(false));
             
             xPos += child->width() + child->marginRight();
     
@@ -626,22 +612,6 @@ void RenderFlexibleBox::layoutHorizontalBox(bool relayoutChildren)
         }
     }
     
-    child = iterator.first();
-    while (child && child->isPositioned()) {
-        child = iterator.next();
-    }
-    
-    if (child) {
-        m_overflowLeft = min(child->x() + child->overflowLeft(false), m_overflowLeft);
-
-        RenderBox* lastChild = child;
-        while ((child = iterator.next())) {
-            if (!child->isPositioned())
-                lastChild = child;
-        }
-        m_overflowWidth = max(lastChild->x() + lastChild->overflowWidth(false), m_overflowWidth);
-    }
-    
     // So that the calcHeight in layoutBlock() knows to relayout positioned objects because of
     // a height change, we revert our height back to the intrinsic height before returning.
     if (heightSpecified)
@@ -784,7 +754,6 @@ void RenderFlexibleBox::layoutVerticalBox(bool relayoutChildren)
     do {
         setHeight(borderTop() + paddingTop());
         int minHeight = height() + toAdd;
-        m_overflowHeight = height();
 
         child = iterator.first();
         while (child) {
@@ -792,8 +761,7 @@ void RenderFlexibleBox::layoutVerticalBox(bool relayoutChildren)
             if (!haveLineClamp && (relayoutChildren || (child->isReplaced() && (child->style()->width().isPercent() || child->style()->height().isPercent()))))
                 child->setChildNeedsLayout(true, false);
     
-            if (child->isPositioned())
-            {
+            if (child->isPositioned()) {
                 child->containingBlock()->insertPositionedObject(child);
                 if (child->style()->hasStaticX()) {
                     if (style()->direction() == LTR)
@@ -840,14 +808,7 @@ void RenderFlexibleBox::layoutVerticalBox(bool relayoutChildren)
             // Place the child.
             placeChild(child, childX, height());
             setHeight(height() + child->height() + child->marginBottom());
-    
-            if (child->isRenderBlock())
-                toRenderBlock(child)->addVisualOverflow(toRenderBlock(child)->floatRect());
 
-            // See if this child has made our overflow need to grow.
-            m_overflowWidth = max(child->x() + child->overflowWidth(false), m_overflowWidth);
-            m_overflowLeft = min(child->x() + child->overflowLeft(false), m_overflowLeft);
-            
             child = iterator.next();
         }
 
@@ -863,10 +824,6 @@ void RenderFlexibleBox::layoutVerticalBox(bool relayoutChildren)
         if (height() < minHeight)
             setHeight(minHeight);
 
-        // Always make sure our overflowheight is at least our height.
-        if (m_overflowHeight < height())
-            m_overflowHeight = height();
-
         // Now we have to calc our height, so we know how much space we have remaining.
         oldHeight = height();
         calcHeight();
@@ -1024,22 +981,6 @@ void RenderFlexibleBox::layoutVerticalBox(bool relayoutChildren)
             }
         }
     }
-    
-    child = iterator.first();
-    while (child && child->isPositioned()) {
-        child = iterator.next();
-    }
-    
-    if (child) {
-        m_overflowTop = min(child->y() + child->overflowTop(false), m_overflowTop);
-
-        RenderBox* lastChild = child;
-        while ((child = iterator.next())) {
-            if (!child->isPositioned())
-                lastChild = child;
-        }
-        m_overflowHeight = max(lastChild->y() + lastChild->overflowHeight(false), m_overflowHeight);
-    }
 
     // So that the calcHeight in layoutBlock() knows to relayout positioned objects because of
     // a height change, we revert our height back to the intrinsic height before returning.
index d2da97f..ed5f063 100644 (file)
@@ -580,10 +580,10 @@ void RenderLayer::updateLayerPosition()
         setHeight(box->height());
 
         if (!box->hasOverflowClip()) {
-            if (box->overflowWidth() > box->width())
-                setWidth(box->overflowWidth());
-            if (box->overflowHeight() > box->height())
-                setHeight(box->overflowHeight());
+            if (box->rightLayoutOverflow() > box->width())
+                setWidth(box->rightLayoutOverflow());
+            if (box->bottomLayoutOverflow() > box->height())
+                setHeight(box->bottomLayoutOverflow());
         }
     }
 }
@@ -756,6 +756,19 @@ static IntRect transparencyClipBox(const TransformationMatrix& enclosingTransfor
         }
     }
 
+    // If we have a reflection, then we need to account for that when we push the clip.  Reflect our entire
+    // current transparencyClipBox to catch all child layers.
+    // FIXME: Accelerated compositing will eventually want to do something smart here to avoid incorporating this
+    // size into the parent layer.
+    if (l->renderer()->hasReflection()) {
+        int deltaX = 0;
+        int deltaY = 0;
+        l->convertToLayerCoords(rootLayer, deltaX, deltaY);
+        clipRect.move(-deltaX, -deltaY);
+        clipRect.unite(l->renderBox()->reflectedRect(clipRect));
+        clipRect.move(deltaX, deltaY);
+    }
+
     // Now map the clipRect via the enclosing transform
     return enclosingTransform.mapRect(clipRect);
 }
@@ -2778,7 +2791,7 @@ IntRect RenderLayer::localBoundingBox() const
 {
     // There are three special cases we need to consider.
     // (1) Inline Flows.  For inline flows we will create a bounding box that fully encompasses all of the lines occupied by the
-    // inline.  In other words, if some <span> wraps to three lines, we'll create a bounding box that fully encloses the root
+    // inline.  In other words, if some <span> wraps to three lines, we'll create a bounding box that fully encloses the
     // line boxes of all three lines (including overflow on those lines).
     // (2) Left/Top Overflow.  The width/height of layers already includes right/bottom overflow.  However, in the case of left/top
     // overflow, we have to create a bounding box that will extend to include this overflow.
@@ -2792,8 +2805,8 @@ IntRect RenderLayer::localBoundingBox() const
         InlineFlowBox* firstBox = inlineFlow->firstLineBox();
         if (!firstBox)
             return result;
-        int top = firstBox->root()->topOverflow();
-        int bottom = inlineFlow->lastLineBox()->root()->bottomOverflow();
+        int top = firstBox->topCombinedOverflow();
+        int bottom = inlineFlow->lastLineBox()->bottomCombinedOverflow();
         int left = firstBox->x();
         for (InlineRunBox* curr = firstBox->nextLineBox(); curr; curr = curr->nextLineBox())
             left = min(left, curr->x());
@@ -2804,7 +2817,7 @@ IntRect RenderLayer::localBoundingBox() const
             if (child->isTableCell()) {
                 IntRect bbox = toRenderBox(child)->borderBoxRect();
                 result.unite(bbox);
-                IntRect overflowRect = renderBox()->overflowRect(false);
+                IntRect overflowRect = renderBox()->combinedOverflowRect();
                 if (bbox != overflowRect)
                     result.unite(overflowRect);
             }
@@ -2817,7 +2830,7 @@ IntRect RenderLayer::localBoundingBox() const
         else {
             IntRect bbox = box->borderBoxRect();
             result = bbox;
-            IntRect overflowRect = box->overflowRect(false);
+            IntRect overflowRect = box->combinedOverflowRect();
             if (bbox != overflowRect)
                 result.unite(overflowRect);
         }
index 10da951..c19ffd4 100644 (file)
@@ -791,7 +791,7 @@ void RenderLayerCompositor::willMoveOffscreen()
 void RenderLayerCompositor::updateRootLayerPosition()
 {
     if (m_rootPlatformLayer)
-        m_rootPlatformLayer->setSize(FloatSize(m_renderView->overflowWidth(), m_renderView->overflowHeight()));
+        m_rootPlatformLayer->setSize(FloatSize(m_renderView->rightLayoutOverflow(), m_renderView->bottomLayoutOverflow()));
 }
 
 void RenderLayerCompositor::didStartAcceleratedAnimation()
@@ -923,7 +923,7 @@ void RenderLayerCompositor::ensureRootPlatformLayer()
         return;
 
     m_rootPlatformLayer = GraphicsLayer::create(0);
-    m_rootPlatformLayer->setSize(FloatSize(m_renderView->overflowWidth(), m_renderView->overflowHeight()));
+    m_rootPlatformLayer->setSize(FloatSize(m_renderView->rightLayoutOverflow(), m_renderView->bottomLayoutOverflow()));
     m_rootPlatformLayer->setPosition(FloatPoint(0, 0));
     // The root layer does flipping if we need it on this platform.
     m_rootPlatformLayer->setGeometryOrientation(GraphicsLayer::compositingCoordinatesOrientation());
index 00566b8..2098f82 100644 (file)
@@ -162,8 +162,8 @@ void RenderLineBoxList::paint(RenderBoxModelObject* renderer, RenderObject::Pain
     // intersect.  This is a quick short-circuit that we can take to avoid walking any lines.
     // FIXME: This check is flawed in the following extremely obscure way:
     // if some line in the middle has a huge overflow, it might actually extend below the last line.
-    int yPos = firstLineBox()->root()->topOverflow() - renderer->maximalOutlineSize(paintInfo.phase);
-    int h = renderer->maximalOutlineSize(paintInfo.phase) + lastLineBox()->root()->bottomOverflow() - yPos;
+    int yPos = firstLineBox()->root()->topCombinedOverflow() - renderer->maximalOutlineSize(paintInfo.phase);
+    int h = renderer->maximalOutlineSize(paintInfo.phase) + lastLineBox()->root()->bottomCombinedOverflow() - yPos;
     yPos += ty;
     if (yPos >= paintInfo.rect.bottom() || yPos + h <= paintInfo.rect.y())
         return;
@@ -184,19 +184,19 @@ void RenderLineBoxList::paint(RenderBoxModelObject* renderer, RenderObject::Pain
             // The whole way objects break across pages needs to be redone.
             // Try to avoid splitting a line vertically, but only if it's less than the height
             // of the entire page.
-            if (curr->root()->bottomOverflow() - curr->root()->topOverflow() <= v->printRect().height()) {
-                if (ty + curr->root()->bottomOverflow() > v->printRect().bottom()) {
-                    if (ty + curr->root()->topOverflow() < v->truncatedAt())
-                        v->setBestTruncatedAt(ty + curr->root()->topOverflow(), renderer);
+            if (curr->root()->bottomCombinedOverflow() - curr->root()->topCombinedOverflow() <= v->printRect().height()) {
+                if (ty + curr->root()->bottomCombinedOverflow() > v->printRect().bottom()) {
+                    if (ty + curr->root()->topCombinedOverflow() < v->truncatedAt())
+                        v->setBestTruncatedAt(ty + curr->root()->topCombinedOverflow(), renderer);
                     // If we were able to truncate, don't paint.
-                    if (ty + curr->root()->topOverflow() >= v->truncatedAt())
+                    if (ty + curr->root()->topCombinedOverflow() >= v->truncatedAt())
                         break;
                 }
             }
         }
 
-        int top = min(curr->root()->topOverflow(), curr->root()->selectionTop()) - renderer->maximalOutlineSize(info.phase);
-        int bottom = curr->root()->bottomOverflow() + renderer->maximalOutlineSize(info.phase);
+        int top = min(curr->root()->topCombinedOverflow(), curr->root()->selectionTop()) - renderer->maximalOutlineSize(info.phase);
+        int bottom = curr->root()->bottomCombinedOverflow() + renderer->maximalOutlineSize(info.phase);
         h = bottom - top;
         yPos = ty + top;
         if (yPos < info.rect.bottom() && yPos + h > info.rect.y())
@@ -229,14 +229,14 @@ bool RenderLineBoxList::hitTest(RenderBoxModelObject* renderer, const HitTestReq
     // contain the point.  This is a quick short-circuit that we can take to avoid walking any lines.
     // FIXME: This check is flawed in the following extremely obscure way:
     // if some line in the middle has a huge overflow, it might actually extend below the last line.
-    if ((y >= ty + lastLineBox()->root()->bottomOverflow()) || (y < ty + firstLineBox()->root()->topOverflow()))
+    if ((y >= ty + lastLineBox()->root()->bottomCombinedOverflow()) || (y < ty + firstLineBox()->root()->topCombinedOverflow()))
         return false;
 
     // See if our root lines contain the point.  If so, then we hit test
     // them further.  Note that boxes can easily overlap, so we can't make any assumptions
     // based off positions of our first line box or our last line box.
     for (InlineFlowBox* curr = lastLineBox(); curr; curr = curr->prevFlowBox()) {
-        if (y >= ty + curr->root()->topOverflow() && y < ty + curr->root()->bottomOverflow()) {
+        if (y >= ty + curr->root()->topCombinedOverflow() && y < ty + curr->root()->bottomCombinedOverflow()) {
             bool inside = curr->nodeAtPoint(request, result, x, y, tx, ty);
             if (inside) {
                 renderer->updateHitTestResult(result, IntPoint(x - tx, y - ty));
index 374ef66..e487c60 100644 (file)
@@ -247,21 +247,30 @@ void RenderListItem::positionListMarker()
         int markerXPos;
         RootInlineBox* root = m_marker->inlineBoxWrapper()->root();
 
+        // FIXME: Inline flows in the line box hierarchy that have self-painting layers should act as cutoff points
+        // and really shouldn't keep propagating overflow up.  This won't really break anything other than repainting
+        // not being as tight as it could be though.
         if (style()->direction() == LTR) {
             int leftLineOffset = leftRelOffset(yOffset, leftOffset(yOffset, false), false);
             markerXPos = leftLineOffset - xOffset - paddingLeft() - borderLeft() + m_marker->marginLeft();
             m_marker->inlineBoxWrapper()->adjustPosition(markerXPos - markerOldX, 0);
-            if (markerXPos < root->leftOverflow()) {
-                root->setHorizontalOverflowPositions(markerXPos, root->rightOverflow());
-                adjustOverflow = true;
+            for (InlineFlowBox* box = m_marker->inlineBoxWrapper()->parent(); box; box = box->parent()) {
+                if (markerXPos < box->leftLayoutOverflow()) {
+                    box->setHorizontalOverflowPositions(markerXPos, box->rightLayoutOverflow(), box->leftVisualOverflow(), box->rightVisualOverflow());
+                    if (box == root)
+                        adjustOverflow = true;
+                }
             }
         } else {
             int rightLineOffset = rightRelOffset(yOffset, rightOffset(yOffset, false), false);
             markerXPos = rightLineOffset - xOffset + paddingRight() + borderRight() + m_marker->marginLeft();
             m_marker->inlineBoxWrapper()->adjustPosition(markerXPos - markerOldX, 0);
-            if (markerXPos + m_marker->width() > root->rightOverflow()) {
-                root->setHorizontalOverflowPositions(root->leftOverflow(), markerXPos + m_marker->width());
-                adjustOverflow = true;
+            for (InlineFlowBox* box = m_marker->inlineBoxWrapper()->parent(); box; box = box->parent()) {
+                if (markerXPos + m_marker->width() > box->rightLayoutOverflow()) {
+                    box->setHorizontalOverflowPositions(box->leftLayoutOverflow(), markerXPos + m_marker->width(), box->leftVisualOverflow(), box->rightVisualOverflow());
+                    if (box == root)
+                        adjustOverflow = true;
+                }
             }
         }
 
@@ -271,9 +280,9 @@ void RenderListItem::positionListMarker()
             do {
                 o = o->parentBox();
                 if (o->isRenderBlock())
-                    toRenderBlock(o)->addVisualOverflow(markerRect);
+                    toRenderBlock(o)->addLayoutOverflow(markerRect);
                 markerRect.move(-o->x(), -o->y());
-            } while (o != this);
+            } while (o != this && !o->hasSelfPaintingLayer());
         }
     }
 }
index 33cbb0c..40e61b2 100644 (file)
@@ -204,7 +204,6 @@ RenderObject::RenderObject(Node* node)
     , m_selectionState(SelectionNone)
     , m_hasColumns(false)
     , m_cellWidthChanged(false)
-    , m_replacedHasOverflow(false)
 {
 #ifndef NDEBUG
     renderObjectCounter.increment();
index eb558f6..12ad717 100644 (file)
@@ -737,9 +737,6 @@ public:
         return outlineBoundsForRepaint(0);
     }
 
-    bool replacedHasOverflow() const { return m_replacedHasOverflow; }
-    void setReplacedHasOverflow(bool b = true) { m_replacedHasOverflow = b; }
-    
 protected:
     // Overrides should call the superclass at the end
     virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle);
@@ -848,9 +845,6 @@ private:
     // from RenderTableCell
     bool m_cellWidthChanged : 1;
 
-    // from RenderReplaced
-    bool m_replacedHasOverflow : 1;
-
 private:
     // Store state between styleWillChange and styleDidChange
     static bool s_affectsParentBlock;
diff --git a/WebCore/rendering/RenderOverflow.h b/WebCore/rendering/RenderOverflow.h
new file mode 100644 (file)
index 0000000..d372b4a
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef RenderOverflow_h
+#define RenderOverflow_h
+
+#include "IntRect.h"
+
+namespace WebCore
+{
+// RenderOverflow is a class for tracking content that spills out of a box.  This class is used by RenderBox and
+// InlineFlowBox.
+//
+// There are two types of overflow: layout overflow (which is expected to be reachable via scrolling mechanisms) and
+// visual overflow (which is not expected to be reachable via scrolling mechanisms).
+//
+// Layout overflow examples include other boxes that spill out of our box,  For example, in the inline case a tall image
+// could spill out of a line box. 
+    
+// Examples of visual overflow are shadows, text stroke (and eventually outline and border-image).
+
+// This object is allocated only when some of these fields have non-default values in the owning box.
+class RenderOverflow {
+public:
+    RenderOverflow(const IntRect& defaultRect = IntRect()) 
+        : m_topLayoutOverflow(defaultRect.y())
+        , m_bottomLayoutOverflow(defaultRect.bottom())
+        , m_leftLayoutOverflow(defaultRect.x())
+        , m_rightLayoutOverflow(defaultRect.right())
+        , m_topVisualOverflow(defaultRect.y())
+        , m_bottomVisualOverflow(defaultRect.bottom())
+        , m_leftVisualOverflow(defaultRect.x())
+        , m_rightVisualOverflow(defaultRect.right())
+    {
+    }
+   
+    int topLayoutOverflow() const { return m_topLayoutOverflow; }
+    int bottomLayoutOverflow() const { return m_bottomLayoutOverflow; }
+    int leftLayoutOverflow() const { return m_leftLayoutOverflow; }
+    int rightLayoutOverflow() const { return m_rightLayoutOverflow; }
+    IntRect layoutOverflowRect() const;
+
+    int topVisualOverflow() const { return m_topVisualOverflow; }
+    int bottomVisualOverflow() const { return m_bottomVisualOverflow; }
+    int leftVisualOverflow() const { return m_leftVisualOverflow; }
+    int rightVisualOverflow() const { return m_rightVisualOverflow; }
+    IntRect visualOverflowRect() const;
+
+    IntRect combinedOverflowRect() const;
+
+    void setTopLayoutOverflow(int overflow) { m_topLayoutOverflow = overflow; }
+    void setBottomLayoutOverflow(int overflow) { m_bottomLayoutOverflow = overflow; }
+    void setLeftLayoutOverflow(int overflow) { m_leftLayoutOverflow = overflow; }
+    void setRightLayoutOverflow(int overflow) { m_rightLayoutOverflow = overflow; }
+    
+    void setTopVisualOverflow(int overflow) { m_topVisualOverflow = overflow; }
+    void setBottomVisualOverflow(int overflow) { m_bottomVisualOverflow = overflow; }
+    void setLeftVisualOverflow(int overflow) { m_leftVisualOverflow = overflow; }
+    void setRightVisualOverflow(int overflow) { m_rightVisualOverflow = overflow; }
+    
+    void move(int dx, int dy);
+    
+    void addLayoutOverflow(const IntRect&);
+    void addVisualOverflow(const IntRect&);
+
+    void resetLayoutOverflow(const IntRect& defaultRect);
+
+private:
+    int m_topLayoutOverflow;
+    int m_bottomLayoutOverflow;
+    int m_leftLayoutOverflow;
+    int m_rightLayoutOverflow;
+
+    int m_topVisualOverflow;
+    int m_bottomVisualOverflow;
+    int m_leftVisualOverflow;
+    int m_rightVisualOverflow;
+};
+
+inline IntRect RenderOverflow::layoutOverflowRect() const
+{
+    return IntRect(m_leftLayoutOverflow, m_topLayoutOverflow, m_rightLayoutOverflow - m_leftLayoutOverflow, m_bottomLayoutOverflow - m_topLayoutOverflow);
+}
+
+inline IntRect RenderOverflow::visualOverflowRect() const
+{
+    return IntRect(m_leftVisualOverflow, m_topVisualOverflow, m_rightVisualOverflow - m_leftVisualOverflow, m_bottomVisualOverflow - m_topVisualOverflow);
+}
+
+inline IntRect RenderOverflow::combinedOverflowRect() const
+{
+    IntRect combinedRect(layoutOverflowRect());
+    combinedRect.unite(visualOverflowRect());
+    return combinedRect;
+}
+
+inline void RenderOverflow::move(int dx, int dy)
+{
+    m_topLayoutOverflow += dy;
+    m_bottomLayoutOverflow += dy;
+    m_leftLayoutOverflow += dx;
+    m_rightLayoutOverflow += dx;
+    
+    m_topVisualOverflow += dy;
+    m_bottomVisualOverflow += dy;
+    m_leftVisualOverflow += dx;
+    m_rightVisualOverflow += dx;
+}
+
+inline void RenderOverflow::addLayoutOverflow(const IntRect& rect)
+{
+    m_topLayoutOverflow = std::min(rect.y(), m_topLayoutOverflow);
+    m_bottomLayoutOverflow = std::max(rect.bottom(), m_bottomLayoutOverflow);
+    m_leftLayoutOverflow = std::min(rect.x(), m_leftLayoutOverflow);
+    m_rightLayoutOverflow = std::max(rect.right(), m_rightLayoutOverflow);
+}
+
+inline void RenderOverflow::addVisualOverflow(const IntRect& rect)
+{
+    m_topVisualOverflow = std::min(rect.y(), m_topVisualOverflow);
+    m_bottomVisualOverflow = std::max(rect.bottom(), m_bottomVisualOverflow);
+    m_leftVisualOverflow = std::min(rect.x(), m_leftVisualOverflow);
+    m_rightVisualOverflow = std::max(rect.right(), m_rightVisualOverflow);
+}
+
+inline void RenderOverflow::resetLayoutOverflow(const IntRect& rect)
+{
+    m_topLayoutOverflow = rect.y();
+    m_bottomLayoutOverflow = rect.bottom();
+    m_leftLayoutOverflow = rect.x();
+    m_rightLayoutOverflow = rect.right();
+}
+
+} // namespace WebCore
+
+#endif // RenderOverflow_h
index e9cb246..fd664f9 100644 (file)
@@ -350,7 +350,7 @@ void RenderPartObject::layout()
 
     calcWidth();
     calcHeight();
-    adjustOverflowForBoxShadowAndReflect();
+    addShadowOverflow();
 
     RenderPart::layout();
 
index 0ab11b6..ae7398e 100644 (file)
@@ -34,9 +34,6 @@ using namespace std;
 
 namespace WebCore {
 
-typedef WTF::HashMap<const RenderReplaced*, IntRect> OverflowRectMap;
-static OverflowRectMap* gOverflowRectMap = 0;
-
 const int cDefaultWidth = 300;
 const int cDefaultHeight = 150;
 
@@ -56,8 +53,6 @@ RenderReplaced::RenderReplaced(Node* node, const IntSize& intrinsicSize)
 
 RenderReplaced::~RenderReplaced()
 {
-    if (replacedHasOverflow())
-        gOverflowRectMap->remove(this);
 }
 
 void RenderReplaced::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
@@ -80,7 +75,7 @@ void RenderReplaced::layout()
     
     calcWidth();
     calcHeight();
-    adjustOverflowForBoxShadowAndReflect();
+    addShadowOverflow();
     
     repainter.repaintAfterLayout();    
 
@@ -169,8 +164,8 @@ bool RenderReplaced::shouldPaint(PaintInfo& paintInfo, int& tx, int& ty)
     int currentTY = ty + y();
 
     // Early exit if the element touches the edges.
-    int top = currentTY + overflowTop();
-    int bottom = currentTY + overflowHeight();
+    int top = currentTY + topCombinedOverflow();
+    int bottom = currentTY + bottomCombinedOverflow();
     if (isSelected() && m_inlineBoxWrapper) {
         int selTop = ty + m_inlineBoxWrapper->root()->selectionTop();
         int selBottom = ty + selTop + m_inlineBoxWrapper->root()->selectionHeight();
@@ -179,7 +174,7 @@ bool RenderReplaced::shouldPaint(PaintInfo& paintInfo, int& tx, int& ty)
     }
     
     int os = 2 * maximalOutlineSize(paintInfo.phase);
-    if (currentTX + overflowLeft() >= paintInfo.rect.right() + os || currentTX + overflowWidth() <= paintInfo.rect.x() - os)
+    if (currentTX + leftCombinedOverflow() >= paintInfo.rect.right() + os || currentTX + rightCombinedOverflow() <= paintInfo.rect.x() - os)
         return false;
     if (top >= paintInfo.rect.bottom() + os || bottom <= paintInfo.rect.y() - os)
         return false;
@@ -231,8 +226,8 @@ VisiblePosition RenderReplaced::positionForPoint(const IntPoint& point)
 
     RootInlineBox* root = box->root();
 
-    int top = root->topOverflow();
-    int bottom = root->nextRootBox() ? root->nextRootBox()->topOverflow() : root->bottomOverflow();
+    int top = root->lineTop();
+    int bottom = root->nextRootBox() ? root->nextRootBox()->lineTop() : root->lineBottom();
 
     if (point.y() + y() < top)
         return createVisiblePosition(caretMinOffset(), DOWNSTREAM); // coordinates are above
@@ -327,82 +322,6 @@ void RenderReplaced::setIntrinsicSize(const IntSize& size)
     m_intrinsicSize = size;
 }
 
-void RenderReplaced::adjustOverflowForBoxShadowAndReflect()
-{
-    IntRect overflow;
-    for (ShadowData* boxShadow = style()->boxShadow(); boxShadow; boxShadow = boxShadow->next) {
-        if (boxShadow->style == Inset)
-            continue;
-        IntRect shadow = borderBoxRect();
-        shadow.move(boxShadow->x, boxShadow->y);
-        shadow.inflate(boxShadow->blur + boxShadow->spread);
-        overflow.unite(shadow);
-    }
-
-    // Now that we have an overflow rect including shadow, let's make sure that
-    // the reflection (which can also include the shadow) is also included.
-    if (hasReflection()) {
-        if (overflow.isEmpty())
-            overflow = borderBoxRect();
-        overflow.unite(reflectedRect(overflow));
-    }
-
-    if (!overflow.isEmpty()) {
-        if (!gOverflowRectMap)
-            gOverflowRectMap = new OverflowRectMap();
-        overflow.unite(borderBoxRect());
-        gOverflowRectMap->set(this, overflow);
-        setReplacedHasOverflow(true);
-    } else if (replacedHasOverflow()) {
-        gOverflowRectMap->remove(this);
-        setReplacedHasOverflow(false);
-    }
-}
-
-int RenderReplaced::overflowHeight(bool) const
-{
-    if (replacedHasOverflow()) {
-        IntRect *r = &gOverflowRectMap->find(this)->second;
-        return r->height() + r->y();
-    }
-
-    return height();
-}
-
-int RenderReplaced::overflowWidth(bool) const
-{
-    if (replacedHasOverflow()) {
-        IntRect *r = &gOverflowRectMap->find(this)->second;
-        return r->width() + r->x();
-    }
-
-    return width();
-}
-
-int RenderReplaced::overflowLeft(bool) const
-{
-    if (replacedHasOverflow())
-        return gOverflowRectMap->get(this).x();
-
-    return 0;
-}
-
-int RenderReplaced::overflowTop(bool) const
-{
-    if (replacedHasOverflow())
-        return gOverflowRectMap->get(this).y();
-
-    return 0;
-}
-
-IntRect RenderReplaced::overflowRect(bool) const
-{
-    if (replacedHasOverflow())
-        return gOverflowRectMap->find(this)->second;
-
-    return borderBoxRect();
-}
-
 IntRect RenderReplaced::clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer)
 {
     if (style()->visibility() != VISIBLE && !enclosingLayer()->hasVisibleContent())
@@ -410,7 +329,7 @@ IntRect RenderReplaced::clippedOverflowRectForRepaint(RenderBoxModelObject* repa
 
     // The selectionRect can project outside of the overflowRect, so take their union
     // for repainting to avoid selection painting glitches.
-    IntRect r = unionRect(localSelectionRect(false), overflowRect(false));
+    IntRect r = unionRect(localSelectionRect(false), combinedOverflowRect());
 
     RenderView* v = view();
     if (v) {
index 70ad4f2..0ba6b8a 100644 (file)
@@ -65,12 +65,6 @@ private:
     virtual void paint(PaintInfo&, int tx, int ty);
     virtual void paintReplaced(PaintInfo&, int /*tx*/, int /*ty*/) { }
 
-    virtual int overflowHeight(bool includeInterior = true) const;
-    virtual int overflowWidth(bool includeInterior = true) const;
-    virtual int overflowLeft(bool includeInterior = true) const;
-    virtual int overflowTop(bool includeInterior = true) const;
-    virtual IntRect overflowRect(bool includeInterior = true) const;
-
     virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer);
 
     virtual unsigned caretMaxRenderedOffset() const;
index 0f29aeb..109afb5 100644 (file)
@@ -51,9 +51,6 @@ void RenderScrollbarPart::layout()
     else
         layoutVerticalPart();
 
-    m_overflowWidth = max(width(), m_overflowWidth);
-    m_overflowHeight = max(height(), m_overflowHeight);
-    
     setNeedsLayout(false);
 }
 
@@ -153,8 +150,6 @@ void RenderScrollbarPart::paintIntoRect(GraphicsContext* graphicsContext, int tx
     setLocation(rect.x() - tx, rect.y() - ty);
     setWidth(rect.width());
     setHeight(rect.height());
-    setOverflowWidth(max(rect.width(), overflowWidth()));
-    setOverflowHeight(max(rect.height(), overflowHeight()));
 
     if (graphicsContext->paintingDisabled())
         return;
index fdc7b14..4d141b7 100644 (file)
@@ -336,8 +336,6 @@ void RenderSlider::layout()
     calcWidth();
     calcHeight();
 
-    IntRect overflowRect(IntPoint(), size());
-
     if (thumb) {
         if (oldSize != size())
             thumb->setChildNeedsLayout(true, false);
@@ -354,18 +352,9 @@ void RenderSlider::layout()
             thumb->repaintDuringLayoutIfMoved(oldThumbRect);
 
         statePusher.pop();
-
-        IntRect thumbOverflowRect = thumb->overflowRect();
-        thumbOverflowRect.move(thumb->x(), thumb->y());
-        overflowRect.unite(thumbOverflowRect);
     }
 
-    // FIXME: m_overflowWidth and m_overflowHeight should be renamed
-    // m_overflowRight and m_overflowBottom.
-    m_overflowLeft = overflowRect.x();
-    m_overflowTop = overflowRect.y();
-    m_overflowWidth = overflowRect.right();
-    m_overflowHeight = overflowRect.bottom();
+    addOverflowFromChild(thumb);
 
     repainter.repaintAfterLayout();    
 
index c9509cd..ecbd822 100644 (file)
@@ -244,8 +244,8 @@ void RenderTable::layout()
     LayoutStateMaintainer statePusher(view(), this, IntSize(x(), y()));
 
     setHeight(0);
-    m_overflowHeight = 0;
-    m_overflowTop = 0;
+    m_overflow.clear();
+
     initMaxMarginValues();
     
     int oldWidth = width();
@@ -287,9 +287,6 @@ void RenderTable::layout()
     if (m_caption)
         m_caption->layoutIfNeeded();
 
-    m_overflowWidth = width() + (collapsing ? outerBorderRight() - borderRight() : 0);
-    m_overflowLeft = collapsing ? borderLeft() - outerBorderLeft() : 0;
-
     // If any table section moved vertically, we will just repaint everything from that
     // section down (it is quite unlikely that any of the following sections
     // did not shift).
@@ -305,10 +302,6 @@ void RenderTable::layout()
             m_caption->repaintDuringLayoutIfMoved(captionRect);
 
         setHeight(height() + m_caption->height() + m_caption->marginTop() + m_caption->marginBottom());
-        m_overflowLeft = min(m_overflowLeft, m_caption->x() + m_caption->overflowLeft(false));
-        m_overflowWidth = max(m_overflowWidth, m_caption->x() + m_caption->overflowWidth(false));
-        m_overflowTop = min(m_overflowTop, m_caption->y() + m_caption->overflowTop(false));
-        m_overflowHeight = max(m_overflowHeight, m_caption->y() + m_caption->overflowHeight(false));
 
         if (height() != oldTableTop) {
             sectionMoved = true;
@@ -354,15 +347,11 @@ void RenderTable::layout()
     while (section) {
         if (!sectionMoved && section->y() != height()) {
             sectionMoved = true;
-            movedSectionTop = min(height(), section->y()) + section->overflowTop(false);
+            movedSectionTop = min(height(), section->y()) + section->topCombinedOverflow();
         }
         section->setLocation(bl, height());
 
 &nbs