style: Use the same computed time representation between Servo and Gecko

Same as above.

Differential Revision: https://phabricator.services.mozilla.com/D167126
This commit is contained in:
Emilio Cobos Álvarez 2023-01-19 10:06:38 +00:00 committed by Martin Robinson
parent b96f8f748c
commit fe8cdbe328
3 changed files with 14 additions and 13 deletions

View file

@ -858,7 +858,7 @@ impl<'le> GeckoElement<'le> {
fn needs_transitions_update_per_property( fn needs_transitions_update_per_property(
&self, &self,
longhand_id: LonghandId, longhand_id: LonghandId,
combined_duration: f32, combined_duration_seconds: f32,
before_change_style: &ComputedValues, before_change_style: &ComputedValues,
after_change_style: &ComputedValues, after_change_style: &ComputedValues,
existing_transitions: &FxHashMap<LonghandId, Arc<AnimationValue>>, existing_transitions: &FxHashMap<LonghandId, Arc<AnimationValue>>,
@ -884,7 +884,7 @@ impl<'le> GeckoElement<'le> {
debug_assert_eq!(to.is_some(), from.is_some()); debug_assert_eq!(to.is_some(), from.is_some());
combined_duration > 0.0f32 && combined_duration_seconds > 0.0f32 &&
from != to && from != to &&
from.unwrap() from.unwrap()
.animate( .animate(
@ -1533,7 +1533,7 @@ impl<'le> TElement for GeckoElement<'le> {
transitions_to_keep.insert(physical_longhand); transitions_to_keep.insert(physical_longhand);
if self.needs_transitions_update_per_property( if self.needs_transitions_update_per_property(
physical_longhand, physical_longhand,
after_change_ui_style.transition_combined_duration_at(transition_property.index), after_change_ui_style.transition_combined_duration_at(transition_property.index).seconds(),
before_change_style, before_change_style,
after_change_style, after_change_style,
&existing_transitions, &existing_transitions,

View file

@ -39,8 +39,7 @@ use servo_arc::{Arc, RawOffsetArc, UniqueArc};
use std::mem::{forget, MaybeUninit}; use std::mem::{forget, MaybeUninit};
use std::{cmp, ops, ptr}; use std::{cmp, ops, ptr};
use crate::values::{self, CustomIdent, KeyframesName}; use crate::values::{self, CustomIdent, KeyframesName};
use crate::values::computed::{Percentage, TransitionProperty}; use crate::values::computed::{BorderStyle, Percentage, Time, TransitionProperty};
use crate::values::computed::BorderStyle;
use crate::values::computed::font::FontSize; use crate::values::computed::font::FontSize;
use crate::values::generics::column::ColumnCount; use crate::values::generics::column::ColumnCount;
@ -1038,14 +1037,13 @@ fn static_assert() {
self.gecko.m${type.capitalize()}${gecko_ffi_name}Count = input_len as u32; self.gecko.m${type.capitalize()}${gecko_ffi_name}Count = input_len as u32;
for (gecko, servo) in self.gecko.m${type.capitalize()}s.iter_mut().take(input_len as usize).zip(v) { for (gecko, servo) in self.gecko.m${type.capitalize()}s.iter_mut().take(input_len as usize).zip(v) {
gecko.m${gecko_ffi_name} = servo.seconds() * 1000.; gecko.m${gecko_ffi_name} = servo;
} }
} }
#[allow(non_snake_case)] #[allow(non_snake_case)]
pub fn ${type}_${ident}_at(&self, index: usize) pub fn ${type}_${ident}_at(&self, index: usize)
-> longhands::${type}_${ident}::computed_value::SingleComputedValue { -> longhands::${type}_${ident}::computed_value::SingleComputedValue {
use crate::values::computed::Time; self.gecko.m${type.capitalize()}s[index].m${gecko_ffi_name}
Time::from_seconds(self.gecko.m${type.capitalize()}s[index].m${gecko_ffi_name} / 1000.)
} }
${impl_animation_or_transition_count(type, ident, gecko_ffi_name)} ${impl_animation_or_transition_count(type, ident, gecko_ffi_name)}
${impl_copy_animation_or_transition_value(type, ident, gecko_ffi_name)} ${impl_copy_animation_or_transition_value(type, ident, gecko_ffi_name)}
@ -1772,10 +1770,12 @@ mask-mode mask-repeat mask-clip mask-origin mask-composite mask-position-x mask-
${impl_transition_time_value('duration', 'Duration')} ${impl_transition_time_value('duration', 'Duration')}
${impl_animation_or_transition_timing_function('transition')} ${impl_animation_or_transition_timing_function('transition')}
pub fn transition_combined_duration_at(&self, index: usize) -> f32 { pub fn transition_combined_duration_at(&self, index: usize) -> Time {
// https://drafts.csswg.org/css-transitions/#transition-combined-duration // https://drafts.csswg.org/css-transitions/#transition-combined-duration
self.gecko.mTransitions[index % self.gecko.mTransitionDurationCount as usize].mDuration.max(0.0) Time::from_seconds(
+ self.gecko.mTransitions[index % self.gecko.mTransitionDelayCount as usize].mDelay self.transition_duration_at(index).seconds().max(0.0) +
self.transition_delay_at(index).seconds()
)
} }
pub fn set_transition_property<I>(&mut self, v: I) pub fn set_transition_property<I>(&mut self, v: I)
@ -1818,7 +1818,7 @@ mask-mode mask-repeat mask-clip mask-origin mask-composite mask-position-x mask-
use crate::gecko_bindings::structs::nsCSSPropertyID::eCSSPropertyExtra_all_properties; use crate::gecko_bindings::structs::nsCSSPropertyID::eCSSPropertyExtra_all_properties;
if self.gecko.mTransitionPropertyCount == 1 && if self.gecko.mTransitionPropertyCount == 1 &&
self.gecko.mTransitions[0].mProperty == eCSSPropertyExtra_all_properties && self.gecko.mTransitions[0].mProperty == eCSSPropertyExtra_all_properties &&
self.transition_combined_duration_at(0) <= 0.0f32 { self.transition_combined_duration_at(0).seconds() <= 0.0f32 {
return false; return false;
} }

View file

@ -11,6 +11,7 @@ use style_traits::{CssWriter, ToCss};
/// A computed `<time>` value. /// A computed `<time>` value.
#[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, PartialOrd, ToResolvedValue)] #[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, PartialOrd, ToResolvedValue)]
#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] #[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
#[repr(C)]
pub struct Time { pub struct Time {
seconds: CSSFloat, seconds: CSSFloat,
} }
@ -18,7 +19,7 @@ pub struct Time {
impl Time { impl Time {
/// Creates a time value from a seconds amount. /// Creates a time value from a seconds amount.
pub fn from_seconds(seconds: CSSFloat) -> Self { pub fn from_seconds(seconds: CSSFloat) -> Self {
Time { seconds: seconds } Time { seconds }
} }
/// Returns `0s`. /// Returns `0s`.