1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
{% from 'macros.tmpl' import license %}
{{license()}}
#include "core/css/resolver/StyleBuilder.h"
#include "StyleBuilderFunctions.h"
#include "core/css/CSSProperty.h"
#include "core/css/resolver/StyleResolverState.h"
// FIXME: currently we're just generating a switch statement, but we should
// test other variations for performance once we have more properties here.
namespace blink {
void StyleBuilder::applyProperty(CSSPropertyID property, StyleResolverState& state, CSSValue* value, bool isInitial, bool isInherit) {
switch(property) {
{% for property_id, property in properties.items()
if property.should_declare_functions or property.use_handlers_for %}
{% set used_property = properties[property.use_handlers_for] or property %}
{% set used_property_id = used_property.property_id %}
case {{property_id}}:
if (isInitial)
StyleBuilderFunctions::applyInitial{{used_property_id}}(state);
else if (isInherit)
StyleBuilderFunctions::applyInherit{{used_property_id}}(state);
else
StyleBuilderFunctions::applyValue{{used_property_id}}(state, value);
return;
{% endfor %}
case CSSPropertyVariable:
ASSERT(!isInitial && !isInherit);
StyleBuilderFunctions::applyValueCSSPropertyVariable(state, value);
return;
{% for property_id, property in properties.items() if property.direction_aware %}
case {{property_id}}:
{% endfor %}
{
CSSPropertyID resolvedProperty = CSSProperty::resolveDirectionAwareProperty(property, state.style()->direction(), state.style()->getWritingMode());
ASSERT(resolvedProperty != property);
applyProperty(resolvedProperty, state, value);
return;
}
{% for property_id, property in properties.items() if property.builder_skip %}
case {{property_id}}:
{% endfor %}
return;
default:
ASSERT_NOT_REACHED();
}
}
} // namespace blink
|