Skip to content

Commit

Permalink
Share transform function lists between set_transform and clone_transform
Browse files Browse the repository at this point in the history
  • Loading branch information
Manishearth committed Nov 2, 2017
1 parent 6631594 commit 079b25d
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 25 deletions.
13 changes: 11 additions & 2 deletions components/style/gecko_bindings/sugar/ns_css_value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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)))
Expand All @@ -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");
Expand Down
69 changes: 46 additions & 23 deletions components/style/properties/gecko.mako.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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!()
}
}
Expand Down Expand Up @@ -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 = "("
Expand All @@ -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":
Expand Down Expand Up @@ -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),
}
}
Expand Down

0 comments on commit 079b25d

Please sign in to comment.