diff options
author | Boris Chiou <boris.chiou@gmail.com> | 2017-05-19 15:55:03 +0800 |
---|---|---|
committer | Boris Chiou <boris.chiou@gmail.com> | 2017-05-20 14:29:47 +0800 |
commit | 60e7a89d571335e5cb223eabac43fc4e028931e1 (patch) | |
tree | e1df035be0eebdbef02c4a569119c1aca376b009 /ports | |
parent | f05491166f21879f74758b2f03bbc4c4a4c31eb8 (diff) | |
download | servo-60e7a89d571335e5cb223eabac43fc4e028931e1.tar.gz servo-60e7a89d571335e5cb223eabac43fc4e028931e1.zip |
Add Servo_GetProperties_Overriding_Animation.
We add one FFI, Servo_GetProperties_Overriding_Animation, which calls
StrongRuleNode::get_properties_overriding_animations() to get a LonghandIdSet,
which may override animation properties running on compositor.
Diffstat (limited to 'ports')
-rw-r--r-- | ports/geckolib/glue.rs | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 58075cbd063..0cd95543ac1 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -40,11 +40,13 @@ use style::gecko_bindings::bindings::{RawServoStyleSheetBorrowed, ServoComputedV use style::gecko_bindings::bindings::{RawServoStyleSheetStrong, ServoComputedValuesStrong}; use style::gecko_bindings::bindings::{RawServoSupportsRule, RawServoSupportsRuleBorrowed}; use style::gecko_bindings::bindings::{ServoCssRulesBorrowed, ServoCssRulesStrong}; -use style::gecko_bindings::bindings::{nsACString, nsAString}; +use style::gecko_bindings::bindings::{nsACString, nsAString, nsCSSPropertyIDSetBorrowedMut}; +use style::gecko_bindings::bindings::Gecko_AddPropertyToSet; use style::gecko_bindings::bindings::Gecko_GetOrCreateFinalKeyframe; use style::gecko_bindings::bindings::Gecko_GetOrCreateInitialKeyframe; use style::gecko_bindings::bindings::Gecko_GetOrCreateKeyframeAtStart; use style::gecko_bindings::bindings::RawGeckoAnimationPropertySegmentBorrowed; +use style::gecko_bindings::bindings::RawGeckoCSSPropertyIDListBorrowed; use style::gecko_bindings::bindings::RawGeckoComputedKeyframeValuesListBorrowedMut; use style::gecko_bindings::bindings::RawGeckoComputedTimingBorrowed; use style::gecko_bindings::bindings::RawGeckoElementBorrowed; @@ -1320,6 +1322,38 @@ pub extern "C" fn Servo_ParseEasing(easing: *const nsAString, } #[no_mangle] +pub extern "C" fn Servo_GetProperties_Overriding_Animation(element: RawGeckoElementBorrowed, + list: RawGeckoCSSPropertyIDListBorrowed, + set: nsCSSPropertyIDSetBorrowedMut) { + let element = GeckoElement(element); + let element_data = match element.borrow_data() { + Some(data) => data, + None => return + }; + let global_style_data = &*GLOBAL_STYLE_DATA; + let guard = global_style_data.shared_lock.read(); + let guards = StylesheetGuards::same(&guard); + let (overridden, custom) = + element_data.styles().primary.rules.get_properties_overriding_animations(&guards); + for p in list.iter() { + match PropertyId::from_nscsspropertyid(*p) { + Ok(property) => { + if let PropertyId::Longhand(id) = property { + if overridden.contains(id) { + unsafe { Gecko_AddPropertyToSet(set, *p) }; + } + } + }, + Err(_) => { + if *p == nsCSSPropertyID::eCSSPropertyExtra_variable && custom { + unsafe { Gecko_AddPropertyToSet(set, *p) }; + } + } + } + } +} + +#[no_mangle] pub extern "C" fn Servo_ParseStyleAttribute(data: *const nsACString, raw_extra_data: *mut URLExtraData, quirks_mode: nsCompatibility) |