Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 {% from 'macros.tmpl' import license, print_if %} | 1 {% from 'macros.tmpl' import license, print_if %} |
| 2 {% from 'fields/field.tmpl' import encode, getter_expression, declare_storage, f ieldwise_compare %} | 2 {% from 'fields/field.tmpl' import encode, getter_expression, setter_expression, declare_storage, fieldwise_compare, fieldwise_copy, fieldwise_diff %} |
| 3 {% from 'fields/group.tmpl' import define_field_group_class %} | 3 {% from 'fields/group.tmpl' import define_field_group_class %} |
| 4 {{license()}} | 4 {{license()}} |
| 5 | 5 |
| 6 #ifndef ComputedStyleBase_h | 6 #ifndef ComputedStyleBase_h |
| 7 #define ComputedStyleBase_h | 7 #define ComputedStyleBase_h |
| 8 | 8 |
| 9 #include "core/style/ComputedStyleConstants.h" | 9 #include "core/style/ComputedStyleConstants.h" |
| 10 #include "core/CoreExport.h" | 10 #include "core/CoreExport.h" |
| 11 #include "core/style/DataRef.h" | 11 #include "core/style/DataRef.h" |
| 12 #include "core/style/StyleDifference.h" | 12 #include "core/style/StyleDifference.h" |
| 13 #include "platform/wtf/SizeAssertions.h" | |
| 13 {% for path in include_paths %} | 14 {% for path in include_paths %} |
| 14 #include "{{path}}" | 15 #include "{{path}}" |
| 15 {% endfor %} | 16 {% endfor %} |
| 16 | 17 |
| 17 {# Each field template has macros that we can call to generate specific | 18 {# Each field template has macros that we can call to generate specific |
| 18 aspects of the field (e.g. getters, setters). | 19 aspects of the field (e.g. getters, setters). |
| 19 #} | 20 #} |
| 20 {% import 'fields/keyword.tmpl' as keyword %} | 21 {% import 'fields/keyword.tmpl' as keyword %} |
| 21 {% import 'fields/primitive.tmpl' as primitive %} | 22 {% import 'fields/primitive.tmpl' as primitive %} |
| 22 {% import 'fields/monotonic_flag.tmpl' as monotonic_flag %} | 23 {% import 'fields/monotonic_flag.tmpl' as monotonic_flag %} |
| 23 {% import 'fields/storage_only.tmpl' as storage_only %} | 24 {% import 'fields/storage_only.tmpl' as storage_only %} |
| 24 {% import 'fields/external.tmpl' as external %} | 25 {% import 'fields/external.tmpl' as external %} |
| 25 {% from 'fields/field.tmpl' import encode %} | 26 {% from 'fields/field.tmpl' import encode %} |
| 26 {% set field_templates = { | 27 {% set field_templates = { |
| 27 'keyword': keyword, | 28 'keyword': keyword, |
| 28 'primitive': primitive, | 29 'primitive': primitive, |
| 29 'monotonic_flag': monotonic_flag, | 30 'monotonic_flag': monotonic_flag, |
| 30 'storage_only': storage_only, | 31 'storage_only': storage_only, |
| 31 'external': external | 32 'external': external |
| 32 } %} | 33 } %} |
| 33 | 34 |
| 34 namespace blink { | 35 namespace blink { |
| 35 | 36 |
| 37 struct SameSizeAsComputedStyleBase { | |
| 38 {% if computed_style.subgroups is defined %} | |
| 39 void* dataRefs[{{computed_style.subgroups|length}}]; | |
| 40 {% endif %} | |
| 41 {% for field in computed_style.fields|rejectattr("is_bit_field") %} | |
| 42 {{field.type_name}} {{field.name}}; | |
| 43 {% endfor %} | |
| 44 unsigned m_bit_fields[{{computed_style.num_32_bit_words_for_bit_fields}}]; | |
| 45 }; | |
| 46 | |
| 36 // The generated portion of ComputedStyle. For more info, see the header comment | 47 // The generated portion of ComputedStyle. For more info, see the header comment |
| 37 // in ComputedStyle.h. | 48 // in ComputedStyle.h. |
| 38 class CORE_EXPORT ComputedStyleBase { | 49 class CORE_EXPORT ComputedStyleBase { |
| 39 public: | 50 public: |
| 40 inline bool IndependentInheritedEqual(const ComputedStyleBase& o) const { | 51 inline bool IndependentInheritedEqual(const ComputedStyleBase& o) const { |
| 41 return ( | 52 return ( |
| 42 {{fieldwise_compare(computed_style, computed_style.all_fields | 53 {{fieldwise_compare(computed_style, computed_style.all_fields |
| 43 |selectattr("is_property") | 54 |selectattr("is_property") |
| 44 |selectattr("is_inherited") | 55 |selectattr("is_inherited") |
| 45 |selectattr("is_independent") | 56 |selectattr("is_independent") |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 74 |list | 85 |list |
| 75 )|indent(8)}} | 86 )|indent(8)}} |
| 76 true | 87 true |
| 77 ); | 88 ); |
| 78 } | 89 } |
| 79 | 90 |
| 80 enum IsAtShadowBoundary { | 91 enum IsAtShadowBoundary { |
| 81 kAtShadowBoundary, | 92 kAtShadowBoundary, |
| 82 kNotAtShadowBoundary, | 93 kNotAtShadowBoundary, |
| 83 }; | 94 }; |
| 84 void InheritFrom(const ComputedStyleBase& inheritParent, | |
| 85 IsAtShadowBoundary isAtShadowBoundary = kNotAtShadowBoundary) ; | |
| 86 | 95 |
| 87 void CopyNonInheritedFromCached(const ComputedStyleBase& other); | 96 void InheritFrom(const ComputedStyleBase& other, |
| 88 bool DiffNeedsFullLayoutAndPaintInvalidation( | 97 IsAtShadowBoundary isAtShadowBoundary) { |
| 89 const ComputedStyleBase& other) const; | 98 {{fieldwise_copy(computed_style, computed_style.all_fields |
| 90 bool ScrollAnchorDisablingPropertyChanged(const ComputedStyleBase& other, | 99 |selectattr("is_property") |
| 91 const StyleDifference&) const; | 100 |selectattr("is_inherited") |
| 101 |list | |
| 102 )|indent(2)}} | |
|
shend
2017/05/12 01:13:27
indent(4)
nainar
2017/05/12 03:23:47
Done
| |
| 103 } | |
| 104 | |
| 105 void CopyNonInheritedFromCached( | |
| 106 const ComputedStyleBase& other) { | |
| 107 {{fieldwise_copy(computed_style, computed_style.all_fields | |
| 108 |rejectattr("has_custom_compare_and_copy") | |
| 109 |rejectattr("is_inherited") | |
| 110 |list | |
| 111 )|indent(2)}} | |
|
shend
2017/05/12 01:13:27
indent(4)
nainar
2017/05/12 03:23:47
Done.
| |
| 112 } | |
| 92 | 113 |
| 93 // Copies the values of any independent inherited properties from the parent | 114 // Copies the values of any independent inherited properties from the parent |
| 94 // style that are marked as inherited by this style. | 115 // style that are marked as inherited by this style. |
| 95 void PropagateIndependentInheritedProperties( | 116 void PropagateIndependentInheritedProperties( |
| 96 const ComputedStyleBase& parentStyle); | 117 const ComputedStyleBase& parentStyle) { |
| 118 {% for field in computed_style.all_fields if field.is_property and field.is_ independent %} | |
| 119 if ({{field.is_inherited_method_name}}()) | |
| 120 {{setter_expression(field)}} = parentStyle.{{getter_expression(field)}}; | |
| 121 {% endfor %} | |
| 122 } | |
| 123 | |
| 124 bool ScrollAnchorDisablingPropertyChanged( | |
| 125 const ComputedStyleBase& other, | |
| 126 const StyleDifference& diff) const { | |
| 127 {{fieldwise_diff(computed_style, computed_style.all_fields | |
| 128 |selectattr("property_name", "in", ["margin-top", "margin-left", "margin -right", "margin-bottom", "left", "right", "top", "bottom", "padding-top", "padd ing-left", "padding-right", "padding-bottom"]) | |
| 129 |list | |
| 130 )|indent(2)}} | |
|
shend
2017/05/12 01:13:27
indent(4)
nainar
2017/05/12 03:23:47
Done.
| |
| 131 return false; | |
| 132 } | |
| 133 | |
| 134 bool DiffNeedsFullLayoutAndPaintInvalidation( | |
| 135 const ComputedStyleBase& other) const { | |
| 136 {{fieldwise_diff(computed_style, computed_style.all_fields | |
| 137 |selectattr("property_name", "in", ["padding-top", "padding-left", "padd ing-right", "padding-bottom"]) | |
| 138 |list | |
| 139 )|indent(2)}} | |
|
shend
2017/05/12 01:13:27
indent(4)
nainar
2017/05/12 03:23:47
Done.
| |
| 140 return false; | |
| 141 } | |
| 97 | 142 |
| 98 // Fields. | 143 // Fields. |
| 99 // TODO(sashab): Remove initialFoo() static methods and update callers to | 144 // TODO(sashab): Remove initialFoo() static methods and update callers to |
| 100 // use resetFoo(), which can be more efficient. | 145 // use resetFoo(), which can be more efficient. |
| 101 | 146 |
| 102 {% for field in computed_style.all_fields %} | 147 {% for field in computed_style.all_fields %} |
| 103 // {{field.property_name}} | 148 // {{field.property_name}} |
| 104 {{field_templates[field.field_template].decl_public_methods(field)|indent(2)}} | 149 {{field_templates[field.field_template].decl_public_methods(field)|indent(2)}} |
| 105 | 150 |
| 106 {% endfor %} | 151 {% endfor %} |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 143 return static_cast<unsigned>(std::min<float>(width, kMaxForBorderWidth) * | 188 return static_cast<unsigned>(std::min<float>(width, kMaxForBorderWidth) * |
| 144 kBorderWidthDenominator); | 189 kBorderWidthDenominator); |
| 145 } | 190 } |
| 146 | 191 |
| 147 private: | 192 private: |
| 148 {% for field in computed_style.fields %} | 193 {% for field in computed_style.fields %} |
| 149 {{declare_storage(field)}} | 194 {{declare_storage(field)}} |
| 150 {% endfor %} | 195 {% endfor %} |
| 151 }; | 196 }; |
| 152 | 197 |
| 198 // If this fails, the packing algorithm in make_computed_style_base.py has | |
| 199 // failed to produce the optimal packed size. To fix, update the algorithm to | |
| 200 // ensure that the buckets are placed so that each takes up at most 1 word. | |
| 201 ASSERT_SIZE(ComputedStyleBase, SameSizeAsComputedStyleBase); | |
| 202 | |
| 153 } // namespace blink | 203 } // namespace blink |
| 154 | 204 |
| 155 #endif // ComputedStyleBase_h | 205 #endif // ComputedStyleBase_h |
| OLD | NEW |