mirror of
https://github.com/servo/servo.git
synced 2025-06-24 17:14:33 +01:00
Share transform function lists between set_transform and clone_transform
This will also fix https://bugzilla.mozilla.org/show_bug.cgi?id=1405881
This commit is contained in:
parent
6631594e28
commit
079b25db93
2 changed files with 57 additions and 25 deletions
|
@ -13,7 +13,7 @@ use std::marker::PhantomData;
|
|||
use std::mem;
|
||||
use std::ops::{Index, IndexMut};
|
||||
use std::slice;
|
||||
use values::computed::{Angle, LengthOrPercentage, Percentage};
|
||||
use values::computed::{Angle, Length, LengthOrPercentage, Percentage};
|
||||
use values::specified::url::SpecifiedUrl;
|
||||
|
||||
impl nsCSSValue {
|
||||
|
@ -104,7 +104,6 @@ impl nsCSSValue {
|
|||
|
||||
/// Returns LengthOrPercentage value.
|
||||
pub unsafe fn get_lop(&self) -> LengthOrPercentage {
|
||||
use values::computed::Length;
|
||||
match self.mUnit {
|
||||
nsCSSUnit::eCSSUnit_Pixel => {
|
||||
LengthOrPercentage::Length(Length::new(bindings::Gecko_CSSValue_GetNumber(self)))
|
||||
|
@ -119,6 +118,16 @@ impl nsCSSValue {
|
|||
}
|
||||
}
|
||||
|
||||
/// Returns Length value.
|
||||
pub unsafe fn get_length(&self) -> Length {
|
||||
match self.mUnit {
|
||||
nsCSSUnit::eCSSUnit_Pixel => {
|
||||
Length::new(bindings::Gecko_CSSValue_GetNumber(self))
|
||||
},
|
||||
x => panic!("The unit should not be {:?}", x),
|
||||
}
|
||||
}
|
||||
|
||||
fn set_valueless_unit(&mut self, unit: nsCSSUnit) {
|
||||
debug_assert_eq!(self.mUnit, nsCSSUnit::eCSSUnit_Null);
|
||||
debug_assert!(unit as u32 <= nsCSSUnit::eCSSUnit_DummyInherit as u32, "Not a valueless unit");
|
||||
|
|
|
@ -2892,7 +2892,19 @@ fn static_assert() {
|
|||
}
|
||||
|
||||
${impl_css_url('_moz_binding', 'mBinding.mPtr')}
|
||||
|
||||
<%
|
||||
transform_functions = [
|
||||
("Matrix3D", "matrix3d", ["number"] * 16),
|
||||
("PrefixedMatrix3D", "matrix3d", ["number"] * 12 + ["lopon"] * 2
|
||||
+ ["lon"] + ["number"]),
|
||||
("Translate3D", "translate3d", ["lop", "lop", "length"]),
|
||||
("Scale3D", "scale3d", ["number"] * 3),
|
||||
("Rotate3D", "rotate3d", ["number"] * 3 + ["angle"]),
|
||||
("Perspective", "perspective", ["length"]),
|
||||
("InterpolateMatrix", "interpolatematrix", ["list"] * 2 + ["percentage"]),
|
||||
("AccumulateMatrix", "accumulatematrix", ["list"] * 2 + ["integer_to_percentage"])
|
||||
]
|
||||
%>
|
||||
<%def name="transform_function_arm(name, keyword, items)">
|
||||
<%
|
||||
pattern = None
|
||||
|
@ -2978,17 +2990,9 @@ fn static_assert() {
|
|||
|
||||
unsafe {
|
||||
match *servo_value {
|
||||
${transform_function_arm("Matrix3D", "matrix3d", ["number"] * 16)}
|
||||
${transform_function_arm("PrefixedMatrix3D", "matrix3d", ["number"] * 12 + ["lopon"] * 2
|
||||
+ ["lon"] + ["number"])}
|
||||
${transform_function_arm("Translate3D", "translate3d", ["lop", "lop", "length"])}
|
||||
${transform_function_arm("Scale3D", "scale3d", ["number"] * 3)}
|
||||
${transform_function_arm("Rotate3D", "rotate3d", ["number"] * 3 + ["angle"])}
|
||||
${transform_function_arm("Perspective", "perspective", ["length"])}
|
||||
${transform_function_arm("InterpolateMatrix", "interpolatematrix",
|
||||
["list"] * 2 + ["percentage"])}
|
||||
${transform_function_arm("AccumulateMatrix", "accumulatematrix",
|
||||
["list"] * 2 + ["integer_to_percentage"])}
|
||||
% for servo, gecko, format in transform_functions:
|
||||
${transform_function_arm(servo, gecko, format)}
|
||||
% endfor
|
||||
_ => unimplemented!()
|
||||
}
|
||||
}
|
||||
|
@ -3035,10 +3039,12 @@ fn static_assert() {
|
|||
css_value_getters = {
|
||||
"length" : "Length::new(bindings::Gecko_CSSValue_GetNumber(%s))",
|
||||
"lop" : "%s.get_lop()",
|
||||
"lopon" : "Either::Second(%s.get_lop())",
|
||||
"lon" : "Either::First(%s.get_length())",
|
||||
"angle" : "%s.get_angle()",
|
||||
"number" : "bindings::Gecko_CSSValue_GetNumber(%s)",
|
||||
"percentage" : "Percentage(bindings::Gecko_CSSValue_GetPercentage(%s))",
|
||||
"percentage_to_integer" : "bindings::Gecko_CSSValue_GetPercentage(%s) as i32",
|
||||
"integer_to_percentage" : "bindings::Gecko_CSSValue_GetPercentage(%s) as i32",
|
||||
"list" : "Transform(convert_shared_list_to_operations(%s))",
|
||||
}
|
||||
pre_symbols = "("
|
||||
|
@ -3056,8 +3062,18 @@ fn static_assert() {
|
|||
field_names = ["from_list", "to_list", "progress"]
|
||||
elif keyword == "accumulatematrix":
|
||||
field_names = ["from_list", "to_list", "count"]
|
||||
|
||||
%>
|
||||
structs::nsCSSKeyword::eCSSKeyword_${keyword} => {
|
||||
<%
|
||||
|
||||
guard = ""
|
||||
if name == "Matrix3D":
|
||||
guard = "if !needs_prefix "
|
||||
elif name == "PrefixedMatrix3D":
|
||||
guard = "if needs_prefix "
|
||||
|
||||
%>
|
||||
structs::nsCSSKeyword::eCSSKeyword_${keyword} ${guard}=> {
|
||||
::values::generics::transform::TransformOperation::${name}${pre_symbols}
|
||||
% for index, item in enumerate(items):
|
||||
% if keyword == "matrix3d":
|
||||
|
@ -3096,17 +3112,24 @@ fn static_assert() {
|
|||
bindings::Gecko_CSSValue_GetKeyword(bindings::Gecko_CSSValue_GetArrayItemConst(gecko_value, 0))
|
||||
};
|
||||
|
||||
let needs_prefix = if transform_function == structs::nsCSSKeyword::eCSSKeyword_matrix3d {
|
||||
unsafe {
|
||||
bindings::Gecko_CSSValue_GetArrayItemConst(gecko_value, 13).mUnit
|
||||
!= structs::nsCSSUnit::eCSSUnit_Number ||
|
||||
bindings::Gecko_CSSValue_GetArrayItemConst(gecko_value, 14).mUnit
|
||||
!= structs::nsCSSUnit::eCSSUnit_Number ||
|
||||
bindings::Gecko_CSSValue_GetArrayItemConst(gecko_value, 15).mUnit
|
||||
!= structs::nsCSSUnit::eCSSUnit_Number
|
||||
}
|
||||
} else {
|
||||
false
|
||||
};
|
||||
|
||||
unsafe {
|
||||
match transform_function {
|
||||
${computed_operation_arm("Matrix3D", "matrix3d", ["number"] * 16)}
|
||||
${computed_operation_arm("Translate3D", "translate3d", ["lop", "lop", "length"])}
|
||||
${computed_operation_arm("Scale3D", "scale3d", ["number"] * 3)}
|
||||
${computed_operation_arm("Rotate3D", "rotate3d", ["number"] * 3 + ["angle"])}
|
||||
${computed_operation_arm("Perspective", "perspective", ["length"])}
|
||||
${computed_operation_arm("InterpolateMatrix", "interpolatematrix",
|
||||
["list"] * 2 + ["percentage"])}
|
||||
${computed_operation_arm("AccumulateMatrix", "accumulatematrix",
|
||||
["list"] * 2 + ["percentage_to_integer"])}
|
||||
% for servo, gecko, format in transform_functions:
|
||||
${computed_operation_arm(servo, gecko, format)}
|
||||
% endfor
|
||||
_ => panic!("{:?} is not an acceptable transform function", transform_function),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue