Chromium Code Reviews| Index: Source/core/rendering/InlineFlowBox.cpp |
| diff --git a/Source/core/rendering/InlineFlowBox.cpp b/Source/core/rendering/InlineFlowBox.cpp |
| index 66e89f3b5e07451a201aeafa4dd0e65654b1724f..2b1d06cf11789ad809cf009f6485426dd296b393 100644 |
| --- a/Source/core/rendering/InlineFlowBox.cpp |
| +++ b/Source/core/rendering/InlineFlowBox.cpp |
| @@ -164,8 +164,9 @@ void InlineFlowBox::addToLine(InlineBox* child) |
| if (box->hasRenderOverflow() || box->hasSelfPaintingLayer()) |
| child->clearKnownToHaveNoOverflow(); |
| } else if (!child->renderer()->isBR() && (child->renderer()->style(isFirstLineStyle())->boxShadow() || child->boxModelObject()->hasSelfPaintingLayer() |
| - || (child->renderer()->isListMarker() && !toRenderListMarker(child->renderer())->isInside()) |
| - || child->renderer()->style(isFirstLineStyle())->hasBorderImageOutsets())) |
| + || (child->renderer()->isListMarker() && !toRenderListMarker(child->renderer())->isInside()) |
| + || child->renderer()->style(isFirstLineStyle())->hasBorderImageOutsets() |
| + || child->renderer()->style(isFirstLineStyle())->hasOutline())) |
| child->clearKnownToHaveNoOverflow(); |
| if (knownToHaveNoOverflow() && child->isInlineFlowBox() && !toInlineFlowBox(child)->knownToHaveNoOverflow()) |
| @@ -829,6 +830,20 @@ inline void InlineFlowBox::addBorderOutsetVisualOverflow(LayoutRect& logicalVisu |
| logicalRightVisualOverflow - logicalLeftVisualOverflow, logicalBottomVisualOverflow - logicalTopVisualOverflow); |
| } |
| +inline void InlineFlowBox::addOutlineVisualOverflow(LayoutRect& logicalVisualOverflow) |
| +{ |
| + // outline on root line boxes is applying to the block and not to the lines. |
|
leviw_travelin_and_unemployed
2014/03/11 22:51:10
Nit: is applied.
Julien - ping for review
2014/03/12 03:18:58
Done.
|
| + if (!parent()) |
| + return; |
| + |
| + RenderStyle* style = renderer()->style(isFirstLineStyle()); |
| + if (!style->hasOutline()) |
| + return; |
| + |
| + unsigned short outlineSize = style->outlineSize(); |
| + logicalVisualOverflow.inflate(outlineSize); |
| +} |
| + |
| inline void InlineFlowBox::addTextBoxVisualOverflow(InlineTextBox* textBox, GlyphOverflowAndFallbackFontsMap& textBoxDataMap, LayoutRect& logicalVisualOverflow) |
| { |
| if (textBox->knownToHaveNoOverflow()) |
| @@ -924,6 +939,7 @@ void InlineFlowBox::computeOverflow(LayoutUnit lineTop, LayoutUnit lineBottom, G |
| addBoxShadowVisualOverflow(logicalVisualOverflow); |
| addBorderOutsetVisualOverflow(logicalVisualOverflow); |
| + addOutlineVisualOverflow(logicalVisualOverflow); |
| for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) { |
| if (curr->renderer()->isOutOfFlowPositioned()) |
| @@ -1065,7 +1081,6 @@ bool InlineFlowBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re |
| void InlineFlowBox::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset, LayoutUnit lineTop, LayoutUnit lineBottom) |
| { |
| LayoutRect overflowRect(visualOverflowRect(lineTop, lineBottom)); |
| - overflowRect.inflate(renderer()->maximalOutlineSize(paintInfo.phase)); |
| flipForWritingMode(overflowRect); |
| overflowRect.moveBy(paintOffset); |