mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Bug 1335942 - Part 3: Support GetTransform FFI. r=manishearth
This commit is contained in:
parent
22d04e1a16
commit
873cb98302
4 changed files with 39 additions and 14 deletions
|
@ -505,6 +505,7 @@ mod bindings {
|
||||||
"RawServoDeclarationBlock",
|
"RawServoDeclarationBlock",
|
||||||
"RawGeckoPresContext",
|
"RawGeckoPresContext",
|
||||||
"RawGeckoPresContextOwned",
|
"RawGeckoPresContextOwned",
|
||||||
|
"RefPtr",
|
||||||
"ThreadSafeURIHolder",
|
"ThreadSafeURIHolder",
|
||||||
"ThreadSafePrincipalHolder",
|
"ThreadSafePrincipalHolder",
|
||||||
"CSSPseudoClassType",
|
"CSSPseudoClassType",
|
||||||
|
|
|
@ -156,6 +156,7 @@ use gecko_bindings::structs::Loader;
|
||||||
use gecko_bindings::structs::ServoStyleSheet;
|
use gecko_bindings::structs::ServoStyleSheet;
|
||||||
use gecko_bindings::structs::EffectCompositor_CascadeLevel;
|
use gecko_bindings::structs::EffectCompositor_CascadeLevel;
|
||||||
use gecko_bindings::structs::RawServoAnimationValueBorrowedListBorrowed;
|
use gecko_bindings::structs::RawServoAnimationValueBorrowedListBorrowed;
|
||||||
|
use gecko_bindings::structs::RefPtr;
|
||||||
pub type nsTArrayBorrowed_uintptr_t<'a> = &'a mut ::gecko_bindings::structs::nsTArray<usize>;
|
pub type nsTArrayBorrowed_uintptr_t<'a> = &'a mut ::gecko_bindings::structs::nsTArray<usize>;
|
||||||
pub type ServoComputedValuesStrong = ::gecko_bindings::sugar::ownership::Strong<ServoComputedValues>;
|
pub type ServoComputedValuesStrong = ::gecko_bindings::sugar::ownership::Strong<ServoComputedValues>;
|
||||||
pub type ServoComputedValuesBorrowed<'a> = &'a ServoComputedValues;
|
pub type ServoComputedValuesBorrowed<'a> = &'a ServoComputedValues;
|
||||||
|
@ -1306,6 +1307,10 @@ extern "C" {
|
||||||
RawServoAnimationValueBorrowed)
|
RawServoAnimationValueBorrowed)
|
||||||
-> f32;
|
-> f32;
|
||||||
}
|
}
|
||||||
|
extern "C" {
|
||||||
|
pub fn Servo_AnimationValues_GetTransform(value: RawServoAnimationValueBorrowed,
|
||||||
|
list: &mut RefPtr<nsCSSValueSharedList>);
|
||||||
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Servo_ParseStyleAttribute(data: *const nsACString_internal)
|
pub fn Servo_ParseStyleAttribute(data: *const nsACString_internal)
|
||||||
-> RawServoDeclarationBlockStrong;
|
-> RawServoDeclarationBlockStrong;
|
||||||
|
|
|
@ -1322,7 +1322,7 @@ fn static_assert() {
|
||||||
"number" : "bindings::Gecko_CSSValue_SetNumber(%s, %s)",
|
"number" : "bindings::Gecko_CSSValue_SetNumber(%s, %s)",
|
||||||
}
|
}
|
||||||
%>
|
%>
|
||||||
ComputedOperation::${name.title()}(${pattern}) => {
|
longhands::transform::computed_value::ComputedOperation::${name.title()}(${pattern}) => {
|
||||||
bindings::Gecko_CSSValue_SetFunction(gecko_value, ${len(items) + 1});
|
bindings::Gecko_CSSValue_SetFunction(gecko_value, ${len(items) + 1});
|
||||||
bindings::Gecko_CSSValue_SetKeyword(
|
bindings::Gecko_CSSValue_SetKeyword(
|
||||||
bindings::Gecko_CSSValue_GetArrayItem(gecko_value, 0),
|
bindings::Gecko_CSSValue_GetArrayItem(gecko_value, 0),
|
||||||
|
@ -1336,27 +1336,20 @@ fn static_assert() {
|
||||||
% endfor
|
% endfor
|
||||||
}
|
}
|
||||||
</%def>
|
</%def>
|
||||||
pub fn set_transform(&mut self, other: longhands::transform::computed_value::T) {
|
pub fn convert_transform(input: Vec<longhands::transform::computed_value::ComputedOperation>,
|
||||||
|
output: &mut structs::root::RefPtr<structs::root::nsCSSValueSharedList>) {
|
||||||
use gecko_bindings::structs::nsCSSKeyword::*;
|
use gecko_bindings::structs::nsCSSKeyword::*;
|
||||||
use gecko_bindings::sugar::refptr::RefPtr;
|
use gecko_bindings::sugar::refptr::RefPtr;
|
||||||
use properties::longhands::transform::computed_value::ComputedMatrix;
|
use properties::longhands::transform::computed_value::ComputedMatrix;
|
||||||
use properties::longhands::transform::computed_value::ComputedOperation;
|
|
||||||
|
|
||||||
let vec = if let Some(v) = other.0 {
|
unsafe { output.clear() };
|
||||||
v
|
|
||||||
} else {
|
|
||||||
unsafe {
|
|
||||||
self.gecko.mSpecifiedTransform.clear();
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
|
|
||||||
let list = unsafe {
|
let list = unsafe {
|
||||||
RefPtr::from_addrefed(bindings::Gecko_NewCSSValueSharedList(vec.len() as u32))
|
RefPtr::from_addrefed(bindings::Gecko_NewCSSValueSharedList(input.len() as u32))
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut cur = list.mHead;
|
let mut cur = list.mHead;
|
||||||
let mut iter = vec.into_iter();
|
let mut iter = input.into_iter();
|
||||||
while !cur.is_null() {
|
while !cur.is_null() {
|
||||||
let gecko_value = unsafe { &mut (*cur).mValue };
|
let gecko_value = unsafe { &mut (*cur).mValue };
|
||||||
let servo = iter.next().expect("Gecko_NewCSSValueSharedList should create a shared \
|
let servo = iter.next().expect("Gecko_NewCSSValueSharedList should create a shared \
|
||||||
|
@ -1374,7 +1367,19 @@ fn static_assert() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
debug_assert!(iter.next().is_none());
|
debug_assert!(iter.next().is_none());
|
||||||
unsafe { self.gecko.mSpecifiedTransform.set_move(list) };
|
unsafe { output.set_move(list) };
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_transform(&mut self, other: longhands::transform::computed_value::T) {
|
||||||
|
let vec = if let Some(v) = other.0 {
|
||||||
|
v
|
||||||
|
} else {
|
||||||
|
unsafe {
|
||||||
|
self.gecko.mSpecifiedTransform.clear();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
Self::convert_transform(vec, &mut self.gecko.mSpecifiedTransform);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn copy_transform_from(&mut self, other: &Self) {
|
pub fn copy_transform_from(&mut self, other: &Self) {
|
||||||
|
|
|
@ -53,11 +53,13 @@ use style::gecko_bindings::structs::Loader;
|
||||||
use style::gecko_bindings::structs::RawGeckoPresContextOwned;
|
use style::gecko_bindings::structs::RawGeckoPresContextOwned;
|
||||||
use style::gecko_bindings::structs::RawServoAnimationValueBorrowedListBorrowed;
|
use style::gecko_bindings::structs::RawServoAnimationValueBorrowedListBorrowed;
|
||||||
use style::gecko_bindings::structs::ServoStyleSheet;
|
use style::gecko_bindings::structs::ServoStyleSheet;
|
||||||
|
use style::gecko_bindings::structs::nsCSSValueSharedList;
|
||||||
use style::gecko_bindings::structs::nsTimingFunction;
|
use style::gecko_bindings::structs::nsTimingFunction;
|
||||||
use style::gecko_bindings::structs::nsresult;
|
use style::gecko_bindings::structs::nsresult;
|
||||||
use style::gecko_bindings::sugar::ownership::{FFIArcHelpers, HasArcFFI, HasBoxFFI};
|
use style::gecko_bindings::sugar::ownership::{FFIArcHelpers, HasArcFFI, HasBoxFFI};
|
||||||
use style::gecko_bindings::sugar::ownership::{HasSimpleFFI, Strong};
|
use style::gecko_bindings::sugar::ownership::{HasSimpleFFI, Strong};
|
||||||
use style::gecko_bindings::sugar::refptr::{GeckoArcPrincipal, GeckoArcURI};
|
use style::gecko_bindings::sugar::refptr::{GeckoArcPrincipal, GeckoArcURI};
|
||||||
|
use style::gecko_properties::style_structs;
|
||||||
use style::keyframes::KeyframesStepValue;
|
use style::keyframes::KeyframesStepValue;
|
||||||
use style::parallel;
|
use style::parallel;
|
||||||
use style::parser::{ParserContext, ParserContextExtraData};
|
use style::parser::{ParserContext, ParserContextExtraData};
|
||||||
|
@ -217,6 +219,18 @@ 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>)
|
||||||
|
{
|
||||||
|
let value = AnimationValue::as_arc(&value);
|
||||||
|
if let AnimationValue::Transform(ref servo_list) = **value {
|
||||||
|
style_structs::Box::convert_transform(servo_list.0.clone().unwrap(), list);
|
||||||
|
} else {
|
||||||
|
panic!("The AnimationValue should be transform");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Takes a ServoAnimationValues and populates it with the animation values corresponding
|
/// Takes a ServoAnimationValues and populates it with the animation values corresponding
|
||||||
/// to a given property declaration block
|
/// to a given property declaration block
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue