blob: 12d5ba415a0da98a63beb7505e766fe24bc03316 [file] [log] [blame]
{% from 'macros.tmpl' import license %}
{{license()}}
#include "config.h"
#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 %}
{% for property_id, property in properties.items() if property.direction_aware %}
case {{property_id}}:
{% endfor %}
{
CSSPropertyID resolvedProperty = CSSProperty::resolveDirectionAwareProperty(property, state.style()->direction());
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