17242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
27242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Use of this source code is governed by a BSD-style license that can be
37242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// found in the LICENSE file.
47242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
57242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "config.h"
67242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/paint/ReplicaPainter.h"
77242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
87242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/rendering/GraphicsContextAnnotator.h"
97242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/rendering/PaintInfo.h"
107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/rendering/RenderLayer.h"
117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/rendering/RenderReplica.h"
127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccinamespace blink {
147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid ReplicaPainter::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ANNOTATE_GRAPHICS_CONTEXT(paintInfo, &m_renderReplica);
187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (paintInfo.phase != PaintPhaseForeground && paintInfo.phase != PaintPhaseMask)
207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return;
217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    LayoutPoint adjustedPaintOffset = paintOffset + m_renderReplica.location();
237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    if (paintInfo.phase == PaintPhaseForeground) {
257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        // Turn around and paint the parent layer. Use temporary clipRects, so that the layer doesn't end up caching clip rects
267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        // computing using the wrong rootLayer
277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        RenderLayer* rootPaintingLayer = m_renderReplica.layer()->transform() ? m_renderReplica.layer()->parent() : m_renderReplica.layer()->enclosingTransformedAncestor();
287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        LayerPaintingInfo paintingInfo(rootPaintingLayer, paintInfo.rect, PaintBehaviorNormal, LayoutSize(), 0);
297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        PaintLayerFlags flags = PaintLayerHaveTransparency | PaintLayerAppliedTransform | PaintLayerUncachedClipRects | PaintLayerPaintingReflection;
307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        m_renderReplica.layer()->parent()->paintLayer(paintInfo.context, paintingInfo, flags);
317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    } else if (paintInfo.phase == PaintPhaseMask) {
327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        m_renderReplica.paintMask(paintInfo, adjustedPaintOffset);
337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    }
347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink
37