From 83e3394904ff18839737452a68c8aa02f83f3b34 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Mon, 11 Sep 2017 16:26:49 -0700 Subject: [PATCH] stylo: Preserve the variant of translate() values in computed transforms --- components/style/properties/gecko.mako.rs | 7 ++++ .../helpers/animated_properties.mako.rs | 15 +++++++++ .../style/properties/longhand/box.mako.rs | 32 +++++++++++-------- components/style/values/computed/transform.rs | 17 ++++++++++ 4 files changed, 57 insertions(+), 14 deletions(-) diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index 965bf955127d..38bb53e4df3a 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -3069,6 +3069,9 @@ fn static_assert() { ${transform_function_arm("MatrixWithPercents", "matrix3d", ["number"] * 12 + ["lop"] * 2 + ["length"] + ["number"])} ${transform_function_arm("Skew", "skew", ["angle"] * 2)} + ${transform_function_arm("TranslateX", "translatex", ["lop"])} + ${transform_function_arm("TranslateY", "translatey", ["lop"])} + ${transform_function_arm("TranslateZ", "translatez", ["length"])} ${transform_function_arm("Translate", "translate3d", ["lop", "lop", "length"])} ${transform_function_arm("Scale", "scale3d", ["number"] * 3)} ${transform_function_arm("Rotate", "rotate3d", ["number"] * 3 + ["angle"])} @@ -3189,6 +3192,10 @@ fn static_assert() { match transform_function { ${computed_operation_arm("Matrix", "matrix3d", ["number"] * 16)} ${computed_operation_arm("Skew", "skew", ["angle"] * 2)} + + ${computed_operation_arm("TranslateX", "translatex", ["lop"])} + ${computed_operation_arm("TranslateY", "translatey", ["lop"])} + ${computed_operation_arm("TranslateZ", "translatez", ["length"])} ${computed_operation_arm("Translate", "translate3d", ["lop", "lop", "length"])} ${computed_operation_arm("Scale", "scale3d", ["number"] * 3)} ${computed_operation_arm("Rotate", "rotate3d", ["number"] * 3 + ["angle"])} diff --git a/components/style/properties/helpers/animated_properties.mako.rs b/components/style/properties/helpers/animated_properties.mako.rs index 0f1db632c911..1bdd06ef33ab 100644 --- a/components/style/properties/helpers/animated_properties.mako.rs +++ b/components/style/properties/helpers/animated_properties.mako.rs @@ -1135,6 +1135,21 @@ impl ToAnimatedZero for TransformOperation { sy.to_animated_zero()?, )) }, + TransformOperation::TranslateX(ref tx) => { + Ok(TransformOperation::TranslateX( + tx.to_animated_zero()? + )) + }, + TransformOperation::TranslateY(ref ty) => { + Ok(TransformOperation::TranslateY( + ty.to_animated_zero()? + )) + }, + TransformOperation::TranslateZ(ref tz) => { + Ok(TransformOperation::TranslateZ( + tz.to_animated_zero()? + )) + }, TransformOperation::Translate(ref tx, ref ty, ref tz) => { Ok(TransformOperation::Translate( tx.to_animated_zero()?, diff --git a/components/style/properties/longhand/box.mako.rs b/components/style/properties/longhand/box.mako.rs index 52befd9c67dd..03af3b83670e 100644 --- a/components/style/properties/longhand/box.mako.rs +++ b/components/style/properties/longhand/box.mako.rs @@ -683,6 +683,9 @@ ${helpers.predefined_type( // For `-moz-transform` matrix and matrix3d. MatrixWithPercents(ComputedMatrixWithPercents), Skew(computed::Angle, computed::Angle), + TranslateX(LengthOrPercentage), + TranslateY(LengthOrPercentage), + TranslateZ(Length), Translate(computed::LengthOrPercentage, computed::LengthOrPercentage, computed::Length), @@ -1262,24 +1265,15 @@ ${helpers.predefined_type( } SpecifiedOperation::TranslateX(ref tx) => { let tx = tx.to_computed_value(context); - result.push(computed_value::ComputedOperation::Translate( - tx, - computed::length::LengthOrPercentage::zero(), - computed::length::Length::new(0.))); + result.push(computed_value::ComputedOperation::TranslateX(tx)); } SpecifiedOperation::TranslateY(ref ty) => { let ty = ty.to_computed_value(context); - result.push(computed_value::ComputedOperation::Translate( - computed::length::LengthOrPercentage::zero(), - ty, - computed::length::Length::new(0.))); + result.push(computed_value::ComputedOperation::TranslateY(ty)); } SpecifiedOperation::TranslateZ(ref tz) => { let tz = tz.to_computed_value(context); - result.push(computed_value::ComputedOperation::Translate( - computed::length::LengthOrPercentage::zero(), - computed::length::LengthOrPercentage::zero(), - tz)); + result.push(computed_value::ComputedOperation::TranslateZ(tz)); } SpecifiedOperation::Translate3D(ref tx, ref ty, ref tz) => { let tx = tx.to_computed_value(context); @@ -1423,9 +1417,19 @@ ${helpers.predefined_type( m44: Number::from_computed_value(&computed.m44), }); } + computed_value::ComputedOperation::TranslateX(ref tx) => { + result.push(SpecifiedOperation::TranslateX( + ToComputedValue::from_computed_value(tx))); + } + computed_value::ComputedOperation::TranslateY(ref ty) => { + result.push(SpecifiedOperation::TranslateY( + ToComputedValue::from_computed_value(ty))); + } + computed_value::ComputedOperation::TranslateZ(ref tz) => { + result.push(SpecifiedOperation::TranslateZ( + ToComputedValue::from_computed_value(tz))); + } computed_value::ComputedOperation::Translate(ref tx, ref ty, ref tz) => { - // XXXManishearth we lose information here; perhaps we should try to - // recover the original function? Not sure if this can be observed. result.push(SpecifiedOperation::Translate3D( ToComputedValue::from_computed_value(tx), ToComputedValue::from_computed_value(ty), diff --git a/components/style/values/computed/transform.rs b/components/style/values/computed/transform.rs index 21c98c50d990..88910e0ff630 100644 --- a/components/style/values/computed/transform.rs +++ b/components/style/values/computed/transform.rs @@ -92,6 +92,23 @@ impl TransformList { ComputedOperation::Scale(sx, sy, sz) => { Transform3D::create_scale(sx, sy, sz) } + ComputedOperation::TranslateX(tx) => { + let tx = match reference_box { + Some(relative_border_box) => tx.to_used_value(relative_border_box.size.width).to_f32_px(), + None => extract_pixel_length(&tx), + }; + Transform3D::create_translation(tx, 0., 0.) + } + ComputedOperation::TranslateY(ty) => { + let ty = match reference_box { + Some(relative_border_box) => ty.to_used_value(relative_border_box.size.height).to_f32_px(), + None => extract_pixel_length(&ty), + }; + Transform3D::create_translation(0., ty, 0.) + } + ComputedOperation::TranslateZ(tz) => { + Transform3D::create_translation(0., 0., tz.to_f32_px()) + } ComputedOperation::Translate(tx, ty, tz) => { let (tx, ty) = match reference_box { Some(relative_border_box) => {