diff options
-rw-r--r-- | components/style/gecko/generated/bindings.rs | 7 | ||||
-rw-r--r-- | components/style/gecko/generated/structs_debug.rs | 219 | ||||
-rw-r--r-- | components/style/gecko/generated/structs_release.rs | 218 | ||||
-rw-r--r-- | ports/geckolib/glue.rs | 50 |
4 files changed, 407 insertions, 87 deletions
diff --git a/components/style/gecko/generated/bindings.rs b/components/style/gecko/generated/bindings.rs index 5f0f0d19a78..6a5dca5eab2 100644 --- a/components/style/gecko/generated/bindings.rs +++ b/components/style/gecko/generated/bindings.rs @@ -36,6 +36,7 @@ use gecko_bindings::structs::FontFamilyList; use gecko_bindings::structs::FontFamilyType; use gecko_bindings::structs::FontSizePrefs; use gecko_bindings::structs::GeckoFontMetrics; +use gecko_bindings::structs::IterationCompositeOperation; use gecko_bindings::structs::Keyframe; use gecko_bindings::structs::ServoBundledURI; use gecko_bindings::structs::ServoElementSnapshot; @@ -2261,8 +2262,12 @@ extern "C" { property: nsCSSPropertyID, animation_segment: RawGeckoAnimationPropertySegmentBorrowed, + last_segment: + RawGeckoAnimationPropertySegmentBorrowed, computed_timing: - RawGeckoComputedTimingBorrowed); + RawGeckoComputedTimingBorrowed, + iteration_composite: + IterationCompositeOperation); } extern "C" { pub fn Servo_DeclarationBlock_PropertyIsSet(declarations: diff --git a/components/style/gecko/generated/structs_debug.rs b/components/style/gecko/generated/structs_debug.rs index ec26ee42374..8de6cba9c00 100644 --- a/components/style/gecko/generated/structs_debug.rs +++ b/components/style/gecko/generated/structs_debug.rs @@ -3340,6 +3340,13 @@ pub mod root { } #[repr(C)] #[derive(Debug, Copy, Clone)] + pub struct NonNull<T> { + pub ptr: *mut T, + pub inited: bool, + pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>, + } + #[repr(C)] + #[derive(Debug, Copy, Clone)] pub struct Sequence { } #[repr(C)] @@ -5058,6 +5065,93 @@ pub mod root { } #[repr(C)] #[derive(Debug, Copy, Clone)] + pub struct CSSPseudoElement { + _unused: [u8; 0], + } + #[repr(u8)] + #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] + pub enum IterationCompositeOperation { + Replace = 0, + Accumulate = 1, + EndGuard_ = 2, + } + #[repr(C)] + #[derive(Debug)] + pub struct ElementOrCSSPseudoElement { + pub mType: root::mozilla::dom::ElementOrCSSPseudoElement_Type, + pub mValue: root::mozilla::dom::ElementOrCSSPseudoElement_Value, + } + #[repr(u32)] + #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] + pub enum ElementOrCSSPseudoElement_Type { + eUninitialized = 0, + eElement = 1, + eCSSPseudoElement = 2, + } + #[repr(C)] + #[derive(Debug, Copy)] + pub struct ElementOrCSSPseudoElement_Value { + pub mElement: root::__BindgenUnionField<root::mozilla::dom::UnionMember>, + pub mCSSPseudoElement: root::__BindgenUnionField<root::mozilla::dom::UnionMember>, + pub bindgen_union_field: [u64; 2usize], + } + #[test] + fn bindgen_test_layout_ElementOrCSSPseudoElement_Value() { + assert_eq!(::std::mem::size_of::<ElementOrCSSPseudoElement_Value>() + , 16usize , concat ! ( + "Size of: " , stringify ! ( + ElementOrCSSPseudoElement_Value ) )); + assert_eq! (::std::mem::align_of::<ElementOrCSSPseudoElement_Value>() + , 8usize , concat ! ( + "Alignment of " , stringify ! ( + ElementOrCSSPseudoElement_Value ) )); + assert_eq! (unsafe { + & ( + * ( 0 as * const ElementOrCSSPseudoElement_Value ) + ) . mElement as * const _ as usize } , 0usize , + concat ! ( + "Alignment of field: " , stringify ! ( + ElementOrCSSPseudoElement_Value ) , "::" , + stringify ! ( mElement ) )); + assert_eq! (unsafe { + & ( + * ( 0 as * const ElementOrCSSPseudoElement_Value ) + ) . mCSSPseudoElement as * const _ as usize } , + 0usize , concat ! ( + "Alignment of field: " , stringify ! ( + ElementOrCSSPseudoElement_Value ) , "::" , + stringify ! ( mCSSPseudoElement ) )); + } + impl Clone for ElementOrCSSPseudoElement_Value { + fn clone(&self) -> Self { *self } + } + #[test] + fn bindgen_test_layout_ElementOrCSSPseudoElement() { + assert_eq!(::std::mem::size_of::<ElementOrCSSPseudoElement>() + , 24usize , concat ! ( + "Size of: " , stringify ! ( + ElementOrCSSPseudoElement ) )); + assert_eq! (::std::mem::align_of::<ElementOrCSSPseudoElement>() + , 8usize , concat ! ( + "Alignment of " , stringify ! ( + ElementOrCSSPseudoElement ) )); + assert_eq! (unsafe { + & ( * ( 0 as * const ElementOrCSSPseudoElement ) ) + . mType as * const _ as usize } , 0usize , concat + ! ( + "Alignment of field: " , stringify ! ( + ElementOrCSSPseudoElement ) , "::" , stringify ! ( + mType ) )); + assert_eq! (unsafe { + & ( * ( 0 as * const ElementOrCSSPseudoElement ) ) + . mValue as * const _ as usize } , 8usize , concat + ! ( + "Alignment of field: " , stringify ! ( + ElementOrCSSPseudoElement ) , "::" , stringify ! ( + mValue ) )); + } + #[repr(C)] + #[derive(Debug, Copy, Clone)] pub struct CustomElementData { _unused: [u8; 0], } @@ -5681,11 +5775,6 @@ pub mod root { } #[repr(C)] #[derive(Debug, Copy, Clone)] - pub struct ElementOrCSSPseudoElement { - _unused: [u8; 0], - } - #[repr(C)] - #[derive(Debug, Copy, Clone)] pub struct UnrestrictedDoubleOrKeyframeAnimationOptions { _unused: [u8; 0], } @@ -34242,7 +34331,7 @@ pub mod root { root::nsCharTraits ) )); } #[test] - fn __bindgen_test_layout__bindgen_ty_id_210525_instantiation_99() { + fn __bindgen_test_layout__bindgen_ty_id_211408_instantiation_99() { assert_eq!(::std::mem::size_of::<u8>() , 1usize , concat ! ( "Size of template specialization: " , stringify ! ( u8 ) )); @@ -34251,7 +34340,7 @@ pub mod root { ) )); } #[test] - fn __bindgen_test_layout__bindgen_ty_id_210561_instantiation_100() { + fn __bindgen_test_layout__bindgen_ty_id_211444_instantiation_100() { assert_eq!(::std::mem::size_of::<u8>() , 1usize , concat ! ( "Size of template specialization: " , stringify ! ( u8 ) )); @@ -36815,7 +36904,55 @@ pub mod root { root::mozilla::UniquePtr<root::nsCSSValuePairList> ) )); } #[test] - fn __bindgen_test_layout_Maybe_instantiation_332() { + fn __bindgen_test_layout_NonNull_instantiation_332() { + assert_eq!(::std::mem::size_of::<root::mozilla::dom::NonNull<root::mozilla::dom::Element>>() + , 16usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::dom::NonNull<root::mozilla::dom::Element> ) + )); + assert_eq!(::std::mem::align_of::<root::mozilla::dom::NonNull<root::mozilla::dom::Element>>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::dom::NonNull<root::mozilla::dom::Element> ) + )); + } + #[test] + fn __bindgen_test_layout_NonNull_instantiation_333() { + assert_eq!(::std::mem::size_of::<root::mozilla::dom::NonNull<root::mozilla::dom::CSSPseudoElement>>() + , 16usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::dom::NonNull<root::mozilla::dom::CSSPseudoElement> + ) )); + assert_eq!(::std::mem::align_of::<root::mozilla::dom::NonNull<root::mozilla::dom::CSSPseudoElement>>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::dom::NonNull<root::mozilla::dom::CSSPseudoElement> + ) )); + } + #[test] + fn __bindgen_test_layout_Handle_instantiation_334() { + assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>() + , 8usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::JS::Handle<*mut root::JSObject> ) )); + assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::JS::Handle<*mut root::JSObject> ) )); + } + #[test] + fn __bindgen_test_layout_MutableHandle_instantiation_335() { + assert_eq!(::std::mem::size_of::<root::JS::MutableHandle<root::JS::Value>>() + , 8usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::JS::MutableHandle<root::JS::Value> ) )); + assert_eq!(::std::mem::align_of::<root::JS::MutableHandle<root::JS::Value>>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::JS::MutableHandle<root::JS::Value> ) )); + } + #[test] + fn __bindgen_test_layout_Maybe_instantiation_336() { assert_eq!(::std::mem::size_of::<[u64; 18usize]>() , 144usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36826,7 +36963,7 @@ pub mod root { [u64; 18usize] ) )); } #[test] - fn __bindgen_test_layout_Maybe_instantiation_333() { + fn __bindgen_test_layout_Maybe_instantiation_337() { assert_eq!(::std::mem::size_of::<[u64; 18usize]>() , 144usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36837,7 +36974,7 @@ pub mod root { [u64; 18usize] ) )); } #[test] - fn __bindgen_test_layout_BaseTimeDuration_instantiation_334() { + fn __bindgen_test_layout_BaseTimeDuration_instantiation_338() { assert_eq!(::std::mem::size_of::<root::mozilla::BaseTimeDuration>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36848,7 +36985,7 @@ pub mod root { root::mozilla::BaseTimeDuration ) )); } #[test] - fn __bindgen_test_layout_already_AddRefed_instantiation_335() { + fn __bindgen_test_layout_already_AddRefed_instantiation_339() { assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36859,7 +36996,7 @@ pub mod root { root::already_AddRefed<root::mozilla::dom::NodeInfo> ) )); } #[test] - fn __bindgen_test_layout_already_AddRefed_instantiation_336() { + fn __bindgen_test_layout_already_AddRefed_instantiation_340() { assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36870,7 +37007,7 @@ pub mod root { root::already_AddRefed<root::mozilla::dom::NodeInfo> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_instantiation_337() { + fn __bindgen_test_layout_nsTArray_instantiation_341() { assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::nsIContent>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36881,7 +37018,7 @@ pub mod root { root::nsTArray<*mut root::nsIContent> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_instantiation_338() { + fn __bindgen_test_layout_nsTArray_instantiation_342() { assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::nsIContent>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36892,7 +37029,7 @@ pub mod root { root::nsTArray<*mut root::nsIContent> ) )); } #[test] - fn __bindgen_test_layout_nsCOMPtr_instantiation_339() { + fn __bindgen_test_layout_nsCOMPtr_instantiation_343() { assert_eq!(::std::mem::size_of::<root::nsCOMPtr<root::nsIContent>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36903,7 +37040,7 @@ pub mod root { root::nsCOMPtr<root::nsIContent> ) )); } #[test] - fn __bindgen_test_layout_nsRefPtrHashKey_instantiation_340() { + fn __bindgen_test_layout_nsRefPtrHashKey_instantiation_344() { assert_eq!(::std::mem::size_of::<root::nsRefPtrHashKey<root::mozilla::dom::DOMIntersectionObserver>>() , 16usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36916,7 +37053,7 @@ pub mod root { ) )); } #[test] - fn __bindgen_test_layout_already_AddRefed_instantiation_341() { + fn __bindgen_test_layout_already_AddRefed_instantiation_345() { assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36927,7 +37064,7 @@ pub mod root { root::already_AddRefed<root::mozilla::dom::NodeInfo> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_instantiation_342() { + fn __bindgen_test_layout_nsTArray_instantiation_346() { assert_eq!(::std::mem::size_of::<root::nsTArray<root::mozilla::DisplayItemClip_RoundedRect>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36940,7 +37077,7 @@ pub mod root { ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_343() { + fn __bindgen_test_layout_Handle_instantiation_347() { assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36951,7 +37088,7 @@ pub mod root { root::JS::Handle<*mut root::JSObject> ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_344() { + fn __bindgen_test_layout_Handle_instantiation_348() { assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36962,7 +37099,7 @@ pub mod root { root::JS::Handle<*mut root::JSObject> ) )); } #[test] - fn __bindgen_test_layout_RefPtr_instantiation_345() { + fn __bindgen_test_layout_RefPtr_instantiation_349() { assert_eq!(::std::mem::size_of::<root::RefPtr<root::mozilla::dom::DOMRect>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36973,7 +37110,7 @@ pub mod root { root::RefPtr<root::mozilla::dom::DOMRect> ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_346() { + fn __bindgen_test_layout_Handle_instantiation_350() { assert_eq!(::std::mem::size_of::<root::JS::Handle<root::JS::Value>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36984,7 +37121,7 @@ pub mod root { root::JS::Handle<root::JS::Value> ) )); } #[test] - fn __bindgen_test_layout_MutableHandle_instantiation_347() { + fn __bindgen_test_layout_MutableHandle_instantiation_351() { assert_eq!(::std::mem::size_of::<root::JS::MutableHandle<root::JS::Value>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36995,7 +37132,7 @@ pub mod root { root::JS::MutableHandle<root::JS::Value> ) )); } #[test] - fn __bindgen_test_layout_Sequence_instantiation_348() { + fn __bindgen_test_layout_Sequence_instantiation_352() { assert_eq!(::std::mem::size_of::<u64>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( u64 ) )); @@ -37004,7 +37141,7 @@ pub mod root { u64 ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_349() { + fn __bindgen_test_layout_Handle_instantiation_353() { assert_eq!(::std::mem::size_of::<root::JS::Handle<root::JS::Value>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37015,7 +37152,7 @@ pub mod root { root::JS::Handle<root::JS::Value> ) )); } #[test] - fn __bindgen_test_layout_Sequence_instantiation_350() { + fn __bindgen_test_layout_Sequence_instantiation_354() { assert_eq!(::std::mem::size_of::<u64>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( u64 ) )); @@ -37024,7 +37161,7 @@ pub mod root { u64 ) )); } #[test] - fn __bindgen_test_layout_Sequence_instantiation_351() { + fn __bindgen_test_layout_Sequence_instantiation_355() { assert_eq!(::std::mem::size_of::<u64>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( u64 ) )); @@ -37033,7 +37170,7 @@ pub mod root { u64 ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_352() { + fn __bindgen_test_layout_Handle_instantiation_356() { assert_eq!(::std::mem::size_of::<root::JS::Handle<root::JS::Value>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37044,7 +37181,7 @@ pub mod root { root::JS::Handle<root::JS::Value> ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_353() { + fn __bindgen_test_layout_Handle_instantiation_357() { assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37055,7 +37192,7 @@ pub mod root { root::JS::Handle<*mut root::JSObject> ) )); } #[test] - fn __bindgen_test_layout_MutableHandle_instantiation_354() { + fn __bindgen_test_layout_MutableHandle_instantiation_358() { assert_eq!(::std::mem::size_of::<root::JS::MutableHandle<root::JS::Value>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37066,7 +37203,7 @@ pub mod root { root::JS::MutableHandle<root::JS::Value> ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_355() { + fn __bindgen_test_layout_Handle_instantiation_359() { assert_eq!(::std::mem::size_of::<root::JS::Handle<root::JS::Value>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37077,7 +37214,7 @@ pub mod root { root::JS::Handle<root::JS::Value> ) )); } #[test] - fn __bindgen_test_layout_MutableHandle_instantiation_356() { + fn __bindgen_test_layout_MutableHandle_instantiation_360() { assert_eq!(::std::mem::size_of::<root::JS::MutableHandle<root::JS::Value>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37088,7 +37225,7 @@ pub mod root { root::JS::MutableHandle<root::JS::Value> ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_357() { + fn __bindgen_test_layout_Handle_instantiation_361() { assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37099,7 +37236,7 @@ pub mod root { root::JS::Handle<*mut root::JSObject> ) )); } #[test] - fn __bindgen_test_layout_nsRefPtrHashKey_instantiation_358() { + fn __bindgen_test_layout_nsRefPtrHashKey_instantiation_362() { assert_eq!(::std::mem::size_of::<root::nsRefPtrHashKey<root::mozilla::dom::Element>>() , 16usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37110,7 +37247,7 @@ pub mod root { root::nsRefPtrHashKey<root::mozilla::dom::Element> ) )); } #[test] - fn __bindgen_test_layout_nsClassHashtable_instantiation_359() { + fn __bindgen_test_layout_nsClassHashtable_instantiation_363() { assert_eq!(::std::mem::size_of::<[u64; 6usize]>() , 48usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37121,7 +37258,7 @@ pub mod root { [u64; 6usize] ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_360() { + fn __bindgen_test_layout_Handle_instantiation_364() { assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37132,7 +37269,7 @@ pub mod root { root::JS::Handle<*mut root::JSObject> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_instantiation_361() { + fn __bindgen_test_layout_nsTArray_instantiation_365() { assert_eq!(::std::mem::size_of::<root::nsTArray<::nsstring::nsStringRepr>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37143,7 +37280,7 @@ pub mod root { root::nsTArray<::nsstring::nsStringRepr> ) )); } #[test] - fn __bindgen_test_layout_already_AddRefed_instantiation_362() { + fn __bindgen_test_layout_already_AddRefed_instantiation_366() { assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::mozilla::dom::CSSValue>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37154,7 +37291,7 @@ pub mod root { root::already_AddRefed<root::mozilla::dom::CSSValue> ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_363() { + fn __bindgen_test_layout_Handle_instantiation_367() { assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37165,7 +37302,7 @@ pub mod root { root::JS::Handle<*mut root::JSObject> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_instantiation_364() { + fn __bindgen_test_layout_nsTArray_instantiation_368() { assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::mozilla::css::DocumentRule>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -37176,7 +37313,7 @@ pub mod root { root::nsTArray<*mut root::mozilla::css::DocumentRule> ) )); } #[test] - fn __bindgen_test_layout_nsAutoPtr_instantiation_365() { + fn __bindgen_test_layout_nsAutoPtr_instantiation_369() { assert_eq!(::std::mem::size_of::<root::nsAutoPtr<root::nsMediaQuery>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( diff --git a/components/style/gecko/generated/structs_release.rs b/components/style/gecko/generated/structs_release.rs index 7e79efc589d..c8d937faa5b 100644 --- a/components/style/gecko/generated/structs_release.rs +++ b/components/style/gecko/generated/structs_release.rs @@ -3246,6 +3246,12 @@ pub mod root { } #[repr(C)] #[derive(Debug, Copy, Clone)] + pub struct NonNull<T> { + pub ptr: *mut T, + pub _phantom_0: ::std::marker::PhantomData<::std::cell::UnsafeCell<T>>, + } + #[repr(C)] + #[derive(Debug, Copy, Clone)] pub struct Sequence { } #[repr(C)] @@ -4946,6 +4952,93 @@ pub mod root { } #[repr(C)] #[derive(Debug, Copy, Clone)] + pub struct CSSPseudoElement { + _unused: [u8; 0], + } + #[repr(u8)] + #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] + pub enum IterationCompositeOperation { + Replace = 0, + Accumulate = 1, + EndGuard_ = 2, + } + #[repr(C)] + #[derive(Debug)] + pub struct ElementOrCSSPseudoElement { + pub mType: root::mozilla::dom::ElementOrCSSPseudoElement_Type, + pub mValue: root::mozilla::dom::ElementOrCSSPseudoElement_Value, + } + #[repr(u32)] + #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] + pub enum ElementOrCSSPseudoElement_Type { + eUninitialized = 0, + eElement = 1, + eCSSPseudoElement = 2, + } + #[repr(C)] + #[derive(Debug, Copy)] + pub struct ElementOrCSSPseudoElement_Value { + pub mElement: root::__BindgenUnionField<root::mozilla::dom::UnionMember>, + pub mCSSPseudoElement: root::__BindgenUnionField<root::mozilla::dom::UnionMember>, + pub bindgen_union_field: u64, + } + #[test] + fn bindgen_test_layout_ElementOrCSSPseudoElement_Value() { + assert_eq!(::std::mem::size_of::<ElementOrCSSPseudoElement_Value>() + , 8usize , concat ! ( + "Size of: " , stringify ! ( + ElementOrCSSPseudoElement_Value ) )); + assert_eq! (::std::mem::align_of::<ElementOrCSSPseudoElement_Value>() + , 8usize , concat ! ( + "Alignment of " , stringify ! ( + ElementOrCSSPseudoElement_Value ) )); + assert_eq! (unsafe { + & ( + * ( 0 as * const ElementOrCSSPseudoElement_Value ) + ) . mElement as * const _ as usize } , 0usize , + concat ! ( + "Alignment of field: " , stringify ! ( + ElementOrCSSPseudoElement_Value ) , "::" , + stringify ! ( mElement ) )); + assert_eq! (unsafe { + & ( + * ( 0 as * const ElementOrCSSPseudoElement_Value ) + ) . mCSSPseudoElement as * const _ as usize } , + 0usize , concat ! ( + "Alignment of field: " , stringify ! ( + ElementOrCSSPseudoElement_Value ) , "::" , + stringify ! ( mCSSPseudoElement ) )); + } + impl Clone for ElementOrCSSPseudoElement_Value { + fn clone(&self) -> Self { *self } + } + #[test] + fn bindgen_test_layout_ElementOrCSSPseudoElement() { + assert_eq!(::std::mem::size_of::<ElementOrCSSPseudoElement>() + , 16usize , concat ! ( + "Size of: " , stringify ! ( + ElementOrCSSPseudoElement ) )); + assert_eq! (::std::mem::align_of::<ElementOrCSSPseudoElement>() + , 8usize , concat ! ( + "Alignment of " , stringify ! ( + ElementOrCSSPseudoElement ) )); + assert_eq! (unsafe { + & ( * ( 0 as * const ElementOrCSSPseudoElement ) ) + . mType as * const _ as usize } , 0usize , concat + ! ( + "Alignment of field: " , stringify ! ( + ElementOrCSSPseudoElement ) , "::" , stringify ! ( + mType ) )); + assert_eq! (unsafe { + & ( * ( 0 as * const ElementOrCSSPseudoElement ) ) + . mValue as * const _ as usize } , 8usize , concat + ! ( + "Alignment of field: " , stringify ! ( + ElementOrCSSPseudoElement ) , "::" , stringify ! ( + mValue ) )); + } + #[repr(C)] + #[derive(Debug, Copy, Clone)] pub struct CustomElementData { _unused: [u8; 0], } @@ -5559,11 +5652,6 @@ pub mod root { } #[repr(C)] #[derive(Debug, Copy, Clone)] - pub struct ElementOrCSSPseudoElement { - _unused: [u8; 0], - } - #[repr(C)] - #[derive(Debug, Copy, Clone)] pub struct UnrestrictedDoubleOrKeyframeAnimationOptions { _unused: [u8; 0], } @@ -33732,7 +33820,7 @@ pub mod root { root::nsCharTraits ) )); } #[test] - fn __bindgen_test_layout__bindgen_ty_id_206853_instantiation_97() { + fn __bindgen_test_layout__bindgen_ty_id_207736_instantiation_97() { assert_eq!(::std::mem::size_of::<u8>() , 1usize , concat ! ( "Size of template specialization: " , stringify ! ( u8 ) )); @@ -33741,7 +33829,7 @@ pub mod root { ) )); } #[test] - fn __bindgen_test_layout__bindgen_ty_id_206889_instantiation_98() { + fn __bindgen_test_layout__bindgen_ty_id_207772_instantiation_98() { assert_eq!(::std::mem::size_of::<u8>() , 1usize , concat ! ( "Size of template specialization: " , stringify ! ( u8 ) )); @@ -36294,7 +36382,55 @@ pub mod root { root::mozilla::UniquePtr<root::nsCSSValuePairList> ) )); } #[test] - fn __bindgen_test_layout_Maybe_instantiation_329() { + fn __bindgen_test_layout_NonNull_instantiation_329() { + assert_eq!(::std::mem::size_of::<root::mozilla::dom::NonNull<root::mozilla::dom::Element>>() + , 8usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::dom::NonNull<root::mozilla::dom::Element> ) + )); + assert_eq!(::std::mem::align_of::<root::mozilla::dom::NonNull<root::mozilla::dom::Element>>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::dom::NonNull<root::mozilla::dom::Element> ) + )); + } + #[test] + fn __bindgen_test_layout_NonNull_instantiation_330() { + assert_eq!(::std::mem::size_of::<root::mozilla::dom::NonNull<root::mozilla::dom::CSSPseudoElement>>() + , 8usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::mozilla::dom::NonNull<root::mozilla::dom::CSSPseudoElement> + ) )); + assert_eq!(::std::mem::align_of::<root::mozilla::dom::NonNull<root::mozilla::dom::CSSPseudoElement>>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::mozilla::dom::NonNull<root::mozilla::dom::CSSPseudoElement> + ) )); + } + #[test] + fn __bindgen_test_layout_Handle_instantiation_331() { + assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>() + , 8usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::JS::Handle<*mut root::JSObject> ) )); + assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::JS::Handle<*mut root::JSObject> ) )); + } + #[test] + fn __bindgen_test_layout_MutableHandle_instantiation_332() { + assert_eq!(::std::mem::size_of::<root::JS::MutableHandle<root::JS::Value>>() + , 8usize , concat ! ( + "Size of template specialization: " , stringify ! ( + root::JS::MutableHandle<root::JS::Value> ) )); + assert_eq!(::std::mem::align_of::<root::JS::MutableHandle<root::JS::Value>>() + , 8usize , concat ! ( + "Alignment of template specialization: " , stringify ! ( + root::JS::MutableHandle<root::JS::Value> ) )); + } + #[test] + fn __bindgen_test_layout_Maybe_instantiation_333() { assert_eq!(::std::mem::size_of::<[u64; 18usize]>() , 144usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36305,7 +36441,7 @@ pub mod root { [u64; 18usize] ) )); } #[test] - fn __bindgen_test_layout_Maybe_instantiation_330() { + fn __bindgen_test_layout_Maybe_instantiation_334() { assert_eq!(::std::mem::size_of::<[u64; 18usize]>() , 144usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36316,7 +36452,7 @@ pub mod root { [u64; 18usize] ) )); } #[test] - fn __bindgen_test_layout_BaseTimeDuration_instantiation_331() { + fn __bindgen_test_layout_BaseTimeDuration_instantiation_335() { assert_eq!(::std::mem::size_of::<root::mozilla::BaseTimeDuration>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36327,7 +36463,7 @@ pub mod root { root::mozilla::BaseTimeDuration ) )); } #[test] - fn __bindgen_test_layout_already_AddRefed_instantiation_332() { + fn __bindgen_test_layout_already_AddRefed_instantiation_336() { assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36338,7 +36474,7 @@ pub mod root { root::already_AddRefed<root::mozilla::dom::NodeInfo> ) )); } #[test] - fn __bindgen_test_layout_already_AddRefed_instantiation_333() { + fn __bindgen_test_layout_already_AddRefed_instantiation_337() { assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36349,7 +36485,7 @@ pub mod root { root::already_AddRefed<root::mozilla::dom::NodeInfo> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_instantiation_334() { + fn __bindgen_test_layout_nsTArray_instantiation_338() { assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::nsIContent>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36360,7 +36496,7 @@ pub mod root { root::nsTArray<*mut root::nsIContent> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_instantiation_335() { + fn __bindgen_test_layout_nsTArray_instantiation_339() { assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::nsIContent>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36371,7 +36507,7 @@ pub mod root { root::nsTArray<*mut root::nsIContent> ) )); } #[test] - fn __bindgen_test_layout_nsCOMPtr_instantiation_336() { + fn __bindgen_test_layout_nsCOMPtr_instantiation_340() { assert_eq!(::std::mem::size_of::<root::nsCOMPtr>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36382,7 +36518,7 @@ pub mod root { root::nsCOMPtr ) )); } #[test] - fn __bindgen_test_layout_nsRefPtrHashKey_instantiation_337() { + fn __bindgen_test_layout_nsRefPtrHashKey_instantiation_341() { assert_eq!(::std::mem::size_of::<root::nsRefPtrHashKey<root::mozilla::dom::DOMIntersectionObserver>>() , 16usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36395,7 +36531,7 @@ pub mod root { ) )); } #[test] - fn __bindgen_test_layout_already_AddRefed_instantiation_338() { + fn __bindgen_test_layout_already_AddRefed_instantiation_342() { assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36406,7 +36542,7 @@ pub mod root { root::already_AddRefed<root::mozilla::dom::NodeInfo> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_instantiation_339() { + fn __bindgen_test_layout_nsTArray_instantiation_343() { assert_eq!(::std::mem::size_of::<root::nsTArray<root::mozilla::DisplayItemClip_RoundedRect>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36419,7 +36555,7 @@ pub mod root { ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_340() { + fn __bindgen_test_layout_Handle_instantiation_344() { assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36430,7 +36566,7 @@ pub mod root { root::JS::Handle<*mut root::JSObject> ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_341() { + fn __bindgen_test_layout_Handle_instantiation_345() { assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36441,7 +36577,7 @@ pub mod root { root::JS::Handle<*mut root::JSObject> ) )); } #[test] - fn __bindgen_test_layout_RefPtr_instantiation_342() { + fn __bindgen_test_layout_RefPtr_instantiation_346() { assert_eq!(::std::mem::size_of::<root::RefPtr<root::mozilla::dom::DOMRect>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36452,7 +36588,7 @@ pub mod root { root::RefPtr<root::mozilla::dom::DOMRect> ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_343() { + fn __bindgen_test_layout_Handle_instantiation_347() { assert_eq!(::std::mem::size_of::<root::JS::Handle<root::JS::Value>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36463,7 +36599,7 @@ pub mod root { root::JS::Handle<root::JS::Value> ) )); } #[test] - fn __bindgen_test_layout_MutableHandle_instantiation_344() { + fn __bindgen_test_layout_MutableHandle_instantiation_348() { assert_eq!(::std::mem::size_of::<root::JS::MutableHandle<root::JS::Value>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36474,7 +36610,7 @@ pub mod root { root::JS::MutableHandle<root::JS::Value> ) )); } #[test] - fn __bindgen_test_layout_Sequence_instantiation_345() { + fn __bindgen_test_layout_Sequence_instantiation_349() { assert_eq!(::std::mem::size_of::<u64>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( u64 ) )); @@ -36483,7 +36619,7 @@ pub mod root { u64 ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_346() { + fn __bindgen_test_layout_Handle_instantiation_350() { assert_eq!(::std::mem::size_of::<root::JS::Handle<root::JS::Value>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36494,7 +36630,7 @@ pub mod root { root::JS::Handle<root::JS::Value> ) )); } #[test] - fn __bindgen_test_layout_Sequence_instantiation_347() { + fn __bindgen_test_layout_Sequence_instantiation_351() { assert_eq!(::std::mem::size_of::<u64>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( u64 ) )); @@ -36503,7 +36639,7 @@ pub mod root { u64 ) )); } #[test] - fn __bindgen_test_layout_Sequence_instantiation_348() { + fn __bindgen_test_layout_Sequence_instantiation_352() { assert_eq!(::std::mem::size_of::<u64>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( u64 ) )); @@ -36512,7 +36648,7 @@ pub mod root { u64 ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_349() { + fn __bindgen_test_layout_Handle_instantiation_353() { assert_eq!(::std::mem::size_of::<root::JS::Handle<root::JS::Value>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36523,7 +36659,7 @@ pub mod root { root::JS::Handle<root::JS::Value> ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_350() { + fn __bindgen_test_layout_Handle_instantiation_354() { assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36534,7 +36670,7 @@ pub mod root { root::JS::Handle<*mut root::JSObject> ) )); } #[test] - fn __bindgen_test_layout_MutableHandle_instantiation_351() { + fn __bindgen_test_layout_MutableHandle_instantiation_355() { assert_eq!(::std::mem::size_of::<root::JS::MutableHandle<root::JS::Value>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36545,7 +36681,7 @@ pub mod root { root::JS::MutableHandle<root::JS::Value> ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_352() { + fn __bindgen_test_layout_Handle_instantiation_356() { assert_eq!(::std::mem::size_of::<root::JS::Handle<root::JS::Value>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36556,7 +36692,7 @@ pub mod root { root::JS::Handle<root::JS::Value> ) )); } #[test] - fn __bindgen_test_layout_MutableHandle_instantiation_353() { + fn __bindgen_test_layout_MutableHandle_instantiation_357() { assert_eq!(::std::mem::size_of::<root::JS::MutableHandle<root::JS::Value>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36567,7 +36703,7 @@ pub mod root { root::JS::MutableHandle<root::JS::Value> ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_354() { + fn __bindgen_test_layout_Handle_instantiation_358() { assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36578,7 +36714,7 @@ pub mod root { root::JS::Handle<*mut root::JSObject> ) )); } #[test] - fn __bindgen_test_layout_nsRefPtrHashKey_instantiation_355() { + fn __bindgen_test_layout_nsRefPtrHashKey_instantiation_359() { assert_eq!(::std::mem::size_of::<root::nsRefPtrHashKey<root::mozilla::dom::Element>>() , 16usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36589,7 +36725,7 @@ pub mod root { root::nsRefPtrHashKey<root::mozilla::dom::Element> ) )); } #[test] - fn __bindgen_test_layout_nsClassHashtable_instantiation_356() { + fn __bindgen_test_layout_nsClassHashtable_instantiation_360() { assert_eq!(::std::mem::size_of::<[u64; 5usize]>() , 40usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36600,7 +36736,7 @@ pub mod root { [u64; 5usize] ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_357() { + fn __bindgen_test_layout_Handle_instantiation_361() { assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36611,7 +36747,7 @@ pub mod root { root::JS::Handle<*mut root::JSObject> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_instantiation_358() { + fn __bindgen_test_layout_nsTArray_instantiation_362() { assert_eq!(::std::mem::size_of::<root::nsTArray<::nsstring::nsStringRepr>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36622,7 +36758,7 @@ pub mod root { root::nsTArray<::nsstring::nsStringRepr> ) )); } #[test] - fn __bindgen_test_layout_already_AddRefed_instantiation_359() { + fn __bindgen_test_layout_already_AddRefed_instantiation_363() { assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::mozilla::dom::CSSValue>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36633,7 +36769,7 @@ pub mod root { root::already_AddRefed<root::mozilla::dom::CSSValue> ) )); } #[test] - fn __bindgen_test_layout_Handle_instantiation_360() { + fn __bindgen_test_layout_Handle_instantiation_364() { assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36644,7 +36780,7 @@ pub mod root { root::JS::Handle<*mut root::JSObject> ) )); } #[test] - fn __bindgen_test_layout_nsTArray_instantiation_361() { + fn __bindgen_test_layout_nsTArray_instantiation_365() { assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::mozilla::css::DocumentRule>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( @@ -36655,7 +36791,7 @@ pub mod root { root::nsTArray<*mut root::mozilla::css::DocumentRule> ) )); } #[test] - fn __bindgen_test_layout_nsAutoPtr_instantiation_362() { + fn __bindgen_test_layout_nsAutoPtr_instantiation_366() { assert_eq!(::std::mem::size_of::<root::nsAutoPtr<root::nsMediaQuery>>() , 8usize , concat ! ( "Size of template specialization: " , stringify ! ( diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 883524c7199..a7b332b3479 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -68,6 +68,7 @@ use style::gecko_bindings::structs::{RawServoStyleRule, ServoStyleSheet}; use style::gecko_bindings::structs::{SheetParsingMode, nsIAtom, nsCSSPropertyID}; use style::gecko_bindings::structs::{nsCSSFontFaceRule, nsCSSCounterStyleRule}; use style::gecko_bindings::structs::{nsRestyleHint, nsChangeHint}; +use style::gecko_bindings::structs::IterationCompositeOperation; use style::gecko_bindings::structs::Loader; use style::gecko_bindings::structs::RawGeckoPresContextOwned; use style::gecko_bindings::structs::ServoElementSnapshotTable; @@ -332,7 +333,9 @@ pub extern "C" fn Servo_AnimationCompose(raw_value_map: RawServoAnimationValueMa base_values: *mut ::std::os::raw::c_void, css_property: nsCSSPropertyID, segment: RawGeckoAnimationPropertySegmentBorrowed, - computed_timing: RawGeckoComputedTimingBorrowed) + last_segment: RawGeckoAnimationPropertySegmentBorrowed, + computed_timing: RawGeckoComputedTimingBorrowed, + iteration_composite: IterationCompositeOperation) { use style::gecko_bindings::bindings::Gecko_AnimationGetBaseStyle; use style::gecko_bindings::bindings::Gecko_GetPositionInSegment; @@ -342,10 +345,16 @@ pub extern "C" fn Servo_AnimationCompose(raw_value_map: RawServoAnimationValueMa let property: TransitionProperty = css_property.into(); let value_map = AnimationValueMap::from_ffi_mut(raw_value_map); + // We will need an underlying value if either of the endpoints is null... let need_underlying_value = segment.mFromValue.mServo.mRawPtr.is_null() || segment.mToValue.mServo.mRawPtr.is_null() || + // ... or if they have a non-replace composite mode ... segment.mFromComposite != CompositeOperation::Replace || - segment.mToComposite != CompositeOperation::Replace; + segment.mToComposite != CompositeOperation::Replace || + // ... or if we accumulate onto the last value and it is null. + (iteration_composite == IterationCompositeOperation::Accumulate && + computed_timing.mCurrentIteration > 0 && + last_segment.mToValue.mServo.mRawPtr.is_null()); // If either of the segment endpoints are null, get the underlying value to // use from the current value in the values map (set by a lower-priority @@ -410,14 +419,47 @@ pub extern "C" fn Servo_AnimationCompose(raw_value_map: RawServoAnimationValueMa }, } }; - let composited_from_value = composite_endpoint(keyframe_from_value, segment.mFromComposite); - let composited_to_value = composite_endpoint(keyframe_to_value, segment.mToComposite); + let mut composited_from_value = composite_endpoint(keyframe_from_value, segment.mFromComposite); + let mut composited_to_value = composite_endpoint(keyframe_to_value, segment.mToComposite); debug_assert!(keyframe_from_value.is_some() || composited_from_value.is_some(), "Should have a suitable from value to use"); debug_assert!(keyframe_to_value.is_some() || composited_to_value.is_some(), "Should have a suitable to value to use"); + // Apply iteration composite behavior. + if iteration_composite == IterationCompositeOperation::Accumulate && + computed_timing.mCurrentIteration > 0 { + let raw_last_value; + let last_value = if !last_segment.mToValue.mServo.mRawPtr.is_null() { + raw_last_value = unsafe { &*last_segment.mToValue.mServo.mRawPtr }; + AnimationValue::as_arc(&raw_last_value).as_ref() + } else { + debug_assert!(need_underlying_value, + "Should have detected we need an underlying value"); + underlying_value.as_ref().unwrap() + }; + + // As with composite_endpoint, a return value of None means, "Use keyframe_value as-is." + let apply_iteration_composite = |keyframe_value: Option<&Arc<AnimationValue>>, + composited_value: Option<AnimationValue>| + -> Option<AnimationValue> { + let count = computed_timing.mCurrentIteration; + match composited_value { + Some(endpoint) => last_value.accumulate(&endpoint, count) + .ok() + .or(Some(endpoint)), + None => last_value.accumulate(keyframe_value.unwrap(), count) + .ok(), + } + }; + + composited_from_value = apply_iteration_composite(keyframe_from_value, + composited_from_value); + composited_to_value = apply_iteration_composite(keyframe_to_value, + composited_to_value); + } + // Use the composited value if there is one, otherwise, use the original keyframe value. let from_value = composited_from_value.as_ref().unwrap_or_else(|| keyframe_from_value.unwrap()); let to_value = composited_to_value.as_ref().unwrap_or_else(|| keyframe_to_value.unwrap()); |