| Index: Source/core/rendering/RenderLineBoxList.cpp
|
| diff --git a/Source/core/rendering/RenderLineBoxList.cpp b/Source/core/rendering/RenderLineBoxList.cpp
|
| index 085224721fe2d175df4b04089b452329bc0eea4c..db990d8402f7a100cc9f6e7c81517e181b7d6d98 100644
|
| --- a/Source/core/rendering/RenderLineBoxList.cpp
|
| +++ b/Source/core/rendering/RenderLineBoxList.cpp
|
| @@ -176,10 +176,10 @@ bool RenderLineBoxList::anyLineIntersectsRect(RenderBoxModelObject* renderer, co
|
| // 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.
|
| - RootInlineBox* firstRootBox = firstLineBox()->root();
|
| - RootInlineBox* lastRootBox = lastLineBox()->root();
|
| - LayoutUnit firstLineTop = firstLineBox()->logicalTopVisualOverflow(firstRootBox->lineTop());
|
| - LayoutUnit lastLineBottom = lastLineBox()->logicalBottomVisualOverflow(lastRootBox->lineBottom());
|
| + RootInlineBox& firstRootBox = firstLineBox()->root();
|
| + RootInlineBox& lastRootBox = lastLineBox()->root();
|
| + LayoutUnit firstLineTop = firstLineBox()->logicalTopVisualOverflow(firstRootBox.lineTop());
|
| + LayoutUnit lastLineBottom = lastLineBox()->logicalBottomVisualOverflow(lastRootBox.lineBottom());
|
| LayoutUnit logicalTop = firstLineTop - outlineSize;
|
| LayoutUnit logicalBottom = outlineSize + lastLineBottom;
|
|
|
| @@ -188,9 +188,9 @@ bool RenderLineBoxList::anyLineIntersectsRect(RenderBoxModelObject* renderer, co
|
|
|
| bool RenderLineBoxList::lineIntersectsDirtyRect(RenderBoxModelObject* renderer, InlineFlowBox* box, const PaintInfo& paintInfo, const LayoutPoint& offset) const
|
| {
|
| - RootInlineBox* root = box->root();
|
| - LayoutUnit logicalTop = min<LayoutUnit>(box->logicalTopVisualOverflow(root->lineTop()), root->selectionTop()) - renderer->maximalOutlineSize(paintInfo.phase);
|
| - LayoutUnit logicalBottom = box->logicalBottomVisualOverflow(root->lineBottom()) + renderer->maximalOutlineSize(paintInfo.phase);
|
| + RootInlineBox& root = box->root();
|
| + LayoutUnit logicalTop = min<LayoutUnit>(box->logicalTopVisualOverflow(root.lineTop()), root.selectionTop()) - renderer->maximalOutlineSize(paintInfo.phase);
|
| + LayoutUnit logicalBottom = box->logicalBottomVisualOverflow(root.lineBottom()) + renderer->maximalOutlineSize(paintInfo.phase);
|
|
|
| return rangeIntersectsRect(renderer, logicalTop, logicalBottom, paintInfo.rect, offset);
|
| }
|
| @@ -222,8 +222,8 @@ void RenderLineBoxList::paint(RenderBoxModelObject* renderer, PaintInfo& paintIn
|
| // based off positions of our first line box or our last line box.
|
| for (InlineFlowBox* curr = firstLineBox(); curr; curr = curr->nextLineBox()) {
|
| if (lineIntersectsDirtyRect(renderer, curr, info, paintOffset)) {
|
| - RootInlineBox* root = curr->root();
|
| - curr->paint(info, paintOffset, root->lineTop(), root->lineBottom());
|
| + RootInlineBox& root = curr->root();
|
| + curr->paint(info, paintOffset, root.lineTop(), root.lineBottom());
|
| }
|
| }
|
|
|
| @@ -260,9 +260,9 @@ bool RenderLineBoxList::hitTest(RenderBoxModelObject* renderer, const HitTestReq
|
| // 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->prevLineBox()) {
|
| - RootInlineBox* root = curr->root();
|
| - if (rangeIntersectsRect(renderer, curr->logicalTopVisualOverflow(root->lineTop()), curr->logicalBottomVisualOverflow(root->lineBottom()), rect, accumulatedOffset)) {
|
| - bool inside = curr->nodeAtPoint(request, result, locationInContainer, accumulatedOffset, root->lineTop(), root->lineBottom());
|
| + RootInlineBox& root = curr->root();
|
| + if (rangeIntersectsRect(renderer, curr->logicalTopVisualOverflow(root.lineTop()), curr->logicalBottomVisualOverflow(root.lineBottom()), rect, accumulatedOffset)) {
|
| + bool inside = curr->nodeAtPoint(request, result, locationInContainer, accumulatedOffset, root.lineTop(), root.lineBottom());
|
| if (inside) {
|
| renderer->updateHitTestResult(result, locationInContainer.point() - toLayoutSize(accumulatedOffset));
|
| return true;
|
| @@ -304,15 +304,15 @@ void RenderLineBoxList::dirtyLinesFromChangedChild(RenderObject* container, Rend
|
| if (curr->isReplaced()) {
|
| InlineBox* wrapper = toRenderBox(curr)->inlineBoxWrapper();
|
| if (wrapper)
|
| - box = wrapper->root();
|
| + box = &wrapper->root();
|
| } else if (curr->isText()) {
|
| InlineTextBox* textBox = toRenderText(curr)->lastTextBox();
|
| if (textBox)
|
| - box = textBox->root();
|
| + box = &textBox->root();
|
| } else if (curr->isRenderInline()) {
|
| InlineBox* lastSiblingBox = toRenderInline(curr)->lastLineBoxIncludingCulling();
|
| if (lastSiblingBox)
|
| - box = lastSiblingBox->root();
|
| + box = &lastSiblingBox->root();
|
| }
|
|
|
| if (box)
|
| @@ -331,7 +331,7 @@ void RenderLineBoxList::dirtyLinesFromChangedChild(RenderObject* container, Rend
|
| }
|
| return;
|
| }
|
| - box = firstBox->root();
|
| + box = &firstBox->root();
|
| }
|
|
|
| // If we found a line box, then dirty it.
|
|
|