| Index: Source/core/rendering/compositing/RenderLayerCompositor.cpp
|
| diff --git a/Source/core/rendering/compositing/RenderLayerCompositor.cpp b/Source/core/rendering/compositing/RenderLayerCompositor.cpp
|
| index 5101d1624c157ef5013bdb0e12e08bbfd1798ce8..1c0d59e41b161cad9e24d3afc9ed091604bccf7a 100644
|
| --- a/Source/core/rendering/compositing/RenderLayerCompositor.cpp
|
| +++ b/Source/core/rendering/compositing/RenderLayerCompositor.cpp
|
| @@ -619,6 +619,51 @@ bool RenderLayerCompositor::parentFrameContentLayers(RenderPart* renderer)
|
| return true;
|
| }
|
|
|
| +bool RenderLayerCompositor::computeEnclosingCompositingLayer(Node* node, RenderLayer*& renderLayer, GraphicsLayer*& graphicsLayer)
|
| +{
|
| + if (!node || !node->renderer())
|
| + return false;
|
| +
|
| + // Find the nearest enclosing composited layer and attach to it. We may need to cross frame boundaries
|
| + // to find a suitable layer.
|
| + RenderObject* renderer = node->renderer();
|
| + do {
|
| + renderLayer = renderer->enclosingLayer()->enclosingLayerForPaintInvalidation();
|
| + if (!renderLayer) {
|
| + renderer = renderer->frame()->ownerRenderer();
|
| + if (!renderer)
|
| + return false;
|
| + }
|
| + } while (!renderLayer);
|
| +
|
| + ASSERT(renderLayer->compositingState() != NotComposited);
|
| +
|
| + graphicsLayer = renderLayer->graphicsLayerBacking();
|
| + if (!graphicsLayer->drawsContent()) {
|
| + graphicsLayer = renderLayer->graphicsLayerBackingForScrolling();
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +
|
| +static FloatPoint convertTargetSpacePointToCompositedLayer(const FloatPoint& point, RenderObject* targetRenderer, RenderObject* compositedRenderer)
|
| +{
|
| + IntPoint roundedPoint(roundedIntPoint(point));
|
| + roundedPoint = targetRenderer->frame()->view()->contentsToWindow(roundedPoint);
|
| + roundedPoint = compositedRenderer->frame()->view()->windowToContents(roundedPoint);
|
| + return compositedRenderer->absoluteToLocal(roundedPoint, UseTransforms);
|
| +}
|
| +
|
| +void RenderLayerCompositor::convertTargetSpaceQuadToCompositedLayer(const FloatQuad& targetSpaceQuad, RenderObject* targetRenderer, RenderObject* compositedRenderer, FloatQuad& compositedSpaceQuad)
|
| +{
|
| + ASSERT(targetRenderer);
|
| + ASSERT(compositedRenderer);
|
| + compositedSpaceQuad.setP1(convertTargetSpacePointToCompositedLayer(targetSpaceQuad.p1(), targetRenderer, compositedRenderer));
|
| + compositedSpaceQuad.setP2(convertTargetSpacePointToCompositedLayer(targetSpaceQuad.p2(), targetRenderer, compositedRenderer));
|
| + compositedSpaceQuad.setP3(convertTargetSpacePointToCompositedLayer(targetSpaceQuad.p3(), targetRenderer, compositedRenderer));
|
| + compositedSpaceQuad.setP4(convertTargetSpacePointToCompositedLayer(targetSpaceQuad.p4(), targetRenderer, compositedRenderer));
|
| +}
|
| +
|
| void RenderLayerCompositor::repaintCompositedLayers()
|
| {
|
| recursiveRepaintLayer(rootRenderLayer());
|
|
|