mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
Remove AnimatedProperty
This removes an extra layer of abstraction and allows Servo to share more code with Gecko. In addition, we will need to handle raw `AnimationValue` structs soon in order to fully implement "faster reversing of interrupted transitions."
This commit is contained in:
parent
bdfa6b0751
commit
0f1831e2fa
10 changed files with 101 additions and 362 deletions
|
@ -113,7 +113,7 @@ impl Animations {
|
||||||
transition.state = AnimationState::Finished;
|
transition.state = AnimationState::Finished;
|
||||||
update.add_event(
|
update.add_event(
|
||||||
transition.node,
|
transition.node,
|
||||||
transition.property_animation.property_name().into(),
|
transition.property_animation.property_id().name().into(),
|
||||||
TransitionOrAnimationEventType::TransitionEnd,
|
TransitionOrAnimationEventType::TransitionEnd,
|
||||||
transition.property_animation.duration,
|
transition.property_animation.duration,
|
||||||
);
|
);
|
||||||
|
@ -135,7 +135,7 @@ impl Animations {
|
||||||
// according to https://drafts.csswg.org/css-transitions/#event-transitionevent
|
// according to https://drafts.csswg.org/css-transitions/#event-transitionevent
|
||||||
update.add_event(
|
update.add_event(
|
||||||
transition.node,
|
transition.node,
|
||||||
transition.property_animation.property_name().into(),
|
transition.property_animation.property_id().name().into(),
|
||||||
TransitionOrAnimationEventType::TransitionCancel,
|
TransitionOrAnimationEventType::TransitionCancel,
|
||||||
(now - transition.start_time).max(0.),
|
(now - transition.start_time).max(0.),
|
||||||
);
|
);
|
||||||
|
@ -157,7 +157,7 @@ impl Animations {
|
||||||
// according to https://drafts.csswg.org/css-transitions/#event-transitionevent
|
// according to https://drafts.csswg.org/css-transitions/#event-transitionevent
|
||||||
update.add_event(
|
update.add_event(
|
||||||
transition.node,
|
transition.node,
|
||||||
transition.property_animation.property_name().into(),
|
transition.property_animation.property_id().name().into(),
|
||||||
TransitionOrAnimationEventType::TransitionRun,
|
TransitionOrAnimationEventType::TransitionRun,
|
||||||
0.,
|
0.,
|
||||||
);
|
);
|
||||||
|
|
|
@ -11,13 +11,14 @@ use crate::bezier::Bezier;
|
||||||
use crate::context::SharedStyleContext;
|
use crate::context::SharedStyleContext;
|
||||||
use crate::dom::{OpaqueNode, TElement, TNode};
|
use crate::dom::{OpaqueNode, TElement, TNode};
|
||||||
use crate::font_metrics::FontMetricsProvider;
|
use crate::font_metrics::FontMetricsProvider;
|
||||||
use crate::properties::animated_properties::AnimatedProperty;
|
use crate::properties::animated_properties::AnimationValue;
|
||||||
use crate::properties::longhands::animation_direction::computed_value::single_value::T as AnimationDirection;
|
use crate::properties::longhands::animation_direction::computed_value::single_value::T as AnimationDirection;
|
||||||
use crate::properties::longhands::animation_play_state::computed_value::single_value::T as AnimationPlayState;
|
use crate::properties::longhands::animation_play_state::computed_value::single_value::T as AnimationPlayState;
|
||||||
use crate::properties::LonghandIdSet;
|
use crate::properties::LonghandIdSet;
|
||||||
use crate::properties::{self, CascadeMode, ComputedValues, LonghandId};
|
use crate::properties::{self, CascadeMode, ComputedValues, LonghandId};
|
||||||
use crate::stylesheets::keyframes_rule::{KeyframesAnimation, KeyframesStep, KeyframesStepValue};
|
use crate::stylesheets::keyframes_rule::{KeyframesAnimation, KeyframesStep, KeyframesStepValue};
|
||||||
use crate::stylesheets::Origin;
|
use crate::stylesheets::Origin;
|
||||||
|
use crate::values::animated::{Animate, Procedure};
|
||||||
use crate::values::computed::Time;
|
use crate::values::computed::Time;
|
||||||
use crate::values::computed::TimingFunction;
|
use crate::values::computed::TimingFunction;
|
||||||
use crate::values::generics::box_::AnimationIterationCount;
|
use crate::values::generics::box_::AnimationIterationCount;
|
||||||
|
@ -29,8 +30,11 @@ use std::fmt;
|
||||||
/// Represents an animation for a given property.
|
/// Represents an animation for a given property.
|
||||||
#[derive(Clone, Debug, MallocSizeOf)]
|
#[derive(Clone, Debug, MallocSizeOf)]
|
||||||
pub struct PropertyAnimation {
|
pub struct PropertyAnimation {
|
||||||
/// An `AnimatedProperty` that this `PropertyAnimation` corresponds to.
|
/// The value we are animating from.
|
||||||
property: AnimatedProperty,
|
from: AnimationValue,
|
||||||
|
|
||||||
|
/// The value we are animating to.
|
||||||
|
to: AnimationValue,
|
||||||
|
|
||||||
/// The timing function of this `PropertyAnimation`.
|
/// The timing function of this `PropertyAnimation`.
|
||||||
timing_function: TimingFunction,
|
timing_function: TimingFunction,
|
||||||
|
@ -42,12 +46,8 @@ pub struct PropertyAnimation {
|
||||||
impl PropertyAnimation {
|
impl PropertyAnimation {
|
||||||
/// Returns the given property longhand id.
|
/// Returns the given property longhand id.
|
||||||
pub fn property_id(&self) -> LonghandId {
|
pub fn property_id(&self) -> LonghandId {
|
||||||
self.property.id()
|
debug_assert_eq!(self.from.id(), self.to.id());
|
||||||
}
|
self.from.id()
|
||||||
|
|
||||||
/// Returns the given property name.
|
|
||||||
pub fn property_name(&self) -> &'static str {
|
|
||||||
self.property.name()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn from_longhand(
|
fn from_longhand(
|
||||||
|
@ -57,30 +57,33 @@ impl PropertyAnimation {
|
||||||
old_style: &ComputedValues,
|
old_style: &ComputedValues,
|
||||||
new_style: &ComputedValues,
|
new_style: &ComputedValues,
|
||||||
) -> Option<PropertyAnimation> {
|
) -> Option<PropertyAnimation> {
|
||||||
let animated_property = AnimatedProperty::from_longhand(longhand, old_style, new_style)?;
|
// FIXME(emilio): Handle the case where old_style and new_style's writing mode differ.
|
||||||
|
let longhand = longhand.to_physical(new_style.writing_mode);
|
||||||
|
let from = AnimationValue::from_computed_values(longhand, old_style)?;
|
||||||
|
let to = AnimationValue::from_computed_values(longhand, new_style)?;
|
||||||
|
let duration = duration.seconds() as f64;
|
||||||
|
|
||||||
let property_animation = PropertyAnimation {
|
if from == to || duration == 0.0 {
|
||||||
property: animated_property,
|
return None;
|
||||||
timing_function,
|
|
||||||
duration: duration.seconds() as f64,
|
|
||||||
};
|
|
||||||
|
|
||||||
if property_animation.does_animate() {
|
|
||||||
Some(property_animation)
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Some(PropertyAnimation {
|
||||||
|
from,
|
||||||
|
to,
|
||||||
|
timing_function,
|
||||||
|
duration,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Update the given animation at a given point of progress.
|
/// The output of the timing function given the progress ration of this animation.
|
||||||
pub fn update(&self, style: &mut ComputedValues, time: f64) {
|
fn timing_function_output(&self, progress: f64) -> f64 {
|
||||||
let epsilon = 1. / (200. * self.duration);
|
let epsilon = 1. / (200. * self.duration);
|
||||||
let progress = match self.timing_function {
|
match self.timing_function {
|
||||||
GenericTimingFunction::CubicBezier { x1, y1, x2, y2 } => {
|
GenericTimingFunction::CubicBezier { x1, y1, x2, y2 } => {
|
||||||
Bezier::new(x1, y1, x2, y2).solve(time, epsilon)
|
Bezier::new(x1, y1, x2, y2).solve(progress, epsilon)
|
||||||
},
|
},
|
||||||
GenericTimingFunction::Steps(steps, pos) => {
|
GenericTimingFunction::Steps(steps, pos) => {
|
||||||
let mut current_step = (time * (steps as f64)).floor() as i32;
|
let mut current_step = (progress * (steps as f64)).floor() as i32;
|
||||||
|
|
||||||
if pos == StepPosition::Start ||
|
if pos == StepPosition::Start ||
|
||||||
pos == StepPosition::JumpStart ||
|
pos == StepPosition::JumpStart ||
|
||||||
|
@ -95,7 +98,7 @@ impl PropertyAnimation {
|
||||||
// (i.e. Treat before_flag is unset,)
|
// (i.e. Treat before_flag is unset,)
|
||||||
// https://drafts.csswg.org/css-easing/#step-timing-function-algo
|
// https://drafts.csswg.org/css-easing/#step-timing-function-algo
|
||||||
|
|
||||||
if time >= 0.0 && current_step < 0 {
|
if progress >= 0.0 && current_step < 0 {
|
||||||
current_step = 0;
|
current_step = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,7 +111,7 @@ impl PropertyAnimation {
|
||||||
StepPosition::End => steps,
|
StepPosition::End => steps,
|
||||||
};
|
};
|
||||||
|
|
||||||
if time <= 1.0 && current_step > jumps {
|
if progress <= 1.0 && current_step > jumps {
|
||||||
current_step = jumps;
|
current_step = jumps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,22 +119,19 @@ impl PropertyAnimation {
|
||||||
},
|
},
|
||||||
GenericTimingFunction::Keyword(keyword) => {
|
GenericTimingFunction::Keyword(keyword) => {
|
||||||
let (x1, x2, y1, y2) = keyword.to_bezier();
|
let (x1, x2, y1, y2) = keyword.to_bezier();
|
||||||
Bezier::new(x1, x2, y1, y2).solve(time, epsilon)
|
Bezier::new(x1, x2, y1, y2).solve(progress, epsilon)
|
||||||
},
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Update the given animation at a given point of progress.
|
||||||
|
fn update(&self, style: &mut ComputedValues, progress: f64) {
|
||||||
|
let procedure = Procedure::Interpolate {
|
||||||
|
progress: self.timing_function_output(progress),
|
||||||
};
|
};
|
||||||
|
if let Ok(new_value) = self.from.animate(&self.to, procedure) {
|
||||||
self.property.update(style, progress);
|
new_value.set_in_style_for_servo(style);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn does_animate(&self) -> bool {
|
|
||||||
self.property.does_animate() && self.duration != 0.0
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Whether this animation has the same end value as another one.
|
|
||||||
#[inline]
|
|
||||||
pub fn has_the_same_end_value_as(&self, other: &Self) -> bool {
|
|
||||||
self.property.has_the_same_end_value_as(&other.property)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -486,42 +486,23 @@ impl Animation {
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut new_style = (*style).clone();
|
let mut new_style = (*style).clone();
|
||||||
|
let mut update_style_for_longhand = |longhand| {
|
||||||
|
let from = AnimationValue::from_computed_values(longhand, &from_style)?;
|
||||||
|
let to = AnimationValue::from_computed_values(longhand, &target_style)?;
|
||||||
|
PropertyAnimation {
|
||||||
|
from,
|
||||||
|
to,
|
||||||
|
timing_function,
|
||||||
|
duration: relative_duration as f64,
|
||||||
|
}
|
||||||
|
.update(&mut new_style, relative_progress);
|
||||||
|
None::<()>
|
||||||
|
};
|
||||||
|
|
||||||
for property in self.keyframes_animation.properties_changed.iter() {
|
for property in self.keyframes_animation.properties_changed.iter() {
|
||||||
debug!(
|
update_style_for_longhand(property);
|
||||||
"Animation::update_style: scanning prop {:?} for animation \"{}\"",
|
|
||||||
property, self.name
|
|
||||||
);
|
|
||||||
let animation = PropertyAnimation::from_longhand(
|
|
||||||
property,
|
|
||||||
timing_function,
|
|
||||||
Time::from_seconds(relative_duration as f32),
|
|
||||||
&from_style,
|
|
||||||
&target_style,
|
|
||||||
);
|
|
||||||
|
|
||||||
match animation {
|
|
||||||
Some(property_animation) => {
|
|
||||||
debug!(
|
|
||||||
"Animation::update_style: got property animation for prop {:?}",
|
|
||||||
property
|
|
||||||
);
|
|
||||||
debug!("Animation::update_style: {:?}", property_animation);
|
|
||||||
property_animation.update(&mut new_style, relative_progress);
|
|
||||||
},
|
|
||||||
None => {
|
|
||||||
debug!(
|
|
||||||
"Animation::update_style: property animation {:?} not animating",
|
|
||||||
property
|
|
||||||
);
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
debug!(
|
|
||||||
"Animation::update_style: got style change in animation \"{}\"",
|
|
||||||
self.name
|
|
||||||
);
|
|
||||||
*style = new_style;
|
*style = new_style;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -573,12 +554,9 @@ impl Transition {
|
||||||
|
|
||||||
/// Whether this animation has the same end value as another one.
|
/// Whether this animation has the same end value as another one.
|
||||||
#[inline]
|
#[inline]
|
||||||
fn has_same_end_value(&self, other_animation: &PropertyAnimation) -> bool {
|
fn progress(&self, now: f64) -> f64 {
|
||||||
if self.state == AnimationState::Canceled {
|
let progress = (now - self.start_time) / (self.property_animation.duration);
|
||||||
return false;
|
progress.min(1.0)
|
||||||
}
|
|
||||||
self.property_animation
|
|
||||||
.has_the_same_end_value_as(other_animation)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Update a style to the value specified by this `Transition` given a `SharedStyleContext`.
|
/// Update a style to the value specified by this `Transition` given a `SharedStyleContext`.
|
||||||
|
@ -588,9 +566,7 @@ impl Transition {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let now = context.current_time_for_animations;
|
let progress = self.progress(context.current_time_for_animations);
|
||||||
let progress = (now - self.start_time) / (self.property_animation.duration);
|
|
||||||
let progress = progress.min(1.0);
|
|
||||||
if progress >= 0.0 {
|
if progress >= 0.0 {
|
||||||
self.property_animation.update(style, progress);
|
self.property_animation.update(style, progress);
|
||||||
}
|
}
|
||||||
|
@ -782,7 +758,8 @@ pub fn start_transitions_if_applicable(
|
||||||
) -> LonghandIdSet {
|
) -> LonghandIdSet {
|
||||||
// If the style of this element is display:none, then we don't start any transitions
|
// If the style of this element is display:none, then we don't start any transitions
|
||||||
// and we cancel any currently running transitions by returning an empty LonghandIdSet.
|
// and we cancel any currently running transitions by returning an empty LonghandIdSet.
|
||||||
if new_style.get_box().clone_display().is_none() {
|
let box_style = new_style.get_box();
|
||||||
|
if box_style.clone_display().is_none() {
|
||||||
return LonghandIdSet::new();
|
return LonghandIdSet::new();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -797,12 +774,8 @@ pub fn start_transitions_if_applicable(
|
||||||
|
|
||||||
let property_animation = match PropertyAnimation::from_longhand(
|
let property_animation = match PropertyAnimation::from_longhand(
|
||||||
transition.longhand_id,
|
transition.longhand_id,
|
||||||
new_style
|
box_style.transition_timing_function_mod(transition.index),
|
||||||
.get_box()
|
box_style.transition_duration_mod(transition.index),
|
||||||
.transition_timing_function_mod(transition.index),
|
|
||||||
new_style
|
|
||||||
.get_box()
|
|
||||||
.transition_duration_mod(transition.index),
|
|
||||||
old_style,
|
old_style,
|
||||||
new_style,
|
new_style,
|
||||||
) {
|
) {
|
||||||
|
@ -812,12 +785,13 @@ pub fn start_transitions_if_applicable(
|
||||||
|
|
||||||
// Per [1], don't trigger a new transition if the end state for that
|
// Per [1], don't trigger a new transition if the end state for that
|
||||||
// transition is the same as that of a transition that's running or
|
// transition is the same as that of a transition that's running or
|
||||||
// completed.
|
// completed. We don't take into account any canceled animations.
|
||||||
// [1]: https://drafts.csswg.org/css-transitions/#starting
|
// [1]: https://drafts.csswg.org/css-transitions/#starting
|
||||||
if animation_state
|
if animation_state
|
||||||
.transitions
|
.transitions
|
||||||
.iter()
|
.iter()
|
||||||
.any(|transition| transition.has_same_end_value(&property_animation))
|
.filter(|transition| transition.state != AnimationState::Canceled)
|
||||||
|
.any(|transition| transition.property_animation.to == property_animation.to)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,132 +57,6 @@ impl From<nsCSSPropertyID> for TransitionProperty {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An animated property interpolation between two computed values for that
|
|
||||||
/// property.
|
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
|
||||||
#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
|
|
||||||
pub enum AnimatedProperty {
|
|
||||||
% for prop in data.longhands:
|
|
||||||
% if prop.animatable and not prop.logical:
|
|
||||||
<%
|
|
||||||
value_type = "longhands::{}::computed_value::T".format(prop.ident)
|
|
||||||
if not prop.is_animatable_with_computed_value:
|
|
||||||
value_type = "<{} as ToAnimatedValue>::AnimatedValue".format(value_type)
|
|
||||||
%>
|
|
||||||
/// ${prop.name}
|
|
||||||
${prop.camel_case}(${value_type}, ${value_type}),
|
|
||||||
% endif
|
|
||||||
% endfor
|
|
||||||
}
|
|
||||||
|
|
||||||
impl AnimatedProperty {
|
|
||||||
/// Get the id of the property we're animating.
|
|
||||||
pub fn id(&self) -> LonghandId {
|
|
||||||
match *self {
|
|
||||||
% for prop in data.longhands:
|
|
||||||
% if prop.animatable and not prop.logical:
|
|
||||||
AnimatedProperty::${prop.camel_case}(..) => LonghandId::${prop.camel_case},
|
|
||||||
% endif
|
|
||||||
% endfor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Get the name of this property.
|
|
||||||
pub fn name(&self) -> &'static str {
|
|
||||||
self.id().name()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Whether this interpolation does animate, that is, whether the start and
|
|
||||||
/// end values are different.
|
|
||||||
pub fn does_animate(&self) -> bool {
|
|
||||||
match *self {
|
|
||||||
% for prop in data.longhands:
|
|
||||||
% if prop.animatable and not prop.logical:
|
|
||||||
AnimatedProperty::${prop.camel_case}(ref from, ref to) => from != to,
|
|
||||||
% endif
|
|
||||||
% endfor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Whether an animated property has the same end value as another.
|
|
||||||
pub fn has_the_same_end_value_as(&self, other: &Self) -> bool {
|
|
||||||
match (self, other) {
|
|
||||||
% for prop in data.longhands:
|
|
||||||
% if prop.animatable and not prop.logical:
|
|
||||||
(&AnimatedProperty::${prop.camel_case}(_, ref this_end_value),
|
|
||||||
&AnimatedProperty::${prop.camel_case}(_, ref other_end_value)) => {
|
|
||||||
this_end_value == other_end_value
|
|
||||||
}
|
|
||||||
% endif
|
|
||||||
% endfor
|
|
||||||
_ => false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Update `style` with the proper computed style corresponding to this
|
|
||||||
/// animation at `progress`.
|
|
||||||
#[cfg_attr(feature = "gecko", allow(unused))]
|
|
||||||
pub fn update(&self, style: &mut ComputedValues, progress: f64) {
|
|
||||||
#[cfg(feature = "servo")]
|
|
||||||
{
|
|
||||||
match *self {
|
|
||||||
% for prop in data.longhands:
|
|
||||||
% if prop.animatable and not prop.logical:
|
|
||||||
AnimatedProperty::${prop.camel_case}(ref from, ref to) => {
|
|
||||||
// https://drafts.csswg.org/web-animations/#discrete-animation-type
|
|
||||||
% if prop.animation_value_type == "discrete":
|
|
||||||
let value = if progress < 0.5 { from.clone() } else { to.clone() };
|
|
||||||
% else:
|
|
||||||
let value = match from.animate(to, Procedure::Interpolate { progress }) {
|
|
||||||
Ok(value) => value,
|
|
||||||
Err(()) => return,
|
|
||||||
};
|
|
||||||
% endif
|
|
||||||
% if not prop.is_animatable_with_computed_value:
|
|
||||||
let value: longhands::${prop.ident}::computed_value::T =
|
|
||||||
ToAnimatedValue::from_animated_value(value);
|
|
||||||
% endif
|
|
||||||
style.mutate_${prop.style_struct.name_lower}().set_${prop.ident}(value);
|
|
||||||
}
|
|
||||||
% endif
|
|
||||||
% endfor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Get an animatable value from a transition-property, an old style, and a
|
|
||||||
/// new style.
|
|
||||||
pub fn from_longhand(
|
|
||||||
property: LonghandId,
|
|
||||||
old_style: &ComputedValues,
|
|
||||||
new_style: &ComputedValues,
|
|
||||||
) -> Option<AnimatedProperty> {
|
|
||||||
// FIXME(emilio): Handle the case where old_style and new_style's
|
|
||||||
// writing mode differ.
|
|
||||||
let property = property.to_physical(new_style.writing_mode);
|
|
||||||
Some(match property {
|
|
||||||
% for prop in data.longhands:
|
|
||||||
% if prop.animatable and not prop.logical:
|
|
||||||
LonghandId::${prop.camel_case} => {
|
|
||||||
let old_computed = old_style.clone_${prop.ident}();
|
|
||||||
let new_computed = new_style.clone_${prop.ident}();
|
|
||||||
AnimatedProperty::${prop.camel_case}(
|
|
||||||
% if prop.is_animatable_with_computed_value:
|
|
||||||
old_computed,
|
|
||||||
new_computed,
|
|
||||||
% else:
|
|
||||||
old_computed.to_animated_value(),
|
|
||||||
new_computed.to_animated_value(),
|
|
||||||
% endif
|
|
||||||
)
|
|
||||||
}
|
|
||||||
% endif
|
|
||||||
% endfor
|
|
||||||
_ => return None,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A collection of AnimationValue that were composed on an element.
|
/// A collection of AnimationValue that were composed on an element.
|
||||||
/// This HashMap stores the values that are the last AnimationValue to be
|
/// This HashMap stores the values that are the last AnimationValue to be
|
||||||
/// composed for each TransitionProperty.
|
/// composed for each TransitionProperty.
|
||||||
|
@ -192,11 +66,6 @@ pub type AnimationValueMap = FxHashMap<LonghandId, AnimationValue>;
|
||||||
/// property in order to be interpolated with another one. When interpolating,
|
/// property in order to be interpolated with another one. When interpolating,
|
||||||
/// both values need to belong to the same property.
|
/// both values need to belong to the same property.
|
||||||
///
|
///
|
||||||
/// This is different to AnimatedProperty in the sense that AnimatedProperty
|
|
||||||
/// also knows the final value to be used during the animation.
|
|
||||||
///
|
|
||||||
/// This is to be used in Gecko integration code.
|
|
||||||
///
|
|
||||||
/// FIXME: We need to add a path for custom properties, but that's trivial after
|
/// FIXME: We need to add a path for custom properties, but that's trivial after
|
||||||
/// this (is a similar path to that of PropertyDeclaration).
|
/// this (is a similar path to that of PropertyDeclaration).
|
||||||
#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
|
#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
|
||||||
|
@ -546,6 +415,30 @@ impl AnimationValue {
|
||||||
_ => return None,
|
_ => return None,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Update `style` with the value of this `AnimationValue`.
|
||||||
|
///
|
||||||
|
/// SERVO ONLY: This doesn't properly handle things like updating 'em' units
|
||||||
|
/// when animated font-size.
|
||||||
|
pub fn set_in_style_for_servo(&self, style: &mut ComputedValues) {
|
||||||
|
match self {
|
||||||
|
% for prop in data.longhands:
|
||||||
|
% if prop.animatable and not prop.logical:
|
||||||
|
AnimationValue::${prop.camel_case}(ref value) => {
|
||||||
|
% if not prop.is_animatable_with_computed_value:
|
||||||
|
let value: longhands::${prop.ident}::computed_value::T =
|
||||||
|
ToAnimatedValue::from_animated_value(value.clone());
|
||||||
|
style.mutate_${prop.style_struct.name_lower}().set_${prop.ident}(value);
|
||||||
|
% else:
|
||||||
|
style.mutate_${prop.style_struct.name_lower}().set_${prop.ident}(value.clone());
|
||||||
|
% endif
|
||||||
|
}
|
||||||
|
% else:
|
||||||
|
AnimationValue::${prop.camel_case}(..) => unreachable!(),
|
||||||
|
% endif
|
||||||
|
% endfor
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn animate_discrete<T: Clone>(this: &T, other: &T, procedure: Procedure) -> Result<T, ()> {
|
fn animate_discrete<T: Clone>(this: &T, other: &T, procedure: Procedure) -> Result<T, ()> {
|
||||||
|
|
|
@ -47,9 +47,6 @@
|
||||||
[CSS Animations: property <line-height> from [14q\] to [normal\] at (0) should be [14q\]]
|
[CSS Animations: property <line-height> from [14q\] to [normal\] at (0) should be [14q\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <line-height> from [normal\] to [normal\] at (0.3) should be [normal\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <line-height> from [normal\] to [4\] at (0) should be [normal\]]
|
[CSS Animations: property <line-height> from [normal\] to [4\] at (0) should be [normal\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -134,9 +131,6 @@
|
||||||
[Web Animations: property <line-height> from [14q\] to [normal\] at (0) should be [14q\]]
|
[Web Animations: property <line-height> from [14q\] to [normal\] at (0) should be [14q\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <line-height> from [normal\] to [normal\] at (0) should be [normal\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <line-height> from [4\] to [14px\] at (0.5) should be [14px\]]
|
[Web Animations: property <line-height> from [4\] to [14px\] at (0.5) should be [14px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -224,9 +218,6 @@
|
||||||
[Web Animations: property <line-height> from [normal\] to [14px\] at (0) should be [normal\]]
|
[Web Animations: property <line-height> from [normal\] to [14px\] at (0) should be [normal\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <line-height> from [normal\] to [normal\] at (-0.3) should be [normal\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <line-height> from [4q\] to [14q\] at (-0.3) should be [1q\]]
|
[Web Animations: property <line-height> from [4q\] to [14q\] at (-0.3) should be [1q\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -323,9 +314,6 @@
|
||||||
[CSS Animations: property <line-height> from [14q\] to [normal\] at (0.3) should be [14q\]]
|
[CSS Animations: property <line-height> from [14q\] to [normal\] at (0.3) should be [14q\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <line-height> from [normal\] to [normal\] at (0.6) should be [normal\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <line-height> from [normal\] to [14px\] at (0.3) should be [normal\]]
|
[Web Animations: property <line-height> from [normal\] to [14px\] at (0.3) should be [normal\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -407,15 +395,9 @@
|
||||||
[Web Animations: property <line-height> from [inherit\] to [20px\] at (1.5) should be [15px\]]
|
[Web Animations: property <line-height> from [inherit\] to [20px\] at (1.5) should be [15px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <line-height> from [normal\] to [normal\] at (1) should be [normal\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <line-height> from [normal\] to [14px\] at (0.6) should be [14px\]]
|
[CSS Animations: property <line-height> from [normal\] to [14px\] at (0.6) should be [14px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <line-height> from [normal\] to [normal\] at (1.5) should be [normal\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <line-height> from [inherit\] to [20px\] at (0.3) should be [27px\]]
|
[Web Animations: property <line-height> from [inherit\] to [20px\] at (0.3) should be [27px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[mix-blend-mode-animation.html]
|
|
||||||
expected: TIMEOUT
|
|
|
@ -11,9 +11,6 @@
|
||||||
[CSS Animations: property <border-left-width> from [unset\] to [20px\] at (1.5) should be [28.5px\]]
|
[CSS Animations: property <border-left-width> from [unset\] to [20px\] at (1.5) should be [28.5px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <border-left-width> from [0px\] to [10px\] at (-0.3) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <border-left-width> from [unset\] to [20px\] at (0.3) should be [8.1px\]]
|
[Web Animations: property <border-left-width> from [unset\] to [20px\] at (0.3) should be [8.1px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -26,9 +23,6 @@
|
||||||
[CSS Animations: property <border-top-width> from [15px\] to [thick\] at (-2) should be [35px\]]
|
[CSS Animations: property <border-top-width> from [15px\] to [thick\] at (-2) should be [35px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <border-top-width> from [15px\] to [thick\] at (1.5) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <border-right-width> from [thin\] to [11px\] at (0.6) should be [7px\]]
|
[Web Animations: property <border-right-width> from [thin\] to [11px\] at (0.6) should be [7px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -41,15 +35,6 @@
|
||||||
[Web Animations: property <border-left-width> from neutral to [20px\] at (1) should be [20px\]]
|
[Web Animations: property <border-left-width> from neutral to [20px\] at (1) should be [20px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <border-bottom-width> from [thick\] to [15px\] at (-2) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <border-left-width> from [inherit\] to [20px\] at (0) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <border-left-width> from [medium\] to [13px\] at (-2) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <border-left-width> from [medium\] to [13px\] at (0.6) should be [9px\]]
|
[CSS Animations: property <border-left-width> from [medium\] to [13px\] at (0.6) should be [9px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -101,9 +86,6 @@
|
||||||
[CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px\] to [30px 50px 70px 90px\] at (1.5) should be [35px 55px 75px 95px\]]
|
[CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px\] to [30px 50px 70px 90px\] at (1.5) should be [35px 55px 75px 95px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <border-right-width> from [thin\] to [11px\] at (-0.3) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <border-width> from [20px 40px 60px 80px\] to [30px 50px 70px 90px\] at (1.5) should be [35px 55px 75px 95px\]]
|
[CSS Animations: property <border-width> from [20px 40px 60px 80px\] to [30px 50px 70px 90px\] at (1.5) should be [35px 55px 75px 95px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -146,9 +128,6 @@
|
||||||
[CSS Animations: property <border-right-width> from [thin\] to [11px\] at (1.5) should be [16px\]]
|
[CSS Animations: property <border-right-width> from [thin\] to [11px\] at (1.5) should be [16px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <border-left-width> from [initial\] to [20px\] at (-0.3) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <border-right-width> from [thin\] to [11px\] at (0.3) should be [4px\]]
|
[CSS Animations: property <border-right-width> from [thin\] to [11px\] at (0.3) should be [4px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -218,9 +197,6 @@
|
||||||
[CSS Animations: property <border-left-width> from [medium\] to [13px\] at (1.5) should be [18px\]]
|
[CSS Animations: property <border-left-width> from [medium\] to [13px\] at (1.5) should be [18px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <border-right-width> from [thin\] to [11px\] at (-2) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <border-bottom-width> from [thick\] to [15px\] at (1.5) should be [20px\]]
|
[Web Animations: property <border-bottom-width> from [thick\] to [15px\] at (1.5) should be [20px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -239,9 +215,6 @@
|
||||||
[CSS Animations: property <border-left-width> from [initial\] to [20px\] at (0) should be [3px\]]
|
[CSS Animations: property <border-left-width> from [initial\] to [20px\] at (0) should be [3px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <border-left-width> from [inherit\] to [20px\] at (-0.3) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <border-bottom-width> from [thick\] to [15px\] at (-0.3) should be [2px\]]
|
[Web Animations: property <border-bottom-width> from [thick\] to [15px\] at (-0.3) should be [2px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -347,9 +320,6 @@
|
||||||
[Web Animations: property <border-right-width> from [thin\] to [11px\] at (-0.3) should be [0px\]]
|
[Web Animations: property <border-right-width> from [thin\] to [11px\] at (-0.3) should be [0px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <border-left-width> from [0px\] to [10px\] at (0) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px\] to [30px 50px 70px 90px\] at (0) should be [20px 40px 60px 80px\]]
|
[CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px\] to [30px 50px 70px 90px\] at (0) should be [20px 40px 60px 80px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -383,9 +353,6 @@
|
||||||
[CSS Animations: property <border-top-width> from [15px\] to [thick\] at (1) should be [5px\]]
|
[CSS Animations: property <border-top-width> from [15px\] to [thick\] at (1) should be [5px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <border-left-width> from [unset\] to [20px\] at (-0.3) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <border-left-width> from neutral to [20px\] at (1.5) should be [25px\]]
|
[CSS Animations: property <border-left-width> from neutral to [20px\] at (1.5) should be [25px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -416,3 +383,6 @@
|
||||||
[Web Animations: property <border-left-width> from [0px\] to [10px\] at (1) should be [10px\]]
|
[Web Animations: property <border-left-width> from [0px\] to [10px\] at (1) should be [10px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <border-left-width> from [0px\] to [10px\] at (1) should be [10px\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -92,12 +92,6 @@
|
||||||
[Web Animations: property <rotate> from [1 -2.5 3.64 100deg\] to [1 -2.5 3.64 -100deg\] at (-1) should be [0.22 -0.55 0.8 300deg\]]
|
[Web Animations: property <rotate> from [1 -2.5 3.64 100deg\] to [1 -2.5 3.64 -100deg\] at (-1) should be [0.22 -0.55 0.8 300deg\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <rotate> from [none\] to [none\] at (0) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <rotate> from [none\] to [none\] at (2) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <rotate> from neutral to [30deg\] at (1) should be [30deg\]]
|
[Web Animations: property <rotate> from neutral to [30deg\] at (1) should be [30deg\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -146,12 +140,6 @@
|
||||||
[Web Animations: property <rotate> from [100deg\] to [180deg\] at (0) should be [100deg\]]
|
[Web Animations: property <rotate> from [100deg\] to [180deg\] at (0) should be [100deg\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <rotate> from [none\] to [none\] at (0.125) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <rotate> from [none\] to [none\] at (1) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <rotate> from [none\] to [7 -8 9 400grad\] at (-1) should be [0.5 -0.57 0.65 -400grad\]]
|
[Web Animations: property <rotate> from [none\] to [7 -8 9 400grad\] at (-1) should be [0.5 -0.57 0.65 -400grad\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -242,9 +230,6 @@
|
||||||
[Web Animations: property <rotate> from [1 0 0 0deg\] to [0 1 0 10deg\] at (0) should be [0 1 0 0deg\]]
|
[Web Animations: property <rotate> from [1 0 0 0deg\] to [0 1 0 10deg\] at (0) should be [0 1 0 0deg\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <rotate> from [none\] to [none\] at (0.875) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <rotate> from [unset\] to [30deg\] at (2) should be [60deg\]]
|
[Web Animations: property <rotate> from [unset\] to [30deg\] at (2) should be [60deg\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -353,9 +338,6 @@
|
||||||
[Web Animations: property <rotate> from [100deg\] to [180deg\] at (0.875) should be [170deg\]]
|
[Web Animations: property <rotate> from [100deg\] to [180deg\] at (0.875) should be [170deg\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <rotate> from [none\] to [none\] at (-1) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <rotate> from [100deg\] to [180deg\] at (1) should be [180deg\]]
|
[Web Animations: property <rotate> from [100deg\] to [180deg\] at (1) should be [180deg\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -119,9 +119,6 @@
|
||||||
[CSS Animations: property <scale> from [inherit\] to [2 0.5 1\] at (-1) should be [-1 1.5 3\]]
|
[CSS Animations: property <scale> from [inherit\] to [2 0.5 1\] at (-1) should be [-1 1.5 3\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <scale> from [none\] to [none\] at (0.875) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <scale> from [inherit\] to [2 0.5 1\] at (2) should be [3.5 0 0\]]
|
[Web Animations: property <scale> from [inherit\] to [2 0.5 1\] at (2) should be [3.5 0 0\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -149,9 +146,6 @@
|
||||||
[Web Animations: property <scale> from [26 17 9\] to [2 1\] at (0.875) should be [5 3 2\]]
|
[Web Animations: property <scale> from [26 17 9\] to [2 1\] at (0.875) should be [5 3 2\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <scale> from [none\] to [none\] at (-1) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <scale> from [none\] to [4 3 2\] at (1) should be [4 3 2\]]
|
[Web Animations: property <scale> from [none\] to [4 3 2\] at (1) should be [4 3 2\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -167,9 +161,6 @@
|
||||||
[Web Animations: property <scale> from [2 0.5 1\] to [inherit\] at (2) should be [-1 1.5 3\]]
|
[Web Animations: property <scale> from [2 0.5 1\] to [inherit\] at (2) should be [-1 1.5 3\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <scale> from [none\] to [none\] at (0.125) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <scale> from [1\] to [10 -5 0\] at (1) should be [10 -5 0\]]
|
[Web Animations: property <scale> from [1\] to [10 -5 0\] at (1) should be [10 -5 0\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -179,9 +170,6 @@
|
||||||
[Web Animations: property <scale> from [2 30 400\] to [10 110 1200\] at (-1) should be [-6 -50 -400\]]
|
[Web Animations: property <scale> from [2 30 400\] to [10 110 1200\] at (-1) should be [-6 -50 -400\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <scale> from [none\] to [none\] at (1) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <scale> from [26 17 9\] to [2 1\] at (0.125) should be [23 15 8\]]
|
[Web Animations: property <scale> from [26 17 9\] to [2 1\] at (0.125) should be [23 15 8\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -194,9 +182,6 @@
|
||||||
[Web Animations: property <scale> from [inherit\] to [2 0.5 1\] at (0) should be [0.5 1 2\]]
|
[Web Animations: property <scale> from [inherit\] to [2 0.5 1\] at (0) should be [0.5 1 2\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <scale> from [none\] to [none\] at (0) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <scale> from [none\] to [none\] at (1) should be [none\]]
|
[Web Animations: property <scale> from [none\] to [none\] at (1) should be [none\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -218,9 +203,6 @@
|
||||||
[Web Animations: property <scale> from [26 17 9\] to [2 1\] at (0) should be [26 17 9\]]
|
[Web Animations: property <scale> from [26 17 9\] to [2 1\] at (0) should be [26 17 9\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <scale> from [2 0.5 1\] to [inherit\] at (0) should be [2 0.5\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <scale> from [-10 5\] to [10 -5\] at (0.75) should be [5 -2.5\]]
|
[Web Animations: property <scale> from [-10 5\] to [10 -5\] at (0.75) should be [5 -2.5\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -341,9 +323,6 @@
|
||||||
[Web Animations: property <scale> from [inherit\] to [initial\] at (-1) should be [0 1 3\]]
|
[Web Animations: property <scale> from [inherit\] to [initial\] at (-1) should be [0 1 3\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <scale> from [none\] to [none\] at (2) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <scale> from [initial\] to [inherit\] at (0) should be [1\]]
|
[CSS Animations: property <scale> from [initial\] to [inherit\] at (0) should be [1\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -218,9 +218,6 @@
|
||||||
[Web Animations: property <translate> from [-100px -50px 100px\] to [0px\] at (-1) should be [-200px -100px 200px\]]
|
[Web Animations: property <translate> from [-100px -50px 100px\] to [0px\] at (-1) should be [-200px -100px 200px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <translate> from [200px 100px 200px\] to [inherit\] at (0) should be [200px 100px 200px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <translate> from [inherit\] to [200px 100px 200px\] at (1) should be [200px 100px 200px\]]
|
[Web Animations: property <translate> from [inherit\] to [200px 100px 200px\] at (1) should be [200px 100px 200px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -236,24 +233,15 @@
|
||||||
[Web Animations: property <translate> from neutral to [20px\] at (0.25) should be [12.5px\]]
|
[Web Animations: property <translate> from neutral to [20px\] at (0.25) should be [12.5px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <translate> from [none\] to [none\] at (0.125) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <translate> from [200px 100px 200px\] to [inherit\] at (0) should be [200px 100px 200px\]]
|
[Web Animations: property <translate> from [200px 100px 200px\] to [inherit\] at (0) should be [200px 100px 200px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Web Animations: property <translate> from [220px 240px 260px\] to [300px 400px 500px\] at (0) should be [220px 240px 260px\]]
|
[Web Animations: property <translate> from [220px 240px 260px\] to [300px 400px 500px\] at (0) should be [220px 240px 260px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <translate> from [none\] to [none\] at (0.875) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <translate> from neutral to [20px\] at (1) should be [20px\]]
|
[Web Animations: property <translate> from neutral to [20px\] at (1) should be [20px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <translate> from [none\] to [none\] at (-1) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <translate> from [200px 100px 400px\] to [initial\] at (0.75) should be [50px 25px 100px\]]
|
[Web Animations: property <translate> from [200px 100px 400px\] to [initial\] at (0.75) should be [50px 25px 100px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -440,18 +428,9 @@
|
||||||
[Web Animations: property <translate> from [220px 240px 260px\] to [300px 400px 500px\] at (1) should be [300px 400px 500px\]]
|
[Web Animations: property <translate> from [220px 240px 260px\] to [300px 400px 500px\] at (1) should be [300px 400px 500px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <translate> from [none\] to [none\] at (0) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <translate> from [none\] to [none\] at (2) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <translate> from neutral to [20px\] at (0.75) should be [17.5px\]]
|
[Web Animations: property <translate> from neutral to [20px\] at (0.75) should be [17.5px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <translate> from [none\] to [none\] at (1) should be [none\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <translate> from [initial\] to [inherit\] at (-1) should be [-100px -200px -300px\]]
|
[Web Animations: property <translate> from [initial\] to [inherit\] at (-1) should be [-100px -200px -300px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -149,12 +149,6 @@
|
||||||
[CSS Animations: property <outline-width> from [0px\] to [10px\] at (1.5) should be [15px\]]
|
[CSS Animations: property <outline-width> from [0px\] to [10px\] at (1.5) should be [15px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <outline-width> from [initial\] to [20px\] at (-0.3) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <outline-width> from [thick\] to [15px\] at (-2) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <outline-width> from [thick\] to [15px\] at (0) should be [5px\]]
|
[CSS Animations: property <outline-width> from [thick\] to [15px\] at (0) should be [5px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -191,9 +185,6 @@
|
||||||
[CSS Animations: property <outline-width> from [initial\] to [20px\] at (0.6) should be [13px\]]
|
[CSS Animations: property <outline-width> from [initial\] to [20px\] at (0.6) should be [13px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <outline-width> from [unset\] to [20px\] at (-0.3) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <outline-width> from [unset\] to [20px\] at (1.5) should be [28px\]]
|
[CSS Animations: property <outline-width> from [unset\] to [20px\] at (1.5) should be [28px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -206,9 +197,6 @@
|
||||||
[Web Animations: property <outline-width> from [inherit\] to [20px\] at (0) should be [30px\]]
|
[Web Animations: property <outline-width> from [inherit\] to [20px\] at (0) should be [30px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <outline-width> from [0px\] to [10px\] at (0) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <outline-width> from neutral to [20px\] at (0.6) should be [16px\]]
|
[CSS Animations: property <outline-width> from neutral to [20px\] at (0.6) should be [16px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -242,9 +230,6 @@
|
||||||
[CSS Transitions with transition: all: property <outline-width> from [unset\] to [20px\] at (1.5) should be [28px\]]
|
[CSS Transitions with transition: all: property <outline-width> from [unset\] to [20px\] at (1.5) should be [28px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <outline-width> from [0px\] to [10px\] at (-0.3) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <outline-width> from [initial\] to [20px\] at (0) should be [3px\]]
|
[CSS Animations: property <outline-width> from [initial\] to [20px\] at (0) should be [3px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -254,12 +239,6 @@
|
||||||
[CSS Transitions: property <outline-width> from [unset\] to [20px\] at (1.5) should be [28px\]]
|
[CSS Transitions: property <outline-width> from [unset\] to [20px\] at (1.5) should be [28px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <outline-width> from [unset\] to [23px\] at (0) should be [3px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[CSS Animations: property <outline-width> from [unset\] to [23px\] at (-0.3) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <outline-width> from [unset\] to [23px\] at (1.5) should be [33px\]]
|
[Web Animations: property <outline-width> from [unset\] to [23px\] at (1.5) should be [33px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -284,9 +263,6 @@
|
||||||
[CSS Animations: property <outline-width> from [initial\] to [23px\] at (1) should be [23px\]]
|
[CSS Animations: property <outline-width> from [initial\] to [23px\] at (1) should be [23px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[CSS Animations: property <outline-width> from [initial\] to [23px\] at (-0.3) should be [0px\]]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Web Animations: property <outline-width> from [unset\] to [23px\] at (-0.3) should be [0px\]]
|
[Web Animations: property <outline-width> from [unset\] to [23px\] at (-0.3) should be [0px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -326,3 +302,9 @@
|
||||||
[CSS Animations: property <outline-width> from [initial\] to [23px\] at (1.5) should be [33px\]]
|
[CSS Animations: property <outline-width> from [initial\] to [23px\] at (1.5) should be [33px\]]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <outline-width> from [unset\] to [23px\] at (0) should be [3px\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[CSS Animations: property <outline-width> from [0px\] to [10px\] at (1) should be [10px\]]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue