Bug 1457249 - Factor out the function that converts transform into device space. r?kats
MozReview-Commit-ID: L7CDcSdIj4D
--- a/gfx/layers/composite/AsyncCompositionManager.cpp
+++ b/gfx/layers/composite/AsyncCompositionManager.cpp
@@ -589,16 +589,42 @@ ServoAnimationValueToMatrix4x4(const Ref
transformOrigin);
return nsDisplayTransform::GetResultingTransformMatrix(
props, aTransformData.origin(),
aTransformData.appUnitsPerDevPixel(),
0, &aTransformData.bounds());
}
+
+static Matrix4x4
+FrameTransformToTransformInDevice(const Matrix4x4& aFrameTransform,
+ Layer* aLayer,
+ const TransformData& aTransformData)
+{
+ Matrix4x4 transformInDevice = aFrameTransform;
+ // If our parent layer is a perspective layer, then the offset into reference
+ // frame coordinates is already on that layer. If not, then we need to ask
+ // for it to be added here.
+ if (!aLayer->GetParent() ||
+ !aLayer->GetParent()->GetTransformIsPerspective()) {
+ nsLayoutUtils::PostTranslate(transformInDevice, aTransformData.origin(),
+ aTransformData.appUnitsPerDevPixel(),
+ true);
+ }
+
+ if (ContainerLayer* c = aLayer->AsContainerLayer()) {
+ transformInDevice.PostScale(c->GetInheritedXScale(),
+ c->GetInheritedYScale(),
+ 1);
+ }
+
+ return transformInDevice;
+}
+
static void
ApplyAnimatedValue(Layer* aLayer,
CompositorAnimationStorage* aStorage,
nsCSSPropertyID aProperty,
const AnimationData& aAnimationData,
const RefPtr<RawServoAnimationValue>& aValue)
{
if (!aValue) {
@@ -619,31 +645,20 @@ ApplyAnimatedValue(Layer* aLayer,
break;
}
case eCSSProperty_transform: {
const TransformData& transformData = aAnimationData.get_TransformData();
Matrix4x4 frameTransform =
ServoAnimationValueToMatrix4x4(aValue, transformData);
- Matrix4x4 transform = frameTransform;
-
- // If our parent layer is a perspective layer, then the offset into reference
- // frame coordinates is already on that layer. If not, then we need to ask
- // for it to be added here.
- if (!aLayer->GetParent() ||
- !aLayer->GetParent()->GetTransformIsPerspective()) {
- nsLayoutUtils::PostTranslate(transform, transformData.origin(),
- transformData.appUnitsPerDevPixel(),
- true);
- }
-
- if (ContainerLayer* c = aLayer->AsContainerLayer()) {
- transform.PostScale(c->GetInheritedXScale(), c->GetInheritedYScale(), 1);
- }
+ Matrix4x4 transform =
+ FrameTransformToTransformInDevice(frameTransform,
+ aLayer,
+ transformData);
layerCompositor->SetShadowBaseTransform(transform);
layerCompositor->SetShadowTransformSetByAnimation(true);
aStorage->SetAnimatedValue(aLayer->GetCompositorAnimationsId(),
Move(transform), Move(frameTransform),
transformData);
layerCompositor->SetShadowOpacity(aLayer->GetOpacity());