mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Add generic struct for transform
This commit is contained in:
parent
86b9e7d7d6
commit
337d48aa61
1 changed files with 104 additions and 1 deletions
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use style_traits::ToCss;
|
use style_traits::ToCss;
|
||||||
use values::CSSFloat;
|
use values::{computed, specified, CSSFloat};
|
||||||
|
|
||||||
/// A generic 2D transformation matrix.
|
/// A generic 2D transformation matrix.
|
||||||
#[allow(missing_docs)]
|
#[allow(missing_docs)]
|
||||||
|
@ -137,3 +137,106 @@ impl TimingKeyword {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
|
#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
|
||||||
|
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
|
||||||
|
/// A single operation in the list of a `transform` value
|
||||||
|
pub enum TransformOperation<Angle, Number, Length, LengthOrNumber, LengthOrPercentage, LoPoNumber> {
|
||||||
|
/// Represents a 2D 2x3 matrix.
|
||||||
|
Matrix(Matrix<Number>),
|
||||||
|
/// Represents a 3D 4x4 matrix with percentage and length values.
|
||||||
|
/// For `moz-transform`.
|
||||||
|
PrefixedMatrix(Matrix<Number, LoPoNumber>),
|
||||||
|
/// Represents a 3D 4x4 matrix.
|
||||||
|
#[allow(missing_docs)]
|
||||||
|
Matrix3D {
|
||||||
|
m11: Number, m12: Number, m13: Number, m14: Number,
|
||||||
|
m21: Number, m22: Number, m23: Number, m24: Number,
|
||||||
|
m31: Number, m32: Number, m33: Number, m34: Number,
|
||||||
|
m41: Number, m42: Number, m43: Number, m44: Number,
|
||||||
|
},
|
||||||
|
/// Represents a 3D 4x4 matrix with percentage and length values.
|
||||||
|
/// For `moz-transform`.
|
||||||
|
#[allow(missing_docs)]
|
||||||
|
PrefixedMatrix3D {
|
||||||
|
m11: Number, m12: Number, m13: Number, m14: Number,
|
||||||
|
m21: Number, m22: Number, m23: Number, m24: Number,
|
||||||
|
m31: Number, m32: Number, m33: Number, m34: Number,
|
||||||
|
m41: LoPoNumber, m42: LoPoNumber, m43: LengthOrNumber, m44: Number,
|
||||||
|
},
|
||||||
|
/// A 2D skew.
|
||||||
|
///
|
||||||
|
/// If the second angle is not provided it is assumed zero.
|
||||||
|
///
|
||||||
|
/// Syntax can be skew(angle) or skew(angle, angle)
|
||||||
|
Skew(Angle, Option<Angle>),
|
||||||
|
/// skewX(angle)
|
||||||
|
SkewX(Angle),
|
||||||
|
/// skewY(angle)
|
||||||
|
SkewY(Angle),
|
||||||
|
/// translate(x, y) or translate(x)
|
||||||
|
Translate(LengthOrPercentage, Option<LengthOrPercentage>),
|
||||||
|
/// translateX(x)
|
||||||
|
TranslateX(LengthOrPercentage),
|
||||||
|
/// translateY(y)
|
||||||
|
TranslateY(LengthOrPercentage),
|
||||||
|
/// translateZ(z)
|
||||||
|
TranslateZ(Length),
|
||||||
|
/// translate3d(x, y, z)
|
||||||
|
Translate3D(LengthOrPercentage, LengthOrPercentage, Length),
|
||||||
|
/// A 2D scaling factor.
|
||||||
|
///
|
||||||
|
/// `scale(2)` is parsed as `Scale(Number::new(2.0), None)` and is equivalent to
|
||||||
|
/// writing `scale(2, 2)` (`Scale(Number::new(2.0), Some(Number::new(2.0)))`).
|
||||||
|
///
|
||||||
|
/// Negative values are allowed and flip the element.
|
||||||
|
///
|
||||||
|
/// Syntax can be scale(factor) or scale(factor, factor)
|
||||||
|
Scale(Number, Option<Number>),
|
||||||
|
/// scaleX(factor)
|
||||||
|
ScaleX(Number),
|
||||||
|
/// scaleY(factor)
|
||||||
|
ScaleY(Number),
|
||||||
|
/// scaleZ(factor)
|
||||||
|
ScaleZ(Number),
|
||||||
|
/// scale3D(factorX, factorY, factorZ)
|
||||||
|
Scale3D(Number, Number, Number),
|
||||||
|
/// Describes a 2D Rotation.
|
||||||
|
///
|
||||||
|
/// In a 3D scene `rotate(angle)` is equivalent to `rotateZ(angle)`.
|
||||||
|
Rotate(Angle),
|
||||||
|
/// Rotation in 3D space around the x-axis.
|
||||||
|
RotateX(Angle),
|
||||||
|
/// Rotation in 3D space around the y-axis.
|
||||||
|
RotateY(Angle),
|
||||||
|
/// Rotation in 3D space around the z-axis.
|
||||||
|
RotateZ(Angle),
|
||||||
|
/// Rotation in 3D space.
|
||||||
|
///
|
||||||
|
/// Generalization of rotateX, rotateY and rotateZ.
|
||||||
|
Rotate3D(Number, Number, Number, Angle),
|
||||||
|
/// Specifies a perspective projection matrix.
|
||||||
|
///
|
||||||
|
/// Part of CSS Transform Module Level 2 and defined at
|
||||||
|
/// [§ 13.1. 3D Transform Function](https://drafts.csswg.org/css-transforms-2/#funcdef-perspective).
|
||||||
|
///
|
||||||
|
/// The value must be greater than or equal to zero.
|
||||||
|
Perspective(specified::Length),
|
||||||
|
/// A intermediate type for interpolation of mismatched transform lists.
|
||||||
|
#[allow(missing_docs)]
|
||||||
|
InterpolateMatrix { from_list: Transform<TransformOperation<Angle, Number, Length, LengthOrNumber, LengthOrPercentage, LoPoNumber>>,
|
||||||
|
to_list: Transform<TransformOperation<Angle, Number, Length, LengthOrNumber, LengthOrPercentage, LoPoNumber>>,
|
||||||
|
progress: computed::Percentage },
|
||||||
|
/// A intermediate type for accumulation of mismatched transform lists.
|
||||||
|
#[allow(missing_docs)]
|
||||||
|
AccumulateMatrix { from_list: Transform<TransformOperation<Angle, Number, Length, LengthOrNumber, LengthOrPercentage, LoPoNumber>>,
|
||||||
|
to_list: Transform<TransformOperation<Angle, Number, Length, LengthOrNumber, LengthOrPercentage, LoPoNumber>>,
|
||||||
|
count: specified::Integer },
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
|
#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
|
||||||
|
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
|
||||||
|
/// A value of the `transform` property
|
||||||
|
pub struct Transform<T>(Vec<T>);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue