{% from "macros.tmpl" import wrap_with_condition, license -%} {{ license() }} #include "config.h" #include "core/css/resolver/StyleBuilder.h" #include "StyleBuilderFunctions.h" #include "core/css/CSSPrimitiveValueMappings.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. {%- macro set_value(property) %} {%- if property.svg -%} state.style()->accessSVGStyle()->{{property.setter}} {%- else -%} state.style()->{{property.setter}} {%- endif %} {%- endmacro %} namespace WebCore { {%- for property_id, property in properties.items() if not property.use_handlers_for %} {%- call wrap_with_condition(property.condition) %} {%- set apply_type = property.apply_type %} {%- if not property.custom_initial %} void StyleBuilderFunctions::applyInitial{{property_id}}(StyleResolverState& state) { {%- if property.svg %} {{ set_value(property) }}(SVGRenderStyle::{{property.initial}}()); {%- else %} {{ set_value(property) }}(RenderStyle::{{property.initial}}()); {%- endif %} } {% endif %} {%- if not property.custom_inherit %} void StyleBuilderFunctions::applyInherit{{property_id}}(StyleResolverState& state) { {%- if property.svg %} {{ set_value(property) }}(state.parentStyle()->svgStyle()->{{property.getter}}()); {%- else %} {{ set_value(property) }}(state.parentStyle()->{{property.getter}}()); {%- endif %} } {% endif %} {%- if not property.custom_value %} void StyleBuilderFunctions::applyValue{{property_id}}(StyleResolverState& state, CSSValue* value) { {%- if property.converter %} {{ set_value(property) }}(StyleBuilderConverter::{{property.converter}}(state, value)); {%- else %} {{ set_value(property) }}(static_cast<{{property.type_name}}>(*toCSSPrimitiveValue(value))); {%- endif %} } {% endif %} {%- endcall %} {%- endfor %} bool StyleBuilder::applyProperty(CSSPropertyID property, StyleResolverState& state, CSSValue* value, bool isInitial, bool isInherit) { switch(property) { {%- for property_id, property in properties.items() %} {%- set used_property = properties[property.use_handlers_for] or property %} {%- set used_property_id = used_property.property_id %} {%- call wrap_with_condition(used_property.condition) %} 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 true; {%- endcall %} {% endfor %} default: return false; } } } // namespace WebCore