Chromium Code Reviews| Index: Source/core/rendering/compositing/RenderLayerCompositor.cpp |
| diff --git a/Source/core/rendering/compositing/RenderLayerCompositor.cpp b/Source/core/rendering/compositing/RenderLayerCompositor.cpp |
| index 81603f801f981f1f2d05c5322fefc8b5cb3b13c7..3e7ec048e4b1b8aa73a9a4c2d296a3d52b7aa3c9 100644 |
| --- a/Source/core/rendering/compositing/RenderLayerCompositor.cpp |
| +++ b/Source/core/rendering/compositing/RenderLayerCompositor.cpp |
| @@ -366,6 +366,8 @@ void RenderLayerCompositor::updateIfNeeded() |
| m_needsUpdateFixedBackground = false; |
| } |
| + |
| + |
|
abarth-chromium
2014/06/13 21:38:14
This change is spurious.
|
| // The scrolling coordinator may realize that it needs updating while compositing was being updated in this function. |
| needsToUpdateScrollingCoordinator |= scrollingCoordinator() && scrollingCoordinator()->needsToUpdateAfterCompositingChange(); |
| if (needsToUpdateScrollingCoordinator && m_renderView.frame()->isMainFrame() && scrollingCoordinator() && inCompositingMode()) |
| @@ -667,6 +669,56 @@ 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(); |
| + RenderLayer* currentRenderLayer; |
| + do { |
| + currentRenderLayer = renderer->enclosingLayer()->enclosingCompositingLayerForRepaint(); |
| + if (!currentRenderLayer) { |
| + renderer = renderer->frame()->ownerRenderer(); |
| + if (!renderer) |
| + return false; |
| + } |
| + } while (!currentRenderLayer); |
|
abarth-chromium
2014/06/13 21:38:14
We shouldn't need to do this sort of search. Inst
|
| + |
| + renderLayer = currentRenderLayer; |
| + CompositedLayerMappingPtr compositedLayerMapping = renderLayer->compositingState() == PaintsIntoGroupedBacking ? renderLayer->groupedMapping() : renderLayer->compositedLayerMapping(); |
| + graphicsLayer = renderLayer->compositingState() == PaintsIntoGroupedBacking ? compositedLayerMapping->squashingLayer() : compositedLayerMapping->mainGraphicsLayer(); |
| + |
| + if (!graphicsLayer->drawsContent()) { |
| + if (renderLayer->scrollableArea() && renderLayer->scrollableArea()->usesCompositedScrolling()) { |
| + ASSERT(renderLayer->hasCompositedLayerMapping() && renderLayer->compositedLayerMapping()->scrollingContentsLayer()); |
| + graphicsLayer = compositedLayerMapping->scrollingContentsLayer(); |
| + } |
| + } |
|
abarth-chromium
2014/06/13 21:38:15
Again, this search shouldn't be needed.
|
| + |
| + 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); |
| +} |
|
abarth-chromium
2014/06/13 21:38:14
If we do this right, we shouldn't need to do any o
|
| + |
| +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)); |
| +} |
|
abarth-chromium
2014/06/13 21:38:14
Again, this sort of coordinate conversion shouldn'
|
| + |
| void RenderLayerCompositor::repaintCompositedLayers() |
| { |
| recursiveRepaintLayer(rootRenderLayer()); |