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