| Index: Source/core/paint/DeprecatedPaintLayerPainter.cpp
|
| diff --git a/Source/core/paint/DeprecatedPaintLayerPainter.cpp b/Source/core/paint/DeprecatedPaintLayerPainter.cpp
|
| index c8c67799c9cc3253604e9bb36b4b3a471107433d..a4c5cc94fbd6ca7320357f448de0235fa7863ede 100644
|
| --- a/Source/core/paint/DeprecatedPaintLayerPainter.cpp
|
| +++ b/Source/core/paint/DeprecatedPaintLayerPainter.cpp
|
| @@ -444,10 +444,7 @@ void DeprecatedPaintLayerPainter::paintChildren(unsigned childrenToVisit, Graphi
|
| childPaintingInfo.scrollOffsetAccumulation += parentLayer->layoutBox()->scrolledContentOffset();
|
| }
|
|
|
| - if (!child->layer()->isPaginated())
|
| - childPainter.paintLayer(context, childPaintingInfo, paintFlags);
|
| - else
|
| - childPainter.paintPaginatedChildLayer(context, childPaintingInfo, paintFlags);
|
| + childPainter.paintLayer(context, childPaintingInfo, paintFlags);
|
| }
|
| }
|
|
|
| @@ -484,143 +481,6 @@ void DeprecatedPaintLayerPainter::paintOverflowControlsForFragments(const Deprec
|
| }
|
| }
|
|
|
| -static bool checkContainingBlockChainForPagination(LayoutBoxModelObject* layoutObject, LayoutBox* ancestorColumnsLayoutObject)
|
| -{
|
| - LayoutView* view = layoutObject->view();
|
| - LayoutBoxModelObject* prevBlock = layoutObject;
|
| - LayoutBlock* containingBlock;
|
| - for (containingBlock = layoutObject->containingBlock();
|
| - containingBlock && containingBlock != view && containingBlock != ancestorColumnsLayoutObject;
|
| - containingBlock = containingBlock->containingBlock())
|
| - prevBlock = containingBlock;
|
| -
|
| - // If the columns block wasn't in our containing block chain, then we aren't paginated by it.
|
| - if (containingBlock != ancestorColumnsLayoutObject)
|
| - return false;
|
| -
|
| - // If the previous block is absolutely positioned, then we can't be paginated by the columns block.
|
| - if (prevBlock->isOutOfFlowPositioned())
|
| - return false;
|
| -
|
| - // Otherwise we are paginated by the columns block.
|
| - return true;
|
| -}
|
| -
|
| -void DeprecatedPaintLayerPainter::paintPaginatedChildLayer(GraphicsContext* context, const DeprecatedPaintLayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags)
|
| -{
|
| - // We need to do multiple passes, breaking up our child layer into strips.
|
| - Vector<DeprecatedPaintLayer*> columnLayers;
|
| - DeprecatedPaintLayerStackingNode* ancestorNode = m_paintLayer.stackingNode()->isNormalFlowOnly() ? m_paintLayer.parent()->stackingNode() : m_paintLayer.stackingNode()->ancestorStackingContextNode();
|
| - for (DeprecatedPaintLayer* curr = m_paintLayer.parent(); curr; curr = curr->parent()) {
|
| - if (curr->layoutObject()->hasColumns() && checkContainingBlockChainForPagination(m_paintLayer.layoutObject(), curr->layoutBox()))
|
| - columnLayers.append(curr);
|
| - if (curr->stackingNode() == ancestorNode)
|
| - break;
|
| - }
|
| -
|
| - // It is possible for paintLayer() to be called after the child layer ceases to be paginated but before
|
| - // updatePaginationRecusive() is called and resets the isPaginated() flag, see <rdar://problem/10098679>.
|
| - // If this is the case, just bail out, since the upcoming call to updatePaginationRecusive() will paint invalidate the layer.
|
| - // FIXME: Is this true anymore? This seems very suspicious.
|
| - if (!columnLayers.size())
|
| - return;
|
| -
|
| - paintChildLayerIntoColumns(context, paintingInfo, paintFlags, columnLayers, columnLayers.size() - 1);
|
| -}
|
| -
|
| -void DeprecatedPaintLayerPainter::paintChildLayerIntoColumns(GraphicsContext* context, const DeprecatedPaintLayerPaintingInfo& paintingInfo,
|
| - PaintLayerFlags paintFlags, const Vector<DeprecatedPaintLayer*>& columnLayers, size_t colIndex)
|
| -{
|
| - LayoutBlock* columnBlock = toLayoutBlock(columnLayers[colIndex]->layoutObject());
|
| -
|
| - ASSERT(columnBlock && columnBlock->hasColumns());
|
| - if (!columnBlock || !columnBlock->hasColumns())
|
| - return;
|
| -
|
| - LayoutPoint layerOffset;
|
| - // FIXME: It looks suspicious to call convertToLayerCoords here
|
| - // as canUseConvertToLayerCoords is true for this layer.
|
| - columnBlock->layer()->convertToLayerCoords(paintingInfo.rootLayer, layerOffset);
|
| -
|
| - bool isHorizontal = columnBlock->style()->isHorizontalWritingMode();
|
| -
|
| - ColumnInfo* colInfo = columnBlock->columnInfo();
|
| - unsigned colCount = columnBlock->columnCount(colInfo);
|
| - LayoutUnit currLogicalTopOffset = 0;
|
| - for (unsigned i = 0; i < colCount; i++) {
|
| - // For each rect, we clip to the rect, and then we adjust our coords.
|
| - LayoutRect colRect = columnBlock->columnRectAt(colInfo, i);
|
| - columnBlock->flipForWritingMode(colRect);
|
| - LayoutUnit logicalLeftOffset = (isHorizontal ? colRect.x() : colRect.y()) - columnBlock->logicalLeftOffsetForContent();
|
| - LayoutSize offset;
|
| - if (isHorizontal) {
|
| - if (colInfo->progressionAxis() == ColumnInfo::InlineAxis)
|
| - offset = LayoutSize(logicalLeftOffset, currLogicalTopOffset);
|
| - else
|
| - offset = LayoutSize(0, colRect.y() + currLogicalTopOffset - columnBlock->borderTop() - columnBlock->paddingTop());
|
| - } else {
|
| - if (colInfo->progressionAxis() == ColumnInfo::InlineAxis)
|
| - offset = LayoutSize(currLogicalTopOffset, logicalLeftOffset);
|
| - else
|
| - offset = LayoutSize(colRect.x() + currLogicalTopOffset - columnBlock->borderLeft() - columnBlock->paddingLeft(), 0);
|
| - }
|
| -
|
| - colRect.moveBy(layerOffset);
|
| -
|
| - LayoutRect localDirtyRect(paintingInfo.paintDirtyRect);
|
| - localDirtyRect.intersect(colRect);
|
| -
|
| - if (!localDirtyRect.isEmpty()) {
|
| - // Each strip pushes a clip, since column boxes are specified as being
|
| - // like overflow:hidden.
|
| - ClipRecorder clipRecorder(*context, *m_paintLayer.layoutObject(), DisplayItem::ClipLayerColumnBounds, LayoutRect(enclosingIntRect(colRect)));
|
| -
|
| - if (!colIndex) {
|
| - // Apply a translation transform to change where the layer paints.
|
| - TransformationMatrix oldTransform;
|
| - bool oldHasTransform = m_paintLayer.transform();
|
| - if (oldHasTransform)
|
| - oldTransform = *m_paintLayer.transform();
|
| - TransformationMatrix newTransform(oldTransform);
|
| - newTransform.translateRight(roundToInt(offset.width()), roundToInt(offset.height()));
|
| -
|
| - m_paintLayer.setTransform(adoptPtr(new TransformationMatrix(newTransform)));
|
| -
|
| - DeprecatedPaintLayerPaintingInfo localPaintingInfo(paintingInfo);
|
| - localPaintingInfo.paintDirtyRect = localDirtyRect;
|
| - paintLayer(context, localPaintingInfo, paintFlags);
|
| -
|
| - if (oldHasTransform)
|
| - m_paintLayer.setTransform(adoptPtr(new TransformationMatrix(oldTransform)));
|
| - else
|
| - m_paintLayer.clearTransform();
|
| - } else {
|
| - // Adjust the transform such that the layoutObject's upper left corner will paint at (0,0) in user space.
|
| - // This involves subtracting out the position of the layer in our current coordinate space.
|
| - LayoutPoint childOffset;
|
| - columnLayers[colIndex - 1]->convertToLayerCoords(paintingInfo.rootLayer, childOffset);
|
| - TransformationMatrix transform;
|
| - transform.translateRight(roundToInt(childOffset.x() + offset.width()), roundToInt(childOffset.y() + offset.height()));
|
| -
|
| - Transform3DRecorder transform3DRecorder(*context, *m_paintLayer.layoutObject(), DisplayItem::Transform3DElementTransform, transform);
|
| -
|
| - // Now do a paint with the root layer shifted to be the next multicol block.
|
| - DeprecatedPaintLayerPaintingInfo columnPaintingInfo(paintingInfo);
|
| - columnPaintingInfo.rootLayer = columnLayers[colIndex - 1];
|
| - columnPaintingInfo.paintDirtyRect = transform.inverse().mapRect(localDirtyRect);
|
| - paintChildLayerIntoColumns(context, columnPaintingInfo, paintFlags, columnLayers, colIndex - 1);
|
| - }
|
| - }
|
| -
|
| - // Move to the next position.
|
| - LayoutUnit blockDelta = isHorizontal ? colRect.height() : colRect.width();
|
| - if (columnBlock->style()->isFlippedBlocksWritingMode())
|
| - currLogicalTopOffset += blockDelta;
|
| - else
|
| - currLogicalTopOffset -= blockDelta;
|
| - }
|
| -}
|
| -
|
| void DeprecatedPaintLayerPainter::paintFragmentWithPhase(PaintPhase phase, const DeprecatedPaintLayerFragment& fragment, GraphicsContext* context, const ClipRect& clipRect, const DeprecatedPaintLayerPaintingInfo& paintingInfo, PaintBehavior paintBehavior, LayoutObject* paintingRootForLayoutObject, PaintLayerFlags paintFlags, ClipState clipState)
|
| {
|
| ASSERT(m_paintLayer.isSelfPaintingLayer());
|
|
|