mirror of
https://github.com/servo/servo.git
synced 2025-08-06 22:15:33 +01:00
Add more operations to animation
This commit is contained in:
parent
e15695289d
commit
aba00be52d
3 changed files with 197 additions and 6 deletions
|
@ -139,6 +139,42 @@ impl From<Matrix> for Transform3D<CSSFloat> {
|
|||
}
|
||||
}
|
||||
|
||||
impl TransformOperation {
|
||||
/// Convert to a Translate3D.
|
||||
///
|
||||
/// Must be called on a Translate function
|
||||
pub fn to_translate_3d(&self) -> Self {
|
||||
match *self {
|
||||
GenericTransformOperation::Translate3D(..) => self.clone(),
|
||||
GenericTransformOperation::TranslateX(ref x) |
|
||||
GenericTransformOperation::Translate(ref x, None) =>
|
||||
GenericTransformOperation::Translate3D(x.clone(), LengthOrPercentage::zero(), Length::zero()),
|
||||
GenericTransformOperation::Translate(ref x, Some(ref y)) =>
|
||||
GenericTransformOperation::Translate3D(x.clone(), y.clone(), Length::zero()),
|
||||
GenericTransformOperation::TranslateY(ref y) =>
|
||||
GenericTransformOperation::Translate3D(LengthOrPercentage::zero(), y.clone(), Length::zero()),
|
||||
GenericTransformOperation::TranslateZ(ref z) =>
|
||||
GenericTransformOperation::Translate3D(LengthOrPercentage::zero(),
|
||||
LengthOrPercentage::zero(), z.clone()),
|
||||
_ => unreachable!()
|
||||
}
|
||||
}
|
||||
/// Convert to a Scale3D.
|
||||
///
|
||||
/// Must be called on a Scale function
|
||||
pub fn to_scale_3d(&self) -> Self {
|
||||
match *self {
|
||||
GenericTransformOperation::Scale3D(..) => self.clone(),
|
||||
GenericTransformOperation::Scale(s, None) => GenericTransformOperation::Scale3D(s, s, 1.),
|
||||
GenericTransformOperation::Scale(x, Some(y)) => GenericTransformOperation::Scale3D(x, y, 1.),
|
||||
GenericTransformOperation::ScaleX(x) => GenericTransformOperation::Scale3D(x, 1., 1.),
|
||||
GenericTransformOperation::ScaleY(y) => GenericTransformOperation::Scale3D(1., y, 1.),
|
||||
GenericTransformOperation::ScaleZ(z) => GenericTransformOperation::Scale3D(1., 1., z),
|
||||
_ => unreachable!()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Build an equivalent 'identity transform function list' based
|
||||
/// on an existing transform list.
|
||||
/// http://dev.w3.org/csswg/css-transforms/#none-transform-animation
|
||||
|
|
|
@ -247,6 +247,27 @@ pub enum TransformOperation<Angle, Number, Length, Integer, LengthOrNumber, Leng
|
|||
/// A value of the `transform` property
|
||||
pub struct Transform<T>(pub Vec<T>);
|
||||
|
||||
impl<Angle, Number, Length, Integer, LengthOrNumber, LengthOrPercentage, LoPoNumber>
|
||||
TransformOperation<Angle, Number, Length, Integer, LengthOrNumber, LengthOrPercentage, LoPoNumber> {
|
||||
|
||||
/// Check if it is any translate function
|
||||
pub fn is_translate(&self) -> bool {
|
||||
use self::TransformOperation::*;
|
||||
match *self {
|
||||
Translate(..) | Translate3D(..) | TranslateX(..) | TranslateY(..) | TranslateZ(..) => true,
|
||||
_ => false
|
||||
}
|
||||
}
|
||||
|
||||
/// Check if it is any scale function
|
||||
pub fn is_scale(&self) -> bool {
|
||||
use self::TransformOperation::*;
|
||||
match *self {
|
||||
Scale(..) | Scale3D(..) | ScaleX(..) | ScaleY(..) | ScaleZ(..) => true,
|
||||
_ => false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<Angle: ToCss + Copy, Number: ToCss + Copy, Length: ToCss,
|
||||
Integer: ToCss + Copy, LengthOrNumber: ToCss, LengthOrPercentage: ToCss, LoPoNumber: ToCss>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue