Change AnimatedValue for NonNegativeNumber to CSSFloat

This commit is contained in:
Anthony Ramine 2018-02-12 23:35:18 +01:00
parent da5acc81d2
commit f89ebf7fe9
5 changed files with 22 additions and 42 deletions

View file

@ -55,7 +55,6 @@ use values::distance::{ComputeSquaredDistance, SquaredDistance};
use values::generics::font::FontSettings as GenericFontSettings; use values::generics::font::FontSettings as GenericFontSettings;
use values::computed::font::FontVariationSettings; use values::computed::font::FontVariationSettings;
use values::generics::font::VariationValue; use values::generics::font::VariationValue;
use values::generics::NonNegative;
use values::generics::effects::Filter; use values::generics::effects::Filter;
use values::generics::position as generic_position; use values::generics::position as generic_position;
use values::generics::svg::{SVGLength, SvgLengthOrPercentageOrNumber, SVGPaint}; use values::generics::svg::{SVGLength, SvgLengthOrPercentageOrNumber, SVGPaint};
@ -789,7 +788,7 @@ impl ToAnimatedZero for AnimationValue {
impl RepeatableListAnimatable for LengthOrPercentage {} impl RepeatableListAnimatable for LengthOrPercentage {}
impl RepeatableListAnimatable for Either<f32, LengthOrPercentage> {} impl RepeatableListAnimatable for Either<f32, LengthOrPercentage> {}
impl RepeatableListAnimatable for Either<NonNegativeNumber, NonNegativeLengthOrPercentage> {} impl RepeatableListAnimatable for Either<NonNegativeNumber, NonNegativeLengthOrPercentage> {}
impl RepeatableListAnimatable for SvgLengthOrPercentageOrNumber<LengthOrPercentage, NonNegativeNumber> {} impl RepeatableListAnimatable for SvgLengthOrPercentageOrNumber<LengthOrPercentage, Number> {}
macro_rules! repeated_vec_impl { macro_rules! repeated_vec_impl {
($($ty:ty),*) => { ($($ty:ty),*) => {
@ -3012,12 +3011,8 @@ impl Animate for AnimatedFilter {
}, },
% endfor % endfor
% for func in ['Brightness', 'Contrast', 'Opacity', 'Saturate']: % for func in ['Brightness', 'Contrast', 'Opacity', 'Saturate']:
(&Filter::${func}(ref this), &Filter::${func}(ref other)) => { (&Filter::${func}(this), &Filter::${func}(other)) => {
Ok(Filter::${func}(NonNegative(animate_multiplicative_factor( Ok(Filter::${func}(animate_multiplicative_factor(this, other, procedure)?))
this.0,
other.0,
procedure,
)?)))
}, },
% endfor % endfor
% if product == "gecko": % if product == "gecko":
@ -3038,7 +3033,7 @@ impl ToAnimatedZero for AnimatedFilter {
Filter::${func}(ref this) => Ok(Filter::${func}(this.to_animated_zero()?)), Filter::${func}(ref this) => Ok(Filter::${func}(this.to_animated_zero()?)),
% endfor % endfor
% for func in ['Brightness', 'Contrast', 'Opacity', 'Saturate']: % for func in ['Brightness', 'Contrast', 'Opacity', 'Saturate']:
Filter::${func}(_) => Ok(Filter::${func}(NonNegative(1.))), Filter::${func}(_) => Ok(Filter::${func}(1.)),
% endfor % endfor
% if product == "gecko": % if product == "gecko":
Filter::DropShadow(ref this) => Ok(Filter::DropShadow(this.to_animated_zero()?)), Filter::DropShadow(ref this) => Ok(Filter::DropShadow(this.to_animated_zero()?)),

View file

@ -12,7 +12,7 @@ use std::cmp;
use values::Impossible; use values::Impossible;
use values::animated::{Animate, Procedure, ToAnimatedValue, ToAnimatedZero}; use values::animated::{Animate, Procedure, ToAnimatedValue, ToAnimatedZero};
use values::animated::color::RGBA; use values::animated::color::RGBA;
use values::computed::{Angle, NonNegativeNumber}; use values::computed::{Angle, Number};
use values::computed::length::{Length, NonNegativeLength}; use values::computed::length::{Length, NonNegativeLength};
use values::distance::{ComputeSquaredDistance, SquaredDistance}; use values::distance::{ComputeSquaredDistance, SquaredDistance};
use values::generics::effects::BoxShadow as GenericBoxShadow; use values::generics::effects::BoxShadow as GenericBoxShadow;
@ -42,11 +42,11 @@ pub struct FilterList(pub Vec<Filter>);
/// An animated value for a single `filter`. /// An animated value for a single `filter`.
#[cfg(feature = "gecko")] #[cfg(feature = "gecko")]
pub type Filter = GenericFilter<Angle, NonNegativeNumber, NonNegativeLength, SimpleShadow>; pub type Filter = GenericFilter<Angle, Number, NonNegativeLength, SimpleShadow>;
/// An animated value for a single `filter`. /// An animated value for a single `filter`.
#[cfg(not(feature = "gecko"))] #[cfg(not(feature = "gecko"))]
pub type Filter = GenericFilter<Angle, NonNegativeNumber, NonNegativeLength, Impossible>; pub type Filter = GenericFilter<Angle, Number, NonNegativeLength, Impossible>;
/// An animated value for the `drop-shadow()` filter. /// An animated value for the `drop-shadow()` filter.
pub type SimpleShadow = GenericSimpleShadow<Option<RGBA>, Length, NonNegativeLength>; pub type SimpleShadow = GenericSimpleShadow<Option<RGBA>, Length, NonNegativeLength>;
@ -155,25 +155,11 @@ impl ComputeSquaredDistance for BoxShadow {
impl ToAnimatedValue for ComputedFilterList { impl ToAnimatedValue for ComputedFilterList {
type AnimatedValue = FilterList; type AnimatedValue = FilterList;
#[cfg(not(feature = "gecko"))]
#[inline]
fn to_animated_value(self) -> Self::AnimatedValue {
FilterList(self.0)
}
#[cfg(feature = "gecko")]
#[inline] #[inline]
fn to_animated_value(self) -> Self::AnimatedValue { fn to_animated_value(self) -> Self::AnimatedValue {
FilterList(self.0.to_animated_value()) FilterList(self.0.to_animated_value())
} }
#[cfg(not(feature = "gecko"))]
#[inline]
fn from_animated_value(animated: Self::AnimatedValue) -> Self {
ComputedFilterList(animated.0)
}
#[cfg(feature = "gecko")]
#[inline] #[inline]
fn from_animated_value(animated: Self::AnimatedValue) -> Self { fn from_animated_value(animated: Self::AnimatedValue) -> Self {
ComputedFilterList(ToAnimatedValue::from_animated_value(animated.0)) ComputedFilterList(ToAnimatedValue::from_animated_value(animated.0))

View file

@ -19,7 +19,6 @@ use values::computed::GreaterThanOrEqualToOneNumber as ComputedGreaterThanOrEqua
use values::computed::MaxLength as ComputedMaxLength; use values::computed::MaxLength as ComputedMaxLength;
use values::computed::MozLength as ComputedMozLength; use values::computed::MozLength as ComputedMozLength;
use values::computed::NonNegativeLength as ComputedNonNegativeLength; use values::computed::NonNegativeLength as ComputedNonNegativeLength;
use values::computed::NonNegativeNumber as ComputedNonNegativeNumber;
use values::specified::url::SpecifiedUrl; use values::specified::url::SpecifiedUrl;
pub mod color; pub mod color;
@ -263,20 +262,6 @@ trivial_to_animated_value!(ComputedUrl);
trivial_to_animated_value!(bool); trivial_to_animated_value!(bool);
trivial_to_animated_value!(f32); trivial_to_animated_value!(f32);
impl ToAnimatedValue for ComputedNonNegativeNumber {
type AnimatedValue = Self;
#[inline]
fn to_animated_value(self) -> Self {
self
}
#[inline]
fn from_animated_value(animated: Self::AnimatedValue) -> Self {
animated.0.max(0.).into()
}
}
impl ToAnimatedValue for ComputedGreaterThanOrEqualToOneNumber { impl ToAnimatedValue for ComputedGreaterThanOrEqualToOneNumber {
type AnimatedValue = Self; type AnimatedValue = Self;

View file

@ -429,6 +429,20 @@ pub type Number = CSSFloat;
/// A wrapper of Number, but the value >= 0. /// A wrapper of Number, but the value >= 0.
pub type NonNegativeNumber = NonNegative<CSSFloat>; pub type NonNegativeNumber = NonNegative<CSSFloat>;
impl ToAnimatedValue for NonNegativeNumber {
type AnimatedValue = CSSFloat;
#[inline]
fn to_animated_value(self) -> Self::AnimatedValue {
self.0
}
#[inline]
fn from_animated_value(animated: Self::AnimatedValue) -> Self {
animated.max(0.).into()
}
}
impl From<CSSFloat> for NonNegativeNumber { impl From<CSSFloat> for NonNegativeNumber {
#[inline] #[inline]
fn from(number: CSSFloat) -> NonNegativeNumber { fn from(number: CSSFloat) -> NonNegativeNumber {

View file

@ -64,7 +64,7 @@ where
/// Convenience void type to disable some properties and values through types. /// Convenience void type to disable some properties and values through types.
#[cfg_attr(feature = "servo", derive(Deserialize, MallocSizeOf, Serialize))] #[cfg_attr(feature = "servo", derive(Deserialize, MallocSizeOf, Serialize))]
#[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)] #[derive(Clone, Copy, Debug, PartialEq, ToAnimatedValue, ToComputedValue, ToCss)]
pub enum Impossible {} pub enum Impossible {}
// FIXME(nox): This should be derived but the derive code cannot cope // FIXME(nox): This should be derived but the derive code cannot cope