mirror of
https://github.com/servo/servo.git
synced 2025-08-07 14:35:33 +01:00
Add support for transform functions with an optional final argument in gecko glue
This commit is contained in:
parent
e20c508a6e
commit
e15695289d
1 changed files with 40 additions and 7 deletions
|
@ -2899,18 +2899,22 @@ fn static_assert() {
|
||||||
+ ["lon"] + ["number"]),
|
+ ["lon"] + ["number"]),
|
||||||
("Matrix", "matrix", ["number"] * 6),
|
("Matrix", "matrix", ["number"] * 6),
|
||||||
("PrefixedMatrix", "matrix", ["number"] * 4 + ["lopon"] * 2),
|
("PrefixedMatrix", "matrix", ["number"] * 4 + ["lopon"] * 2),
|
||||||
|
("Translate", "translate", ["lop", "optional_lop"]),
|
||||||
("Translate3D", "translate3d", ["lop", "lop", "length"]),
|
("Translate3D", "translate3d", ["lop", "lop", "length"]),
|
||||||
("TranslateX", "translatex", ["lop"]),
|
("TranslateX", "translatex", ["lop"]),
|
||||||
("TranslateY", "translatey", ["lop"]),
|
("TranslateY", "translatey", ["lop"]),
|
||||||
("TranslateZ", "translatez", ["length"]),
|
("TranslateZ", "translatez", ["length"]),
|
||||||
("Scale3D", "scale3d", ["number"] * 3),
|
("Scale3D", "scale3d", ["number"] * 3),
|
||||||
|
("Scale", "scale", ["number", "optional_number"]),
|
||||||
("ScaleX", "scalex", ["number"]),
|
("ScaleX", "scalex", ["number"]),
|
||||||
("ScaleY", "scaley", ["number"]),
|
("ScaleY", "scaley", ["number"]),
|
||||||
("ScaleZ", "scalez", ["number"]),
|
("ScaleZ", "scalez", ["number"]),
|
||||||
|
("Rotate", "rotate", ["angle"]),
|
||||||
("Rotate3D", "rotate3d", ["number"] * 3 + ["angle"]),
|
("Rotate3D", "rotate3d", ["number"] * 3 + ["angle"]),
|
||||||
("RotateX", "rotatex", ["angle"]),
|
("RotateX", "rotatex", ["angle"]),
|
||||||
("RotateY", "rotatey", ["angle"]),
|
("RotateY", "rotatey", ["angle"]),
|
||||||
("RotateZ", "rotatez", ["angle"]),
|
("RotateZ", "rotatez", ["angle"]),
|
||||||
|
("Skew", "skew", ["angle", "optional_angle"]),
|
||||||
("SkewX", "skewx", ["angle"]),
|
("SkewX", "skewx", ["angle"]),
|
||||||
("SkewY", "skewy", ["angle"]),
|
("SkewY", "skewy", ["angle"]),
|
||||||
("Perspective", "perspective", ["length"]),
|
("Perspective", "perspective", ["length"]),
|
||||||
|
@ -2920,6 +2924,7 @@ fn static_assert() {
|
||||||
%>
|
%>
|
||||||
<%def name="transform_function_arm(name, keyword, items)">
|
<%def name="transform_function_arm(name, keyword, items)">
|
||||||
<%
|
<%
|
||||||
|
has_optional = items[-1].startswith("optional_")
|
||||||
pattern = None
|
pattern = None
|
||||||
if keyword == "matrix3d":
|
if keyword == "matrix3d":
|
||||||
# m11: number1, m12: number2, ..
|
# m11: number1, m12: number2, ..
|
||||||
|
@ -2959,19 +2964,36 @@ fn static_assert() {
|
||||||
}
|
}
|
||||||
%>
|
%>
|
||||||
::values::generics::transform::TransformOperation::${name}${pattern} => {
|
::values::generics::transform::TransformOperation::${name}${pattern} => {
|
||||||
bindings::Gecko_CSSValue_SetFunction(gecko_value, ${len(items) + 1});
|
% if has_optional:
|
||||||
|
let optional_present = ${items[-1] + str(len(items))}.is_some();
|
||||||
|
let len = if optional_present {
|
||||||
|
${len(items) + 1}
|
||||||
|
} else {
|
||||||
|
${len(items)}
|
||||||
|
};
|
||||||
|
% else:
|
||||||
|
let len = ${len(items) + 1};
|
||||||
|
% endif
|
||||||
|
bindings::Gecko_CSSValue_SetFunction(gecko_value, len);
|
||||||
bindings::Gecko_CSSValue_SetKeyword(
|
bindings::Gecko_CSSValue_SetKeyword(
|
||||||
bindings::Gecko_CSSValue_GetArrayItem(gecko_value, 0),
|
bindings::Gecko_CSSValue_GetArrayItem(gecko_value, 0),
|
||||||
structs::nsCSSKeyword::eCSSKeyword_${keyword}
|
structs::nsCSSKeyword::eCSSKeyword_${keyword}
|
||||||
);
|
);
|
||||||
% for index, item in enumerate(items):
|
% for index, item in enumerate(items):
|
||||||
|
<% replaced_item = item.replace("optional_", "") %>
|
||||||
|
% if item.startswith("optional"):
|
||||||
|
if let Some(${replaced_item + str(index + 1)}) = ${item + str(index + 1)} {
|
||||||
|
% endif
|
||||||
% if item == "list":
|
% if item == "list":
|
||||||
debug_assert!(!${item}${index + 1}.0.is_empty());
|
debug_assert!(!${item}${index + 1}.0.is_empty());
|
||||||
% endif
|
% endif
|
||||||
${css_value_setters[item] % (
|
${css_value_setters[replaced_item] % (
|
||||||
"bindings::Gecko_CSSValue_GetArrayItem(gecko_value, %d)" % (index + 1),
|
"bindings::Gecko_CSSValue_GetArrayItem(gecko_value, %d)" % (index + 1),
|
||||||
item + str(index + 1)
|
replaced_item + str(index + 1)
|
||||||
)};
|
)};
|
||||||
|
% if item.startswith("optional"):
|
||||||
|
}
|
||||||
|
% endif
|
||||||
% endfor
|
% endfor
|
||||||
}
|
}
|
||||||
</%def>
|
</%def>
|
||||||
|
@ -3008,7 +3030,6 @@ fn static_assert() {
|
||||||
% for servo, gecko, format in transform_functions:
|
% for servo, gecko, format in transform_functions:
|
||||||
${transform_function_arm(servo, gecko, format)}
|
${transform_function_arm(servo, gecko, format)}
|
||||||
% endfor
|
% endfor
|
||||||
_ => unimplemented!()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3101,9 +3122,21 @@ fn static_assert() {
|
||||||
% elif keyword == "interpolatematrix" or keyword == "accumulatematrix":
|
% elif keyword == "interpolatematrix" or keyword == "accumulatematrix":
|
||||||
${field_names[index]}:
|
${field_names[index]}:
|
||||||
% endif
|
% endif
|
||||||
${css_value_getters[item] % (
|
<%
|
||||||
"bindings::Gecko_CSSValue_GetArrayItemConst(gecko_value, %d)" % (index + 1)
|
getter = css_value_getters[item.replace("optional_", "")] % (
|
||||||
)},
|
"bindings::Gecko_CSSValue_GetArrayItemConst(gecko_value, %d)" % (index + 1)
|
||||||
|
)
|
||||||
|
%>
|
||||||
|
% if item.startswith("optional_"):
|
||||||
|
if (**gecko_value.mValue.mArray.as_ref()).mCount == ${index + 1} {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(${getter})
|
||||||
|
}
|
||||||
|
% else:
|
||||||
|
${getter}
|
||||||
|
% endif
|
||||||
|
,
|
||||||
% endfor
|
% endfor
|
||||||
${post_symbols}
|
${post_symbols}
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue