| Index: Source/core/paint/BlockPainter.cpp
|
| diff --git a/Source/core/paint/BlockPainter.cpp b/Source/core/paint/BlockPainter.cpp
|
| index 4bbaa8d1b730bdf9eb9b009bf04a9f711993f33a..e4cf326622ca39b2f126ee2bf3fa8bc34de2a735 100644
|
| --- a/Source/core/paint/BlockPainter.cpp
|
| +++ b/Source/core/paint/BlockPainter.cpp
|
| @@ -198,15 +198,8 @@ void BlockPainter::paintObject(const PaintInfo& paintInfo, const LayoutPoint& pa
|
| m_layoutBlock.paintFloats(contentsPaintInfo, paintOffset, paintPhase == PaintPhaseSelection || paintPhase == PaintPhaseTextClip);
|
| }
|
|
|
| - if ((paintPhase == PaintPhaseOutline || paintPhase == PaintPhaseSelfOutline) && m_layoutBlock.style()->hasOutline() && m_layoutBlock.style()->visibility() == VISIBLE) {
|
| - // Don't paint focus ring for anonymous block continuation because the
|
| - // inline element having outline-style:auto paints the whole focus ring.
|
| - if (!m_layoutBlock.style()->outlineStyleIsAuto() || !m_layoutBlock.isAnonymousBlockContinuation())
|
| - ObjectPainter(m_layoutBlock).paintOutline(paintInfo, m_layoutBlock.visualOverflowRect(), m_layoutBlock.size(), paintOffset);
|
| - }
|
| -
|
| - if (paintPhase == PaintPhaseOutline || paintPhase == PaintPhaseChildOutlines)
|
| - paintContinuationOutlines(paintInfo, paintOffset);
|
| + if ((paintPhase == PaintPhaseOutline || paintPhase == PaintPhaseSelfOutline) && m_layoutBlock.style()->hasOutline() && m_layoutBlock.style()->visibility() == VISIBLE)
|
| + ObjectPainter(m_layoutBlock).paintOutline(paintInfo, paintOffset);
|
|
|
| // If the caret's node's layout object's containing block is this block, and the paint action is PaintPhaseForeground,
|
| // then paint the caret.
|
| @@ -274,7 +267,10 @@ void BlockPainter::paintContents(const PaintInfo& paintInfo, const LayoutPoint&
|
| return;
|
|
|
| if (m_layoutBlock.childrenInline()) {
|
| - LineBoxListPainter(*m_layoutBlock.lineBoxes()).paint(&m_layoutBlock, paintInfo, paintOffset);
|
| + if (paintInfo.phase == PaintPhaseChildOutlines)
|
| + ObjectPainter(m_layoutBlock).paintInlineChildrenOutlines(paintInfo, paintOffset);
|
| + else
|
| + LineBoxListPainter(*m_layoutBlock.lineBoxes()).paint(&m_layoutBlock, paintInfo, paintOffset);
|
| } else {
|
| PaintPhase newPhase = (paintInfo.phase == PaintPhaseChildOutlines) ? PaintPhaseOutline : paintInfo.phase;
|
| newPhase = (newPhase == PaintPhaseChildBlockBackgrounds) ? PaintPhaseChildBlockBackground : newPhase;
|
| @@ -287,54 +283,4 @@ void BlockPainter::paintContents(const PaintInfo& paintInfo, const LayoutPoint&
|
| }
|
| }
|
|
|
| -void BlockPainter::paintContinuationOutlines(const PaintInfo& info, const LayoutPoint& paintOffset)
|
| -{
|
| - LayoutInline* inlineCont = m_layoutBlock.inlineElementContinuation();
|
| - if (inlineCont && inlineCont->style()->hasOutline() && inlineCont->style()->visibility() == VISIBLE) {
|
| - LayoutInline* inlineLayoutObject = toLayoutInline(inlineCont->node()->layoutObject());
|
| - LayoutBlock* cb = m_layoutBlock.containingBlock();
|
| -
|
| - bool inlineEnclosedInSelfPaintingLayer = false;
|
| - for (LayoutBoxModelObject* box = inlineLayoutObject; box != cb; box = box->parent()->enclosingBoxModelObject()) {
|
| - if (box->hasSelfPaintingLayer()) {
|
| - inlineEnclosedInSelfPaintingLayer = true;
|
| - break;
|
| - }
|
| - }
|
| -
|
| - // Do not add continuations for outline painting by our containing block if we are a relative positioned
|
| - // anonymous block (i.e. have our own layer), paint them straightaway instead. This is because a block depends on layoutObjects in its continuation table being
|
| - // in the same layer.
|
| - if (!inlineEnclosedInSelfPaintingLayer && !m_layoutBlock.hasLayer()) {
|
| - cb->addContinuationWithOutline(inlineLayoutObject);
|
| - } else if (!inlineLayoutObject->firstLineBox() || (!inlineEnclosedInSelfPaintingLayer && m_layoutBlock.hasLayer())) {
|
| - // The outline might be painted multiple times if multiple blocks have the same inline element continuation, and the inline has a self-painting layer.
|
| - ScopeRecorder scopeRecorder(*info.context);
|
| - InlinePainter(*inlineLayoutObject).paintOutline(info, paintOffset - m_layoutBlock.locationOffset() + inlineLayoutObject->containingBlock()->location());
|
| - }
|
| - }
|
| -
|
| - ContinuationOutlineTableMap* table = continuationOutlineTable();
|
| - if (table->isEmpty())
|
| - return;
|
| -
|
| - OwnPtr<ListHashSet<LayoutInline*>> continuations = table->take(&m_layoutBlock);
|
| - if (!continuations)
|
| - return;
|
| -
|
| - LayoutPoint accumulatedPaintOffset = paintOffset;
|
| - // Paint each continuation outline.
|
| - ListHashSet<LayoutInline*>::iterator end = continuations->end();
|
| - for (ListHashSet<LayoutInline*>::iterator it = continuations->begin(); it != end; ++it) {
|
| - // Need to add in the coordinates of the intervening blocks.
|
| - LayoutInline* flow = *it;
|
| - LayoutBlock* block = flow->containingBlock();
|
| - for ( ; block && block != &m_layoutBlock; block = block->containingBlock())
|
| - accumulatedPaintOffset.moveBy(block->location());
|
| - ASSERT(block);
|
| - InlinePainter(*flow).paintOutline(info, accumulatedPaintOffset);
|
| - }
|
| -}
|
| -
|
| -
|
| } // namespace blink
|
|
|