| Index: Source/core/paint/InlineFlowBoxPainter.cpp
|
| diff --git a/Source/core/paint/InlineFlowBoxPainter.cpp b/Source/core/paint/InlineFlowBoxPainter.cpp
|
| index 90931756f5a856f5a7b61245be5804cd83bb659e..249a34610a12d8f386f5e4d7e9b22a4bfe10fe64 100644
|
| --- a/Source/core/paint/InlineFlowBoxPainter.cpp
|
| +++ b/Source/core/paint/InlineFlowBoxPainter.cpp
|
| @@ -22,6 +22,8 @@ namespace blink {
|
|
|
| void InlineFlowBoxPainter::paint(const PaintInfo& paintInfo, const LayoutPoint& paintOffset, const LayoutUnit lineTop, const LayoutUnit lineBottom)
|
| {
|
| + ASSERT(paintInfo.phase != PaintPhaseOutline && paintInfo.phase != PaintPhaseSelfOutline && paintInfo.phase != PaintPhaseChildOutlines);
|
| +
|
| LayoutRect overflowRect(m_inlineFlowBox.visualOverflowRect(lineTop, lineBottom));
|
| m_inlineFlowBox.flipForWritingMode(overflowRect);
|
| overflowRect.moveBy(paintOffset);
|
| @@ -29,66 +31,30 @@ void InlineFlowBoxPainter::paint(const PaintInfo& paintInfo, const LayoutPoint&
|
| if (!paintInfo.rect.intersects(pixelSnappedIntRect(overflowRect)))
|
| return;
|
|
|
| - if (paintInfo.phase == PaintPhaseOutline || paintInfo.phase == PaintPhaseSelfOutline) {
|
| - // Add ourselves to the paint info struct's list of inlines that need to paint their
|
| - // outlines.
|
| - if (m_inlineFlowBox.layoutObject().style()->visibility() == VISIBLE && m_inlineFlowBox.layoutObject().style()->hasOutline() && !m_inlineFlowBox.isRootInlineBox()) {
|
| - LayoutInline& inlineFlow = toLayoutInline(m_inlineFlowBox.layoutObject());
|
| -
|
| - LayoutBlock* cb = 0;
|
| - bool containingBlockPaintsContinuationOutline = inlineFlow.continuation() || inlineFlow.isInlineElementContinuation();
|
| - if (containingBlockPaintsContinuationOutline) {
|
| - // FIXME: See https://bugs.webkit.org/show_bug.cgi?id=54690. We currently don't reconnect inline continuations
|
| - // after a child removal. As a result, those merged inlines do not get seperated and hence not get enclosed by
|
| - // anonymous blocks. In this case, it is better to bail out and paint it ourself.
|
| - LayoutBlock* enclosingAnonymousBlock = m_inlineFlowBox.layoutObject().containingBlock();
|
| - if (!enclosingAnonymousBlock->isAnonymousBlock()) {
|
| - containingBlockPaintsContinuationOutline = false;
|
| - } else {
|
| - cb = enclosingAnonymousBlock->containingBlock();
|
| - for (LineLayoutBoxModel box = m_inlineFlowBox.boxModelObject(); box != cb; box = box.parent().enclosingBoxModelObject()) {
|
| - if (box.hasSelfPaintingLayer()) {
|
| - containingBlockPaintsContinuationOutline = false;
|
| - break;
|
| - }
|
| - }
|
| - }
|
| - }
|
| -
|
| - if (containingBlockPaintsContinuationOutline) {
|
| - // Add ourselves to the containing block of the entire continuation so that it can
|
| - // paint us atomically.
|
| - cb->addContinuationWithOutline(toLayoutInline(m_inlineFlowBox.layoutObject().node()->layoutObject()));
|
| - } else if (!inlineFlow.isInlineElementContinuation()) {
|
| - paintInfo.outlineObjects()->add(&inlineFlow);
|
| - }
|
| - }
|
| - } else if (paintInfo.phase == PaintPhaseMask) {
|
| + if (paintInfo.phase == PaintPhaseMask) {
|
| DisplayItem::Type displayItemType = DisplayItem::paintPhaseToDrawingType(paintInfo.phase);
|
| if (DrawingRecorder::useCachedDrawingIfPossible(*paintInfo.context, m_inlineFlowBox, displayItemType))
|
| return;
|
| DrawingRecorder recorder(*paintInfo.context, m_inlineFlowBox, displayItemType, pixelSnappedIntRect(overflowRect));
|
| paintMask(paintInfo, paintOffset);
|
| return;
|
| - } else if (paintInfo.phase == PaintPhaseForeground) {
|
| + }
|
| +
|
| + if (paintInfo.phase == PaintPhaseForeground) {
|
| // Paint our background, border and box-shadow.
|
| paintBoxDecorationBackground(paintInfo, paintOffset, overflowRect);
|
| }
|
|
|
| // Paint our children.
|
| - if (paintInfo.phase != PaintPhaseSelfOutline) {
|
| - PaintInfo childInfo(paintInfo);
|
| - childInfo.phase = paintInfo.phase == PaintPhaseChildOutlines ? PaintPhaseOutline : paintInfo.phase;
|
| -
|
| - if (childInfo.paintingRoot && childInfo.paintingRoot->isDescendantOf(&m_inlineFlowBox.layoutObject()))
|
| - childInfo.paintingRoot = 0;
|
| - else
|
| - childInfo.updatePaintingRootForChildren(&m_inlineFlowBox.layoutObject());
|
| -
|
| - for (InlineBox* curr = m_inlineFlowBox.firstChild(); curr; curr = curr->nextOnLine()) {
|
| - if (curr->lineLayoutItem().isText() || !curr->boxModelObject().hasSelfPaintingLayer())
|
| - curr->paint(childInfo, paintOffset, lineTop, lineBottom);
|
| - }
|
| + PaintInfo childInfo(paintInfo);
|
| + if (childInfo.paintingRoot && childInfo.paintingRoot->isDescendantOf(&m_inlineFlowBox.layoutObject()))
|
| + childInfo.paintingRoot = 0;
|
| + else
|
| + childInfo.updatePaintingRootForChildren(&m_inlineFlowBox.layoutObject());
|
| +
|
| + for (InlineBox* curr = m_inlineFlowBox.firstChild(); curr; curr = curr->nextOnLine()) {
|
| + if (curr->lineLayoutItem().isText() || !curr->boxModelObject().hasSelfPaintingLayer())
|
| + curr->paint(childInfo, paintOffset, lineTop, lineBottom);
|
| }
|
| }
|
|
|
|
|