#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"
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());
Color bgColor(Color::transparent);
if (contentLayerSupportsDirectBackgroundComposition(renderer())) {
bgColor = rendererBackgroundColor();
+ hasPaintedContent = false;
}
contentLayer->setBackgroundColor(bgColor.rgb());
}
&& (compositingAncestorLayer->compositedLayerMapping()->mainGraphicsLayer()->drawsContent()
|| compositingAncestorLayer->compositedLayerMapping()->paintsIntoCompositedAncestor());
- if (paintsIntoCompositedAncestor() != previousPaintsIntoCompositedAncestor)
- compositor()->paintInvalidationOnCompositingChange(&m_owningLayer);
-
- // FIXME: this is bogus. We need to make this assignment before the check above.
m_requiresOwnBackingStoreForAncestorReasons = !canPaintIntoAncestor;
+ if (paintsIntoCompositedAncestor() != previousPaintsIntoCompositedAncestor) {
+ // Back out the change temporarily while invalidating with respect to the old container.
+ m_requiresOwnBackingStoreForAncestorReasons = !m_requiresOwnBackingStoreForAncestorReasons;
+ compositor()->paintInvalidationOnCompositingChange(&m_owningLayer);
+ m_requiresOwnBackingStoreForAncestorReasons = !m_requiresOwnBackingStoreForAncestorReasons;
+ }
return m_requiresOwnBackingStoreForAncestorReasons != previousRequiresOwnBackingStoreForAncestorReasons;
}
|| renderer->hasReflection()
|| renderer->hasFilter();
- if (paintsIntoCompositedAncestor() != previousPaintsIntoCompositedAncestor)
+ if (paintsIntoCompositedAncestor() != previousPaintsIntoCompositedAncestor) {
+ // Back out the change temporarily while invalidating with respect to the old container.
+ m_requiresOwnBackingStoreForIntrinsicReasons = !m_requiresOwnBackingStoreForIntrinsicReasons;
compositor()->paintInvalidationOnCompositingChange(&m_owningLayer);
+ m_requiresOwnBackingStoreForIntrinsicReasons = !m_requiresOwnBackingStoreForIntrinsicReasons;
+ }
return m_requiresOwnBackingStoreForIntrinsicReasons != previousRequiresOwnBackingStoreForIntrinsicReasons;
}