blob: 3bcd4386a1e7e4efba2f01ea68daced067f4a953 [file] [log] [blame]
{% from 'macros.tmpl' import license %}
{% from 'fields/field.tmpl' import getter_expression, setter_expression, fieldwise_copy, fieldwise_diff %}
{{license()}}
#include "core/ComputedStyleBase.h"
#include "platform/wtf/SizeAssertions.h"
namespace blink {
struct SameSizeAsComputedStyleBase {
{% if computed_style.subgroups is defined %}
void* dataRefs[{{computed_style.subgroups|length}}];
{% endif %}
{% for field in computed_style.fields|rejectattr("is_bit_field") %}
{{field.type_name}} {{field.name}};
{% endfor %}
unsigned m_bit_fields[{{computed_style.num_32_bit_words_for_bit_fields}}];
};
// If this fails, the packing algorithm in make_computed_style_base.py has
// failed to produce the optimal packed size. To fix, update the algorithm to
// ensure that the buckets are placed so that each takes up at most 1 word.
ASSERT_SIZE(ComputedStyleBase, SameSizeAsComputedStyleBase);
void ComputedStyleBase::InheritFrom(const ComputedStyleBase& other,
IsAtShadowBoundary isAtShadowBoundary) {
{{fieldwise_copy(computed_style, computed_style.all_fields
|selectattr("is_property")
|selectattr("is_inherited")
|list
)|indent(2)}}
}
void ComputedStyleBase::CopyNonInheritedFromCached(
const ComputedStyleBase& other) {
{{fieldwise_copy(computed_style, computed_style.all_fields
|rejectattr("has_custom_compare_and_copy")
|rejectattr("is_inherited")
|list
)|indent(2)}}
}
void ComputedStyleBase::PropagateIndependentInheritedProperties(
const ComputedStyleBase& parentStyle) {
{% for field in computed_style.all_fields if field.is_property and field.is_independent %}
if ({{field.is_inherited_method_name}}())
{{setter_expression(field)}} = parentStyle.{{getter_expression(field)}};
{% endfor %}
}
bool ComputedStyleBase::ScrollAnchorDisablingPropertyChanged(
const ComputedStyleBase& other,
const StyleDifference& diff) const {
{{fieldwise_diff(computed_style, computed_style.all_fields
|selectattr("property_name", "in", ["margin-top", "margin-left", "margin-right", "margin-bottom", "left", "right", "top", "bottom", "padding-top", "padding-left", "padding-right", "padding-bottom"])
|list
)|indent(2)}}
return false;
}
bool ComputedStyleBase::DiffNeedsFullLayoutAndPaintInvalidation(
const ComputedStyleBase& other) const {
{{fieldwise_diff(computed_style, computed_style.all_fields
|selectattr("property_name", "in", ["padding-top", "padding-left", "padding-right", "padding-bottom"])
|list
)|indent(2)}}
return false;
}
} // namespace blink