Index: Source/core/rendering/compositing/CompositedLayerMapping.cpp |
diff --git a/Source/core/rendering/compositing/CompositedLayerMapping.cpp b/Source/core/rendering/compositing/CompositedLayerMapping.cpp |
index 1924a3268a64f8c9bdbe32b0526ef477db51102e..426170eb85de7009db385f305ed198a1f40d0d6f 100644 |
--- a/Source/core/rendering/compositing/CompositedLayerMapping.cpp |
+++ b/Source/core/rendering/compositing/CompositedLayerMapping.cpp |
@@ -54,6 +54,7 @@ |
#include "platform/LengthFunctions.h" |
#include "platform/RuntimeEnabledFeatures.h" |
#include "platform/fonts/FontCache.h" |
+#include "platform/geometry/TransformState.h" |
#include "platform/graphics/GraphicsContext.h" |
#include "wtf/CurrentTime.h" |
#include "wtf/text/StringBuilder.h" |
@@ -761,11 +762,12 @@ void CompositedLayerMapping::updateOverflowControlsHostLayerGeometry(const Rende |
m_overflowControlsHostLayer->setPosition(IntPoint(-m_overflowControlsClippingLayer->offsetFromRenderer())); |
} else { |
- ASSERT(m_owningLayer.transformAncestor() == compositingStackingContext->transformAncestor()); |
- LayoutPoint localOffsetToTransformedAncestor = m_owningLayer.computeOffsetFromTransformedAncestor(); |
- LayoutPoint compositingStackingContextOffsetToTransformedAncestor = compositingStackingContext->computeOffsetFromTransformedAncestor(); |
- |
- m_overflowControlsHostLayer->setPosition(FloatPoint(localOffsetToTransformedAncestor - compositingStackingContextOffsetToTransformedAncestor)); |
+ // The controls are in the same 2D space as the compositing container, so we can map them into the space of the container. |
+ TransformState transformState(TransformState::ApplyTransformDirection, FloatPoint()); |
+ m_owningLayer.renderer()->mapLocalToContainer(compositingStackingContext->renderer(), transformState, ApplyContainerFlip); |
+ transformState.flatten(); |
+ LayoutPoint offsetFromStackingContainer = LayoutPoint(transformState.lastPlanarPoint()); |
+ m_overflowControlsHostLayer->setPosition(FloatPoint(offsetFromStackingContainer)); |
} |
} else { |
m_overflowControlsHostLayer->setPosition(FloatPoint()); |