mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 03:45:46 +00:00
servo: Merge #18609 - stylo: Animate font-size as NonNegativeLength (from Manishearth:fs-anim); r=emilio
Otherwise it doesn't clamp correctly and fails layout/style/test/test_transitions_per_property.html Source-Repo: https://github.com/servo/servo Source-Revision: 216f64e4e1033dd179d3657f300bfc9be58ed3f1 --HG-- extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear extra : subtree_revision : 7a418f57d09e6377f46966866a3a60e34e990237
This commit is contained in:
parent
c0cc6e5922
commit
310d8a38cb
@ -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;
|
||||
|
@ -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))]
|
||||
@ -74,3 +75,24 @@ impl ToCss for FontSize {
|
||||
self.size.to_css(dest)
|
||||
}
|
||||
}
|
||||
|
||||
/// XXXManishearth it might be better to
|
||||
/// animate this as computed, however this complicates
|
||||
/// clamping and might not be the right thing to do.
|
||||
/// We should figure it out.
|
||||
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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -791,6 +791,16 @@ impl NonNegativeLength {
|
||||
self.0.px()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
/// Ensures it is non negative
|
||||
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.
|
||||
|
Loading…
Reference in New Issue
Block a user