aboutsummaryrefslogtreecommitdiffstats
path: root/ports
diff options
context:
space:
mode:
authorBoris Chiou <boris.chiou@gmail.com>2017-05-19 15:55:03 +0800
committerBoris Chiou <boris.chiou@gmail.com>2017-05-20 14:29:47 +0800
commit60e7a89d571335e5cb223eabac43fc4e028931e1 (patch)
treee1df035be0eebdbef02c4a569119c1aca376b009 /ports
parentf05491166f21879f74758b2f03bbc4c4a4c31eb8 (diff)
downloadservo-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.rs36
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)