servo: Merge #16263 - Make AnimationValue::from_declaration return computed CSS variable (from hiikezoe:handle-css-variables-in-animations); r=Manishearth

This is a PR of https://bugzilla.mozilla.org/show_bug.cgi?id=1326131

In Gecko, we resolve CSS variables when we generate keyframes for each
animations (i.e. when we create script animations, when we create/update CSS
animations). AnimationValue::from_declaration is only called in both cases.

<!-- Please describe your changes on the following line: -->

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors

<!-- Either: -->
- [X] These changes do not require tests because it's for stylo.

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: a7e18560e52d2b29ee2a8cb96b8592aa9df5e1fe

--HG--
extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear
extra : subtree_revision : 82fe2b16dec7132db86d2f71b98defb349febb15
This commit is contained in:
Hiroyuki Ikezoe 2017-04-04 19:26:02 -05:00
Родитель 6e2525b4fd
Коммит 92eea71fe1
1 изменённых файлов: 38 добавлений и 4 удалений

Просмотреть файл

@ -301,7 +301,10 @@ impl AnimationValue {
/// Construct an AnimationValue from a property declaration
pub fn from_declaration(decl: &PropertyDeclaration, context: &Context, initial: &ComputedValues) -> Option<Self> {
use error_reporting::StdoutErrorReporter;
use properties::LonghandId;
use properties::DeclaredValue;
match *decl {
% for prop in data.longhands:
% if prop.animatable:
@ -344,10 +347,41 @@ impl AnimationValue {
% endif
% endfor
}
}
PropertyDeclaration::WithVariables(_, _) => {
// https://bugzilla.mozilla.org/show_bug.cgi?id=1326131
unimplemented!()
},
PropertyDeclaration::WithVariables(id, ref variables) => {
let custom_props = context.style().custom_properties();
let reporter = StdoutErrorReporter;
match id {
% for prop in data.longhands:
% if prop.animatable:
LonghandId::${prop.camel_case} => {
let mut result = None;
::properties::substitute_variables_${prop.ident}_slow(
&variables.css,
variables.first_token_type,
&variables.url_data,
variables.from_shorthand,
&custom_props,
|v| {
let declaration = match *v {
DeclaredValue::Value(value) => {
PropertyDeclaration::${prop.camel_case}(value.clone())
},
DeclaredValue::CSSWideKeyword(keyword) => {
PropertyDeclaration::CSSWideKeyword(id, keyword)
},
DeclaredValue::WithVariables(_) => unreachable!(),
};
result = AnimationValue::from_declaration(&declaration, context, initial);
},
&reporter);
result
},
% else:
LonghandId::${prop.camel_case} => None,
% endif
% endfor
}
},
_ => None // non animatable properties will get included because of shorthands. ignore.
}