Skip to content

Commit

Permalink
stylo: Animate font-size as NonNegativeLength
Browse files Browse the repository at this point in the history
  • Loading branch information
Manishearth committed Sep 23, 2017
1 parent 35aad08 commit ce7d82e
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 2 deletions.
2 changes: 1 addition & 1 deletion components/style/properties/longhand/font.mako.rs
Expand Up @@ -596,7 +596,7 @@ ${helpers.single_keyword_system("font-variant-caps",
}
</%helpers:longhand>

<%helpers:longhand name="font-size" animation_value_type="ComputedValue"
<%helpers:longhand name="font-size" animation_value_type="NonNegativeLength"
flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER"
allow_quirks="True" spec="https://drafts.csswg.org/css-fonts/#propdef-font-size">
use app_units::Au;
Expand Down
20 changes: 19 additions & 1 deletion components/style/values/computed/font.rs
Expand Up @@ -7,10 +7,11 @@
use app_units::Au;
use std::fmt;
use style_traits::ToCss;
use values::animated::ToAnimatedValue;
use values::computed::NonNegativeLength;
use values::specified::font as specified;

#[derive(Animate, ComputeSquaredDistance, ToAnimatedValue, ToAnimatedZero)]
#[derive(Animate, ComputeSquaredDistance, ToAnimatedZero)]
#[derive(Clone, Copy, Debug, PartialEq)]
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
Expand Down Expand Up @@ -74,3 +75,20 @@ impl ToCss for FontSize {
self.size.to_css(dest)
}
}

impl ToAnimatedValue for FontSize {
type AnimatedValue = NonNegativeLength;

#[inline]
fn to_animated_value(self) -> Self::AnimatedValue {
self.size
}

#[inline]
fn from_animated_value(animated: Self::AnimatedValue) -> Self {
FontSize {
size: animated.clamp(),
keyword_info: None,
}
}
}
10 changes: 10 additions & 0 deletions components/style/values/computed/length.rs
Expand Up @@ -791,6 +791,16 @@ impl NonNegativeLength {
self.0.px()
}

#[inline]
/// Ensures it is positive
pub fn clamp(self) -> Self {
if (self.0).0 < 0. {
Self::zero()
} else {
self
}
}

/// Scale this NonNegativeLength.
/// We scale NonNegativeLength by zero if the factor is negative because it doesn't
/// make sense to scale a negative factor on a non-negative length.
Expand Down

0 comments on commit ce7d82e

Please sign in to comment.