diff options
author | Hiroyuki Ikezoe <hikezoe@mozilla.com> | 2017-06-08 13:16:52 +0900 |
---|---|---|
committer | Hiroyuki Ikezoe <hikezoe@mozilla.com> | 2017-06-09 07:03:16 +0900 |
commit | ba2c73d20abe94ae18167097b02430a8a13fb6e5 (patch) | |
tree | 5281bd4c90fabd8a3134e0d75aaec3a266194fdc | |
parent | 2b929a1cb14690112c6d19c96a382576eac23065 (diff) | |
download | servo-ba2c73d20abe94ae18167097b02430a8a13fb6e5.tar.gz servo-ba2c73d20abe94ae18167097b02430a8a13fb6e5.zip |
Add a new FFI to convert PropertyDeclarationBlock into nsTArray<RefPtr<RawServoAnimationValue>>.
With this function we can get multiple RawServoAnimationValue(s) for shorthand
properties.
-rw-r--r-- | ports/geckolib/glue.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 09badb03435..3b40053c680 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -53,6 +53,7 @@ use style::gecko_bindings::bindings::RawGeckoCSSPropertyIDListBorrowed; use style::gecko_bindings::bindings::RawGeckoComputedKeyframeValuesListBorrowedMut; use style::gecko_bindings::bindings::RawGeckoComputedTimingBorrowed; use style::gecko_bindings::bindings::RawGeckoFontFaceRuleListBorrowedMut; +use style::gecko_bindings::bindings::RawGeckoServoAnimationValueListBorrowedMut; use style::gecko_bindings::bindings::RawGeckoServoStyleRuleListBorrowedMut; use style::gecko_bindings::bindings::RawServoAnimationValueBorrowed; use style::gecko_bindings::bindings::RawServoAnimationValueMapBorrowedMut; @@ -2634,6 +2635,35 @@ pub extern "C" fn Servo_GetComputedKeyframeValues(keyframes: RawGeckoKeyframeLis } #[no_mangle] +pub extern "C" fn Servo_GetAnimationValues(declarations: RawServoDeclarationBlockBorrowed, + element: RawGeckoElementBorrowed, + style: ServoComputedValuesBorrowed, + raw_data: RawServoStyleSetBorrowed, + animation_values: RawGeckoServoAnimationValueListBorrowedMut) { + let data = PerDocumentStyleData::from_ffi(raw_data).borrow(); + let style = ComputedValues::as_arc(&style); + let metrics = get_metrics_provider_for_product(); + + let element = GeckoElement(element); + let parent_element = element.inheritance_parent(); + let parent_data = parent_element.as_ref().and_then(|e| e.borrow_data()); + let parent_style = parent_data.as_ref().map(|d| d.styles().primary.values()); + + let mut context = create_context(&data, &metrics, style, &parent_style); + + let default_values = data.default_computed_values(); + let global_style_data = &*GLOBAL_STYLE_DATA; + let guard = global_style_data.shared_lock.read(); + + let declarations = Locked::<PropertyDeclarationBlock>::as_arc(&declarations); + let guard = declarations.read_with(&guard); + for (index, anim) in guard.to_animation_value_iter(&mut context, &default_values).enumerate() { + unsafe { animation_values.set_len((index + 1) as u32) }; + animation_values[index].set_arc_leaky(Arc::new(anim.1)); + } +} + +#[no_mangle] pub extern "C" fn Servo_AnimationValue_Compute(element: RawGeckoElementBorrowed, declarations: RawServoDeclarationBlockBorrowed, style: ServoComputedValuesBorrowed, |