diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2017-02-10 01:34:07 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-10 01:34:07 -0800 |
commit | 401a55e172e7ebdbc1045400ec4720a6c3f1cb03 (patch) | |
tree | 6fcc53956a51ad97930bb44824c8d05d1cf68096 | |
parent | 2771b24ab36fb7953780660c275ec295de479599 (diff) | |
parent | fe1c2af406cf5ee750f0106b295fa746b15cf2d0 (diff) | |
download | servo-401a55e172e7ebdbc1045400ec4720a6c3f1cb03.tar.gz servo-401a55e172e7ebdbc1045400ec4720a6c3f1cb03.zip |
Auto merge of #15493 - BorisChiou:animation/get_property, r=Manishearth
stylo: Add Servo_AnimationValue_Serialize
This is the servo-side change for [bug 1337313](https://bugzilla.mozilla.org/show_bug.cgi?id=1337313). @Manishearth had already reviewed it there. Please merge this patch until the gecko-side changes for [bug 1337313](https://bugzilla.mozilla.org/show_bug.cgi?id=1337313) is landed.
---
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix [bug 1337313](https://bugzilla.mozilla.org/show_bug.cgi?id=1337313).
- [X] These changes do not require tests because there are existing tests for this in mozilla-central
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15493)
<!-- Reviewable:end -->
-rw-r--r-- | components/style/gecko_bindings/bindings.rs | 13 | ||||
-rw-r--r-- | ports/geckolib/glue.rs | 40 |
2 files changed, 37 insertions, 16 deletions
diff --git a/components/style/gecko_bindings/bindings.rs b/components/style/gecko_bindings/bindings.rs index 11bc35897ac..eb691fafedc 100644 --- a/components/style/gecko_bindings/bindings.rs +++ b/components/style/gecko_bindings/bindings.rs @@ -1303,13 +1303,18 @@ extern "C" { -> RawServoDeclarationBlockStrong; } extern "C" { - pub fn Servo_AnimationValues_GetOpacity(value: - RawServoAnimationValueBorrowed) + pub fn Servo_AnimationValue_Serialize(value: + RawServoAnimationValueBorrowed, + property: nsCSSPropertyID, + buffer: *mut nsAString_internal); +} +extern "C" { + pub fn Servo_AnimationValue_GetOpacity(value: RawServoAnimationValueBorrowed) -> f32; } extern "C" { - pub fn Servo_AnimationValues_GetTransform(value: RawServoAnimationValueBorrowed, - list: &mut RefPtr<nsCSSValueSharedList>); + pub fn Servo_AnimationValue_GetTransform(value: RawServoAnimationValueBorrowed, + list: &mut RefPtr<nsCSSValueSharedList>); } extern "C" { pub fn Servo_ParseStyleAttribute(data: *const nsACString_internal) diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index d15fefc6bdb..9369a83ee89 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -213,8 +213,33 @@ pub extern "C" fn Servo_AnimationValues_Uncompute(value: RawServoAnimationValueB })).into_strong() } +macro_rules! get_property_id_from_nscsspropertyid { + ($property_id: ident, $ret: expr) => {{ + match PropertyId::from_nscsspropertyid($property_id) { + Ok(property_id) => property_id, + Err(()) => { return $ret; } + } + }} +} + +#[no_mangle] +pub extern "C" fn Servo_AnimationValue_Serialize(value: RawServoAnimationValueBorrowed, + property: nsCSSPropertyID, + buffer: *mut nsAString) +{ + let uncomputed_value = AnimationValue::as_arc(&value).uncompute(); + let mut string = String::new(); + let rv = PropertyDeclarationBlock { + declarations: vec![(uncomputed_value, Importance::Normal)], + important_count: 0 + }.single_value_to_css(&get_property_id_from_nscsspropertyid!(property, ()), &mut string); + debug_assert!(rv.is_ok()); + + write!(unsafe { &mut *buffer }, "{}", string).expect("Failed to copy string"); +} + #[no_mangle] -pub extern "C" fn Servo_AnimationValues_GetOpacity(value: RawServoAnimationValueBorrowed) +pub extern "C" fn Servo_AnimationValue_GetOpacity(value: RawServoAnimationValueBorrowed) -> f32 { let value = AnimationValue::as_arc(&value); @@ -226,8 +251,8 @@ pub extern "C" fn Servo_AnimationValues_GetOpacity(value: RawServoAnimationValue } #[no_mangle] -pub extern "C" fn Servo_AnimationValues_GetTransform(value: RawServoAnimationValueBorrowed, - list: &mut structs::RefPtr<nsCSSValueSharedList>) +pub extern "C" fn Servo_AnimationValue_GetTransform(value: RawServoAnimationValueBorrowed, + list: &mut structs::RefPtr<nsCSSValueSharedList>) { let value = AnimationValue::as_arc(&value); if let AnimationValue::Transform(ref servo_list) = **value { @@ -832,15 +857,6 @@ pub extern "C" fn Servo_DeclarationBlock_GetCssText(declarations: RawServoDeclar declarations.read().to_css(unsafe { result.as_mut().unwrap() }).unwrap(); } -macro_rules! get_property_id_from_nscsspropertyid { - ($property_id: ident, $ret: expr) => {{ - match PropertyId::from_nscsspropertyid($property_id) { - Ok(property_id) => property_id, - Err(()) => { return $ret; } - } - }} -} - #[no_mangle] pub extern "C" fn Servo_DeclarationBlock_SerializeOneValue( declarations: RawServoDeclarationBlockBorrowed, |