Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(885)

Side by Side Diff: Source/build/scripts/templates/StyleBuilderFunctions.cpp.tmpl

Issue 236673002: Simplify whitespace handling in build/ Jinja templates (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: One more FIXME Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 {% from "macros.tmpl" import lower_first -%} 1 {% from "macros.tmpl" import lower_first %}
2
3 {# 2 {#
4 This file is for property handlers which use the templating engine to 3 This file is for property handlers which use the templating engine to
5 reduce (handwritten) code duplication. 4 reduce (handwritten) code duplication.
6 5
7 The `properties' dict can be used to access a property's parameters in 6 The `properties' dict can be used to access a property's parameters in
8 jinja2 templates (i.e. setter, getter, initial, type_name) 7 jinja2 templates (i.e. setter, getter, initial, type_name)
9 -#} 8 #}
10
11 #include "config.h" 9 #include "config.h"
12 #include "StyleBuilderFunctions.h" 10 #include "StyleBuilderFunctions.h"
13 11
14 #include "CSSValueKeywords.h" 12 #include "CSSValueKeywords.h"
15 #include "core/animation/css/CSSAnimationDataList.h" 13 #include "core/animation/css/CSSAnimationDataList.h"
16 #include "core/css/BasicShapeFunctions.h" 14 #include "core/css/BasicShapeFunctions.h"
17 #include "core/css/CSSPrimitiveValueMappings.h" 15 #include "core/css/CSSPrimitiveValueMappings.h"
18 #include "core/css/Pair.h" 16 #include "core/css/Pair.h"
19 #include "core/css/resolver/StyleResolverState.h" 17 #include "core/css/resolver/StyleResolverState.h"
20 18
21 19 {# FIXME: factor macros out into a separate library #}
22 {%- macro declare_initial_function(property_id) -%} 20 {% macro declare_initial_function(property_id) %}
23 void StyleBuilderFunctions::applyInitial{{property_id}}(StyleResolverState& stat e) 21 void StyleBuilderFunctions::applyInitial{{property_id}}(StyleResolverState& stat e)
24 {%- endmacro %} 22 {%- endmacro %}
25 23 {% macro declare_inherit_function(property_id) %}
26 {%- macro declare_inherit_function(property_id) -%}
27 void StyleBuilderFunctions::applyInherit{{property_id}}(StyleResolverState& stat e) 24 void StyleBuilderFunctions::applyInherit{{property_id}}(StyleResolverState& stat e)
28 {%- endmacro %} 25 {%- endmacro %}
29 26 {% macro declare_value_function(property_id) %}
30 {%- macro declare_value_function(property_id) -%}
31 void StyleBuilderFunctions::applyValue{{property_id}}(StyleResolverState& state, CSSValue* value) 27 void StyleBuilderFunctions::applyValue{{property_id}}(StyleResolverState& state, CSSValue* value)
32 {%- endmacro %} 28 {%- endmacro %}
33
34 // FIXME: This is duplicated in StyleBuilder.cpp.tmpl, but we'll move the 29 // FIXME: This is duplicated in StyleBuilder.cpp.tmpl, but we'll move the
35 // function definitions there over to here later. 30 // function definitions there over to here later.
36 {%- macro set_value(property) %} 31 {% macro set_value(property) %}
37 {%- if property.svg -%} 32 {% if property.svg %}
38 state.style()->accessSVGStyle()->{{property.setter}} 33 state.style()->accessSVGStyle()->{{property.setter}}
39 {%- else -%} 34 {%- else %}
40 state.style()->{{property.setter}} 35 state.style()->{{property.setter}}
41 {%- endif -%} 36 {%- endif %}
42 {%- endmacro %} 37 {% endmacro %}
43 38
44 namespace WebCore { 39 namespace WebCore {
40 {# FIXME: remove excess newline #}
45 41
46 {%- macro apply_animation(property_id, attribute, animation) %} 42
47 {{ declare_initial_function(property_id) }} 43 {% macro apply_animation(property_id, attribute, animation) %}
44 {{declare_initial_function(property_id)}}
48 { 45 {
49 CSSAnimationDataList* list = state.style()->access{{animation}}(); 46 CSSAnimationDataList* list = state.style()->access{{animation}}();
50 if (list->isEmpty()) 47 if (list->isEmpty())
51 list->append(CSSAnimationData::create()); 48 list->append(CSSAnimationData::create());
52 list->animation(0)->set{{attribute}}(CSSAnimationData::initialAnimation{{att ribute}}()); 49 list->animation(0)->set{{attribute}}(CSSAnimationData::initialAnimation{{att ribute}}());
53 {%- if property_id == "CSSPropertyWebkitTransitionProperty" %} 50 {% if property_id == "CSSPropertyWebkitTransitionProperty" %}
54 list->animation(0)->setAnimationMode(CSSAnimationData::AnimateAll); 51 list->animation(0)->setAnimationMode(CSSAnimationData::AnimateAll);
55 {%- endif %} 52 {% endif %}
56 for (size_t i = 1; i < list->size(); ++i) 53 for (size_t i = 1; i < list->size(); ++i)
57 list->animation(i)->clear{{attribute}}(); 54 list->animation(i)->clear{{attribute}}();
58 } 55 }
59 56
60 {{ declare_inherit_function(property_id) }} 57 {{declare_inherit_function(property_id)}}
61 { 58 {
62 CSSAnimationDataList* list = state.style()->access{{animation}}(); 59 CSSAnimationDataList* list = state.style()->access{{animation}}();
63 const CSSAnimationDataList* parentList = state.parentStyle()->{{animation|lo wer}}(); 60 const CSSAnimationDataList* parentList = state.parentStyle()->{{animation|lo wer}}();
64 size_t i = 0, parentSize = parentList ? parentList->size() : 0; 61 size_t i = 0, parentSize = parentList ? parentList->size() : 0;
65 for ( ; i < parentSize && parentList->animation(i)->is{{attribute}}Set(); ++ i) { 62 for ( ; i < parentSize && parentList->animation(i)->is{{attribute}}Set(); ++ i) {
66 ASSERT(list->size() >= i); 63 ASSERT(list->size() >= i);
67 if (list->size() == i) 64 if (list->size() == i)
68 list->append(CSSAnimationData::create()); 65 list->append(CSSAnimationData::create());
69 list->animation(i)->set{{attribute}}(parentList->animation(i)->{{lower_f irst(attribute)}}()); 66 list->animation(i)->set{{attribute}}(parentList->animation(i)->{{lower_f irst(attribute)}}());
70 {%- if property_id == "CSSPropertyWebkitTransitionProperty" %} 67 {% if property_id == "CSSPropertyWebkitTransitionProperty" %}
71 list->animation(i)->setAnimationMode(parentList->animation(i)->anima tionMode()); 68 list->animation(i)->setAnimationMode(parentList->animation(i)->anima tionMode());
72 {%- endif %} 69 {% endif %}
73 } 70 }
74 71
75 // Reset any remaining animations to not have the property set. 72 // Reset any remaining animations to not have the property set.
76 for ( ; i < list->size(); ++i) 73 for ( ; i < list->size(); ++i)
77 list->animation(i)->clear{{attribute}}(); 74 list->animation(i)->clear{{attribute}}();
78 } 75 }
79 76
80 {{ declare_value_function(property_id) }} 77 {{declare_value_function(property_id)}}
81 { 78 {
82 CSSAnimationDataList* list = state.style()->access{{animation}}(); 79 CSSAnimationDataList* list = state.style()->access{{animation}}();
83 size_t childIndex = 0; 80 size_t childIndex = 0;
84 if (value->isValueList()) { 81 if (value->isValueList()) {
85 // Walk each value and put it into an animation, creating new animations as needed. 82 // Walk each value and put it into an animation, creating new animations as needed.
86 for (CSSValueListIterator i = value; i.hasMore(); i.advance()) { 83 for (CSSValueListIterator i = value; i.hasMore(); i.advance()) {
87 ASSERT(list->size() >= childIndex); 84 ASSERT(list->size() >= childIndex);
88 if (list->size() == childIndex) 85 if (list->size() == childIndex)
89 list->append(CSSAnimationData::create()); 86 list->append(CSSAnimationData::create());
90 state.styleMap().mapAnimation{{attribute}}(list->animation(childInde x), i.value()); 87 state.styleMap().mapAnimation{{attribute}}(list->animation(childInde x), i.value());
91 ++childIndex; 88 ++childIndex;
92 } 89 }
93 } else { 90 } else {
94 if (list->isEmpty()) 91 if (list->isEmpty())
95 list->append(CSSAnimationData::create()); 92 list->append(CSSAnimationData::create());
96 state.styleMap().mapAnimation{{attribute}}(list->animation(childIndex), value); 93 state.styleMap().mapAnimation{{attribute}}(list->animation(childIndex), value);
97 childIndex = 1; 94 childIndex = 1;
98 } 95 }
99 for ( ; childIndex < list->size(); ++childIndex) { 96 for ( ; childIndex < list->size(); ++childIndex) {
100 // Reset all remaining animations to not have the property set. 97 // Reset all remaining animations to not have the property set.
101 list->animation(childIndex)->clear{{attribute}}(); 98 list->animation(childIndex)->clear{{attribute}}();
102 } 99 }
103 } 100 }
104 {%- endmacro %} 101 {% endmacro %}
102 {{apply_animation('CSSPropertyWebkitAnimationDelay', 'Delay', 'Animations')}}
103 {{apply_animation('CSSPropertyWebkitAnimationDirection', 'Direction', 'Animation s')}}
104 {{apply_animation('CSSPropertyWebkitAnimationDuration', 'Duration', 'Animations' )}}
105 {{apply_animation('CSSPropertyWebkitAnimationFillMode', 'FillMode', 'Animations' )}}
106 {{apply_animation('CSSPropertyWebkitAnimationIterationCount', 'IterationCount', 'Animations')}}
107 {{apply_animation('CSSPropertyWebkitAnimationName', 'Name', 'Animations')}}
108 {{apply_animation('CSSPropertyWebkitAnimationPlayState', 'PlayState', 'Animation s')}}
109 {{apply_animation('CSSPropertyWebkitAnimationTimingFunction', 'TimingFunction', 'Animations')}}
110 {{apply_animation('CSSPropertyWebkitTransitionDelay', 'Delay', 'Transitions')}}
111 {{apply_animation('CSSPropertyWebkitTransitionDuration', 'Duration', 'Transition s')}}
112 {{apply_animation('CSSPropertyWebkitTransitionProperty', 'Property', 'Transition s')}}
113 {{apply_animation('CSSPropertyWebkitTransitionTimingFunction', 'TimingFunction', 'Transitions')}}
105 114
106 {{ apply_animation("CSSPropertyWebkitAnimationDelay", "Delay", "Animations") }} 115 {% macro apply_auto(property_id, auto_getter=none, auto_setter=none, auto_identi ty='CSSValueAuto', compute_length=false) %}
107 {{ apply_animation("CSSPropertyWebkitAnimationDirection", "Direction", "Animatio ns") }} 116 {% set property = properties[property_id] %}
108 {{ apply_animation("CSSPropertyWebkitAnimationDuration", "Duration", "Animations ") }} 117 {% set auto_getter = auto_getter or 'hasAuto' + property.camel_case_name %}
109 {{ apply_animation("CSSPropertyWebkitAnimationFillMode", "FillMode", "Animations ") }} 118 {% set auto_setter = auto_setter or 'setHasAuto' + property.camel_case_name %}
110 {{ apply_animation("CSSPropertyWebkitAnimationIterationCount", "IterationCount", "Animations") }} 119 {{declare_initial_function(property_id)}}
111 {{ apply_animation("CSSPropertyWebkitAnimationName", "Name", "Animations") }}
112 {{ apply_animation("CSSPropertyWebkitAnimationPlayState", "PlayState", "Animatio ns") }}
113 {{ apply_animation("CSSPropertyWebkitAnimationTimingFunction", "TimingFunction", "Animations") }}
114 {{ apply_animation("CSSPropertyWebkitTransitionDelay", "Delay", "Transitions") } }
115 {{ apply_animation("CSSPropertyWebkitTransitionDuration", "Duration", "Transitio ns") }}
116 {{ apply_animation("CSSPropertyWebkitTransitionProperty", "Property", "Transitio ns") }}
117 {{ apply_animation("CSSPropertyWebkitTransitionTimingFunction", "TimingFunction" , "Transitions") }}
118
119 {%- macro apply_auto(property_id, auto_getter=none, auto_setter=none, auto_ident ity="CSSValueAuto", compute_length=false) %}
120 {%- set property = properties[property_id] %}
121 {%- set auto_getter = auto_getter or "hasAuto" + property.camel_case_name %}
122 {%- set auto_setter = auto_setter or "setHasAuto" + property.camel_case_name %}
123 {{ declare_initial_function(property_id) }}
124 { 120 {
125 state.style()->{{auto_setter}}(); 121 state.style()->{{auto_setter}}();
126 } 122 }
127 123
128 {{ declare_inherit_function(property_id) }} 124 {{declare_inherit_function(property_id)}}
129 { 125 {
130 if (state.parentStyle()->{{auto_getter}}()) 126 if (state.parentStyle()->{{auto_getter}}())
131 state.style()->{{auto_setter}}(); 127 state.style()->{{auto_setter}}();
132 else 128 else
133 {{ set_value(property) }}(state.parentStyle()->{{property.getter}}()); 129 {{set_value(property)}}(state.parentStyle()->{{property.getter}}());
134 } 130 }
135 131
136 {{ declare_value_function(property_id) }} 132 {{declare_value_function(property_id)}}
137 { 133 {
138 if (!value->isPrimitiveValue()) 134 if (!value->isPrimitiveValue())
139 return; 135 return;
140 136
141 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 137 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value);
142 if (primitiveValue->getValueID() == {{auto_identity}}) 138 if (primitiveValue->getValueID() == {{auto_identity}})
143 state.style()->{{auto_setter}}(); 139 state.style()->{{auto_setter}}();
144 else 140 else
145 {%- if compute_length %} 141 {% if compute_length %}
146 {{ set_value(property) }}(primitiveValue->computeLength<{{property.type_ name}}>(state.cssToLengthConversionData())); 142 {{set_value(property)}}(primitiveValue->computeLength<{{property.type_na me}}>(state.cssToLengthConversionData()));
147 {%- else %} 143 {% else %}
148 {{ set_value(property) }}(*primitiveValue); 144 {{set_value(property)}}(*primitiveValue);
149 {%- endif %} 145 {% endif %}
150 } 146 }
151 {%- endmacro %} 147 {% endmacro %}
148 {{apply_auto('CSSPropertyOrphans')}}
149 {{apply_auto('CSSPropertyWebkitColumnCount')}}
150 {{apply_auto('CSSPropertyWebkitColumnGap', auto_getter='hasNormalColumnGap', aut o_setter='setHasNormalColumnGap', auto_identity='CSSValueNormal', compute_length =true)}}
151 {{apply_auto('CSSPropertyWebkitColumnWidth', compute_length=true)}}
152 {{apply_auto('CSSPropertyWidows')}}
153 {{apply_auto('CSSPropertyZIndex')}}
152 154
153 {{ apply_auto("CSSPropertyOrphans") }} 155 {% macro apply_border_image_modifier(property_id, modifier_type) %}
154 {{ apply_auto("CSSPropertyWebkitColumnCount") }} 156 {% set is_mask_box = 'MaskBox' in property_id %}
155 {{ apply_auto("CSSPropertyWebkitColumnGap", auto_getter="hasNormalColumnGap", au to_setter="setHasNormalColumnGap", auto_identity="CSSValueNormal", compute_lengt h=true) }} 157 {% set getter = 'maskBoxImage' if is_mask_box else 'borderImage' %}
156 {{ apply_auto("CSSPropertyWebkitColumnWidth", compute_length=true) }} 158 {% set setter = 'setMaskBoxImage' if is_mask_box else 'setBorderImage' %}
157 {{ apply_auto("CSSPropertyWidows") }}
158 {{ apply_auto("CSSPropertyZIndex") }}
159
160 {%- macro apply_border_image_modifier(property_id, modifier_type) %}
161 {%- set is_mask_box = "MaskBox" in property_id %}
162 {%- set getter = "maskBoxImage" if is_mask_box else "borderImage" %}
163 {%- set setter = "setMaskBoxImage" if is_mask_box else "setBorderImage" %}
164 {{ declare_initial_function(property_id) }} 159 {{ declare_initial_function(property_id) }}
165 { 160 {
166 NinePieceImage image(state.style()->{{getter}}()); 161 NinePieceImage image(state.style()->{{getter}}());
167 {%- if modifier_type == "Outset" %} 162 {% if modifier_type == 'Outset' %}
168 image.setOutset(Length(0, Fixed)); 163 image.setOutset(Length(0, Fixed));
169 {%- elif modifier_type == "Repeat" %} 164 {% elif modifier_type == 'Repeat' %}
170 image.setHorizontalRule(StretchImageRule); 165 image.setHorizontalRule(StretchImageRule);
171 image.setVerticalRule(StretchImageRule); 166 image.setVerticalRule(StretchImageRule);
172 {%- elif modifier_type == "Slice" and is_mask_box %} 167 {% elif modifier_type == 'Slice' and is_mask_box %}
173 // Masks have a different initial value for slices. Preserve the value of 0 for backwards compatibility. 168 // Masks have a different initial value for slices. Preserve the value of 0 for backwards compatibility.
174 image.setImageSlices(LengthBox({{ (["Length(0, Fixed)"]*4) | join(", ") }})) ; 169 image.setImageSlices(LengthBox({{ (['Length(0, Fixed)']*4) | join(', ') }})) ;
175 image.setFill(true); 170 image.setFill(true);
176 {%- elif modifier_type == "Slice" and not is_mask_box %} 171 {% elif modifier_type == 'Slice' and not is_mask_box %}
177 image.setImageSlices(LengthBox({{ (["Length(100, Percent)"]*4) | join(", ") }})); 172 image.setImageSlices(LengthBox({{ (['Length(100, Percent)']*4) | join(', ') }}));
178 image.setFill(false); 173 image.setFill(false);
179 {%- elif modifier_type == "Width" %} 174 {% elif modifier_type == 'Width' %}
180 // Masks have a different initial value for widths. Preserve the value of 'a uto' for backwards compatibility. 175 // Masks have a different initial value for widths. Preserve the value of 'a uto' for backwards compatibility.
181 image.setBorderSlices({{ "Length(Auto)" if is_mask_box else "1.0" }}); 176 image.setBorderSlices({{ 'Length(Auto)' if is_mask_box else '1.0' }});
182 {%- endif %} 177 {% endif %}
183 state.style()->{{setter}}(image); 178 state.style()->{{setter}}(image);
184 } 179 }
185 180
186 {{ declare_inherit_function(property_id) }} 181 {{declare_inherit_function(property_id)}}
187 { 182 {
188 NinePieceImage image(state.style()->{{getter}}()); 183 NinePieceImage image(state.style()->{{getter}}());
189 {%- if modifier_type == "Outset" %} 184 {% if modifier_type == 'Outset' %}
190 image.copyOutsetFrom(state.parentStyle()->{{getter}}()); 185 image.copyOutsetFrom(state.parentStyle()->{{getter}}());
191 {%- elif modifier_type == "Repeat" %} 186 {% elif modifier_type == 'Repeat' %}
192 image.copyRepeatFrom(state.parentStyle()->{{getter}}()); 187 image.copyRepeatFrom(state.parentStyle()->{{getter}}());
193 {%- elif modifier_type == "Slice" %} 188 {% elif modifier_type == 'Slice' %}
194 image.copyImageSlicesFrom(state.parentStyle()->{{getter}}()); 189 image.copyImageSlicesFrom(state.parentStyle()->{{getter}}());
195 {%- elif modifier_type == "Width" %} 190 {% elif modifier_type == 'Width' %}
196 image.copyBorderSlicesFrom(state.parentStyle()->{{getter}}()); 191 image.copyBorderSlicesFrom(state.parentStyle()->{{getter}}());
197 {%- endif %} 192 {% endif %}
198 state.style()->{{setter}}(image); 193 state.style()->{{setter}}(image);
199 } 194 }
200 195
201 {{ declare_value_function(property_id) }} 196 {{declare_value_function(property_id)}}
202 { 197 {
203 NinePieceImage image(state.style()->{{getter}}()); 198 NinePieceImage image(state.style()->{{getter}}());
204 {%- if modifier_type == "Outset" %} 199 {% if modifier_type == 'Outset' %}
205 image.setOutset(state.styleMap().mapNinePieceImageQuad(value)); 200 image.setOutset(state.styleMap().mapNinePieceImageQuad(value));
206 {%- elif modifier_type == "Repeat" %} 201 {% elif modifier_type == 'Repeat' %}
207 state.styleMap().mapNinePieceImageRepeat(value, image); 202 state.styleMap().mapNinePieceImageRepeat(value, image);
208 {%- elif modifier_type == "Slice" %} 203 {% elif modifier_type == 'Slice' %}
209 state.styleMap().mapNinePieceImageSlice(value, image); 204 state.styleMap().mapNinePieceImageSlice(value, image);
210 {%- elif modifier_type == "Width" %} 205 {% elif modifier_type == 'Width' %}
211 image.setBorderSlices(state.styleMap().mapNinePieceImageQuad(value)); 206 image.setBorderSlices(state.styleMap().mapNinePieceImageQuad(value));
212 {%- endif %} 207 {% endif %}
213 state.style()->{{setter}}(image); 208 state.style()->{{setter}}(image);
214 } 209 }
215 {%- endmacro %} 210 {% endmacro %}
211 {{apply_border_image_modifier('CSSPropertyBorderImageOutset', 'Outset')}}
212 {{apply_border_image_modifier('CSSPropertyBorderImageRepeat', 'Repeat')}}
213 {{apply_border_image_modifier('CSSPropertyBorderImageSlice', 'Slice')}}
214 {{apply_border_image_modifier('CSSPropertyBorderImageWidth', 'Width')}}
215 {{apply_border_image_modifier('CSSPropertyWebkitMaskBoxImageOutset', 'Outset')}}
216 {{apply_border_image_modifier('CSSPropertyWebkitMaskBoxImageRepeat', 'Repeat')}}
217 {{apply_border_image_modifier('CSSPropertyWebkitMaskBoxImageSlice', 'Slice')}}
218 {{apply_border_image_modifier('CSSPropertyWebkitMaskBoxImageWidth', 'Width')}}
216 219
217 {{ apply_border_image_modifier("CSSPropertyBorderImageOutset", "Outset") }} 220 {% macro apply_value_border_image_source(property_id) %}
218 {{ apply_border_image_modifier("CSSPropertyBorderImageRepeat", "Repeat") }} 221 {{declare_value_function(property_id)}}
219 {{ apply_border_image_modifier("CSSPropertyBorderImageSlice", "Slice") }} 222 {
220 {{ apply_border_image_modifier("CSSPropertyBorderImageWidth", "Width") }} 223 {% set property = properties[property_id] %}
221 {{ apply_border_image_modifier("CSSPropertyWebkitMaskBoxImageOutset", "Outset") }} 224 {{set_value(property)}}(state.styleImage({{property_id}}, value));
222 {{ apply_border_image_modifier("CSSPropertyWebkitMaskBoxImageRepeat", "Repeat") }} 225 }
223 {{ apply_border_image_modifier("CSSPropertyWebkitMaskBoxImageSlice", "Slice") }} 226 {% endmacro %}
224 {{ apply_border_image_modifier("CSSPropertyWebkitMaskBoxImageWidth", "Width") }} 227 {{apply_value_border_image_source('CSSPropertyBorderImageSource')}}
228 {{apply_value_border_image_source('CSSPropertyWebkitMaskBoxImageSource')}}
225 229
226 {%- macro apply_value_border_image_source(property_id) %} 230 {% macro apply_color(property_id, initial_color='StyleColor::currentColor') %}
227 {{ declare_value_function(property_id) }} 231 {% set property = properties[property_id] %}
228 { 232 {% set visited_link_setter = 'setVisitedLink' + property.camel_case_name %}
229 {%- set property = properties[property_id] %} 233 {{declare_initial_function(property_id)}}
230 {{ set_value(property) }}(state.styleImage({{property_id}}, value));
231 }
232 {%- endmacro %}
233
234 {{ apply_value_border_image_source("CSSPropertyBorderImageSource") }}
235 {{ apply_value_border_image_source("CSSPropertyWebkitMaskBoxImageSource") }}
236
237 {%- macro apply_color(property_id, initial_color="StyleColor::currentColor") %}
238 {%- set property = properties[property_id] %}
239 {%- set visited_link_setter = "setVisitedLink" + property.camel_case_name %}
240 {{ declare_initial_function(property_id) }}
241 { 234 {
242 StyleColor color = {{initial_color}}(); 235 StyleColor color = {{initial_color}}();
243 if (state.applyPropertyToRegularStyle()) 236 if (state.applyPropertyToRegularStyle())
244 {{ set_value(property) }}(color); 237 {{set_value(property)}}(color);
245 if (state.applyPropertyToVisitedLinkStyle()) 238 if (state.applyPropertyToVisitedLinkStyle())
246 state.style()->{{visited_link_setter}}(color); 239 state.style()->{{visited_link_setter}}(color);
247 } 240 }
248 241
249 {{ declare_inherit_function(property_id) }} 242 {{declare_inherit_function(property_id)}}
250 { 243 {
251 // Visited link style can never explicitly inherit from parent visited link style so no separate getters are needed. 244 // Visited link style can never explicitly inherit from parent visited link style so no separate getters are needed.
252 StyleColor color = state.parentStyle()->{{property.getter}}(); 245 StyleColor color = state.parentStyle()->{{property.getter}}();
253 Color resolvedColor = color.resolve(state.parentStyle()->color()); 246 Color resolvedColor = color.resolve(state.parentStyle()->color());
254 if (state.applyPropertyToRegularStyle()) 247 if (state.applyPropertyToRegularStyle())
255 {{ set_value(property) }}(resolvedColor); 248 {{set_value(property)}}(resolvedColor);
256 if (state.applyPropertyToVisitedLinkStyle()) 249 if (state.applyPropertyToVisitedLinkStyle())
257 state.style()->{{visited_link_setter}}(resolvedColor); 250 state.style()->{{visited_link_setter}}(resolvedColor);
258 } 251 }
259 252
260 {{ declare_value_function(property_id) }} 253 {{declare_value_function(property_id)}}
261 { 254 {
262 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 255 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value);
263 256
264 if (state.applyPropertyToRegularStyle()) 257 if (state.applyPropertyToRegularStyle())
265 {{ set_value(property) }}(state.document().textLinkColors().colorFromPri mitiveValue(primitiveValue, state.style()->color())); 258 {{set_value(property)}}(state.document().textLinkColors().colorFromPrimi tiveValue(primitiveValue, state.style()->color()));
266 if (state.applyPropertyToVisitedLinkStyle()) 259 if (state.applyPropertyToVisitedLinkStyle())
267 state.style()->{{visited_link_setter}}(state.document().textLinkColors() .colorFromPrimitiveValue(primitiveValue, state.style()->color(), true)); 260 state.style()->{{visited_link_setter}}(state.document().textLinkColors() .colorFromPrimitiveValue(primitiveValue, state.style()->color(), true));
268 } 261 }
269 {%- endmacro %} 262 {% endmacro %}
263 {{apply_color('CSSPropertyBackgroundColor', initial_color='RenderStyle::initialB ackgroundColor') }}
264 {{apply_color('CSSPropertyBorderBottomColor')}}
265 {{apply_color('CSSPropertyBorderLeftColor')}}
266 {{apply_color('CSSPropertyBorderRightColor')}}
267 {{apply_color('CSSPropertyBorderTopColor')}}
268 {{apply_color('CSSPropertyOutlineColor')}}
269 {{apply_color('CSSPropertyTextDecorationColor')}}
270 {{apply_color('CSSPropertyWebkitColumnRuleColor')}}
271 {{apply_color('CSSPropertyWebkitTextEmphasisColor')}}
272 {{apply_color('CSSPropertyWebkitTextFillColor')}}
273 {{apply_color('CSSPropertyWebkitTextStrokeColor')}}
270 274
271 {{ apply_color("CSSPropertyBackgroundColor", initial_color="RenderStyle::initial BackgroundColor") }} 275 {% macro apply_counter(property_id, action) %}
272 {{ apply_color("CSSPropertyBorderBottomColor") }} 276 {% set property = properties[property_id] %}
273 {{ apply_color("CSSPropertyBorderLeftColor") }} 277 {{declare_initial_function(property_id)}} { }
274 {{ apply_color("CSSPropertyBorderRightColor") }}
275 {{ apply_color("CSSPropertyBorderTopColor") }}
276 {{ apply_color("CSSPropertyOutlineColor") }}
277 {{ apply_color("CSSPropertyTextDecorationColor") }}
278 {{ apply_color("CSSPropertyWebkitColumnRuleColor") }}
279 {{ apply_color("CSSPropertyWebkitTextEmphasisColor") }}
280 {{ apply_color("CSSPropertyWebkitTextFillColor") }}
281 {{ apply_color("CSSPropertyWebkitTextStrokeColor") }}
282 278
283 {%- macro apply_counter(property_id, action) %} 279 {{declare_inherit_function(property_id)}}
284 {%- set property = properties[property_id] %}
285 {{ declare_initial_function(property_id) }} { }
286
287 {{ declare_inherit_function(property_id) }}
288 { 280 {
289 CounterDirectiveMap& map = state.style()->accessCounterDirectives(); 281 CounterDirectiveMap& map = state.style()->accessCounterDirectives();
290 CounterDirectiveMap& parentMap = state.parentStyle()->accessCounterDirective s(); 282 CounterDirectiveMap& parentMap = state.parentStyle()->accessCounterDirective s();
291 283
292 typedef CounterDirectiveMap::iterator Iterator; 284 typedef CounterDirectiveMap::iterator Iterator;
293 Iterator end = parentMap.end(); 285 Iterator end = parentMap.end();
294 for (Iterator it = parentMap.begin(); it != end; ++it) { 286 for (Iterator it = parentMap.begin(); it != end; ++it) {
295 CounterDirectives& directives = map.add(it->key, CounterDirectives()).st oredValue->value; 287 CounterDirectives& directives = map.add(it->key, CounterDirectives()).st oredValue->value;
296 directives.inherit{{action}}(it->value); 288 directives.inherit{{action}}(it->value);
297 } 289 }
298 } 290 }
299 291
300 {{ declare_value_function(property_id) }} 292 {{declare_value_function(property_id)}}
301 { 293 {
302 CounterDirectiveMap& map = state.style()->accessCounterDirectives(); 294 CounterDirectiveMap& map = state.style()->accessCounterDirectives();
303 typedef CounterDirectiveMap::iterator Iterator; 295 typedef CounterDirectiveMap::iterator Iterator;
304 296
305 Iterator end = map.end(); 297 Iterator end = map.end();
306 for (Iterator it = map.begin(); it != end; ++it) 298 for (Iterator it = map.begin(); it != end; ++it)
307 it->value.clear{{action}}(); 299 it->value.clear{{action}}();
308 300
309 if (!value->isValueList()) { 301 if (!value->isValueList()) {
310 ASSERT(value->isPrimitiveValue() && toCSSPrimitiveValue(value)->getValue ID() == CSSValueNone); 302 ASSERT(value->isPrimitiveValue() && toCSSPrimitiveValue(value)->getValue ID() == CSSValueNone);
311 return; 303 return;
312 } 304 }
313 305
314 CSSValueList* list = toCSSValueList(value); 306 CSSValueList* list = toCSSValueList(value);
315 307
316 int length = list ? list->length() : 0; 308 int length = list ? list->length() : 0;
317 for (int i = 0; i < length; ++i) { 309 for (int i = 0; i < length; ++i) {
318 CSSValue* currValue = list->itemWithoutBoundsCheck(i); 310 CSSValue* currValue = list->itemWithoutBoundsCheck(i);
319 if (!currValue->isPrimitiveValue()) 311 if (!currValue->isPrimitiveValue())
320 continue; 312 continue;
321 313
322 Pair* pair = toCSSPrimitiveValue(currValue)->getPairValue(); 314 Pair* pair = toCSSPrimitiveValue(currValue)->getPairValue();
323 if (!pair || !pair->first() || !pair->second()) 315 if (!pair || !pair->first() || !pair->second())
324 continue; 316 continue;
325 317
326 AtomicString identifier(pair->first()->getStringValue()); 318 AtomicString identifier(pair->first()->getStringValue());
327 int value = pair->second()->getIntValue(); 319 int value = pair->second()->getIntValue();
328 CounterDirectives& directives = map.add(identifier, CounterDirectives()) .storedValue->value; 320 CounterDirectives& directives = map.add(identifier, CounterDirectives()) .storedValue->value;
329 {%- if action == "Reset" %} 321 {% if action == 'Reset' %}
330 directives.setResetValue(value); 322 directives.setResetValue(value);
331 {%- else %} 323 {% else %}
332 directives.addIncrementValue(value); 324 directives.addIncrementValue(value);
333 {%- endif %} 325 {% endif %}
334 } 326 }
335 } 327 }
336 {%- endmacro %} 328 {% endmacro %}
329 {{apply_counter('CSSPropertyCounterIncrement', 'Increment')}}
330 {{apply_counter('CSSPropertyCounterReset', 'Reset')}}
337 331
338 {{ apply_counter("CSSPropertyCounterIncrement", "Increment") }} 332 {% macro apply_fill_layer(property_id, fill_type) %}
339 {{ apply_counter("CSSPropertyCounterReset", "Reset") }} 333 {% set layer_type = 'Background' if 'Background' in property_id else 'Mask' %}
340 334 {% set fill_layer_type = layer_type + 'FillLayer' %}
341 {%- macro apply_fill_layer(property_id, fill_type) %} 335 {% set access_layers = 'access' + layer_type + 'Layers' %}
342 {%- set layer_type = "Background" if "Background" in property_id else "Mask" %} 336 {% set map_fill = 'mapFill' + fill_type %}
343 {%- set fill_layer_type = layer_type + "FillLayer" %} 337 {{declare_initial_function(property_id)}}
344 {%- set access_layers = "access" + layer_type + "Layers" %}
345 {%- set map_fill = "mapFill" + fill_type %}
346 {{ declare_initial_function(property_id) }}
347 { 338 {
348 FillLayer* currChild = state.style()->{{access_layers}}(); 339 FillLayer* currChild = state.style()->{{access_layers}}();
349 currChild->set{{fill_type}}(FillLayer::initialFill{{fill_type}}({{fill_layer _type}})); 340 currChild->set{{fill_type}}(FillLayer::initialFill{{fill_type}}({{fill_layer _type}}));
350 for (currChild = currChild->next(); currChild; currChild = currChild->next() ) 341 for (currChild = currChild->next(); currChild; currChild = currChild->next() )
351 currChild->clear{{fill_type}}(); 342 currChild->clear{{fill_type}}();
352 } 343 }
353 344
354 {{ declare_inherit_function(property_id) }} 345 {{declare_inherit_function(property_id)}}
355 { 346 {
356 FillLayer* currChild = state.style()->{{access_layers}}(); 347 FillLayer* currChild = state.style()->{{access_layers}}();
357 FillLayer* prevChild = 0; 348 FillLayer* prevChild = 0;
358 const FillLayer* currParent = state.parentStyle()->{{layer_type|lower}}Layer s(); 349 const FillLayer* currParent = state.parentStyle()->{{layer_type|lower}}Layer s();
359 while (currParent && currParent->is{{fill_type}}Set()) { 350 while (currParent && currParent->is{{fill_type}}Set()) {
360 if (!currChild) { 351 if (!currChild) {
361 /* Need to make a new layer.*/ 352 /* Need to make a new layer.*/
362 currChild = new FillLayer({{fill_layer_type}}); 353 currChild = new FillLayer({{fill_layer_type}});
363 prevChild->setNext(currChild); 354 prevChild->setNext(currChild);
364 } 355 }
365 currChild->set{{fill_type}}(currParent->{{lower_first(fill_type)}}()); 356 currChild->set{{fill_type}}(currParent->{{lower_first(fill_type)}}());
366 prevChild = currChild; 357 prevChild = currChild;
367 currChild = prevChild->next(); 358 currChild = prevChild->next();
368 currParent = currParent->next(); 359 currParent = currParent->next();
369 } 360 }
370 361
371 while (currChild) { 362 while (currChild) {
372 /* Reset any remaining layers to not have the property set. */ 363 /* Reset any remaining layers to not have the property set. */
373 currChild->clear{{fill_type}}(); 364 currChild->clear{{fill_type}}();
374 currChild = currChild->next(); 365 currChild = currChild->next();
375 } 366 }
376 } 367 }
377 368
378 {{ declare_value_function(property_id) }} 369 {{declare_value_function(property_id)}}
379 { 370 {
380 FillLayer* currChild = state.style()->{{access_layers}}(); 371 FillLayer* currChild = state.style()->{{access_layers}}();
381 FillLayer* prevChild = 0; 372 FillLayer* prevChild = 0;
382 if (value->isValueList() && !value->isImageSetValue()) { 373 if (value->isValueList() && !value->isImageSetValue()) {
383 /* Walk each value and put it into a layer, creating new layers as neede d. */ 374 /* Walk each value and put it into a layer, creating new layers as neede d. */
384 CSSValueList* valueList = toCSSValueList(value); 375 CSSValueList* valueList = toCSSValueList(value);
385 for (unsigned int i = 0; i < valueList->length(); i++) { 376 for (unsigned int i = 0; i < valueList->length(); i++) {
386 if (!currChild) { 377 if (!currChild) {
387 /* Need to make a new layer to hold this value */ 378 /* Need to make a new layer to hold this value */
388 currChild = new FillLayer({{fill_layer_type}}); 379 currChild = new FillLayer({{fill_layer_type}});
389 prevChild->setNext(currChild); 380 prevChild->setNext(currChild);
390 } 381 }
391 state.styleMap().{{map_fill}}({{property_id}}, currChild, valueList- >itemWithoutBoundsCheck(i)); 382 state.styleMap().{{map_fill}}({{property_id}}, currChild, valueList- >itemWithoutBoundsCheck(i));
392 prevChild = currChild; 383 prevChild = currChild;
393 currChild = currChild->next(); 384 currChild = currChild->next();
394 } 385 }
395 } else { 386 } else {
396 state.styleMap().{{map_fill}}({{property_id}}, currChild, value); 387 state.styleMap().{{map_fill}}({{property_id}}, currChild, value);
397 currChild = currChild->next(); 388 currChild = currChild->next();
398 } 389 }
399 while (currChild) { 390 while (currChild) {
400 /* Reset all remaining layers to not have the property set. */ 391 /* Reset all remaining layers to not have the property set. */
401 currChild->clear{{fill_type}}(); 392 currChild->clear{{fill_type}}();
402 currChild = currChild->next(); 393 currChild = currChild->next();
403 } 394 }
404 } 395 }
405 {%- endmacro %} 396 {% endmacro %}
397 {{apply_fill_layer('CSSPropertyBackgroundAttachment', 'Attachment')}}
398 {{apply_fill_layer('CSSPropertyBackgroundBlendMode', 'BlendMode')}}
399 {{apply_fill_layer('CSSPropertyBackgroundClip', 'Clip')}}
400 {{apply_fill_layer('CSSPropertyBackgroundImage', 'Image')}}
401 {{apply_fill_layer('CSSPropertyBackgroundOrigin', 'Origin')}}
402 {{apply_fill_layer('CSSPropertyBackgroundPositionX', 'XPosition')}}
403 {{apply_fill_layer('CSSPropertyBackgroundPositionY', 'YPosition')}}
404 {{apply_fill_layer('CSSPropertyBackgroundRepeatX', 'RepeatX')}}
405 {{apply_fill_layer('CSSPropertyBackgroundRepeatY', 'RepeatY')}}
406 {{apply_fill_layer('CSSPropertyBackgroundSize', 'Size')}}
407 {{apply_fill_layer('CSSPropertyMaskSourceType', 'MaskSourceType')}}
408 {{apply_fill_layer('CSSPropertyWebkitBackgroundComposite', 'Composite')}}
409 {{apply_fill_layer('CSSPropertyWebkitMaskClip', 'Clip')}}
410 {{apply_fill_layer('CSSPropertyWebkitMaskComposite', 'Composite')}}
411 {{apply_fill_layer('CSSPropertyWebkitMaskImage', 'Image')}}
412 {{apply_fill_layer('CSSPropertyWebkitMaskOrigin', 'Origin')}}
413 {{apply_fill_layer('CSSPropertyWebkitMaskPositionX', 'XPosition')}}
414 {{apply_fill_layer('CSSPropertyWebkitMaskPositionY', 'YPosition')}}
415 {{apply_fill_layer('CSSPropertyWebkitMaskRepeatX', 'RepeatX')}}
416 {{apply_fill_layer('CSSPropertyWebkitMaskRepeatY', 'RepeatY')}}
417 {{apply_fill_layer('CSSPropertyWebkitMaskSize', 'Size')}}
406 418
407 {{ apply_fill_layer("CSSPropertyBackgroundAttachment", "Attachment") }} 419 {% macro apply_value_number(property_id, id_for_minus_one) %}
408 {{ apply_fill_layer("CSSPropertyBackgroundBlendMode", "BlendMode") }} 420 {{declare_value_function(property_id)}}
409 {{ apply_fill_layer("CSSPropertyBackgroundClip", "Clip") }}
410 {{ apply_fill_layer("CSSPropertyBackgroundImage", "Image") }}
411 {{ apply_fill_layer("CSSPropertyBackgroundOrigin", "Origin") }}
412 {{ apply_fill_layer("CSSPropertyBackgroundPositionX", "XPosition") }}
413 {{ apply_fill_layer("CSSPropertyBackgroundPositionY", "YPosition") }}
414 {{ apply_fill_layer("CSSPropertyBackgroundRepeatX", "RepeatX") }}
415 {{ apply_fill_layer("CSSPropertyBackgroundRepeatY", "RepeatY") }}
416 {{ apply_fill_layer("CSSPropertyBackgroundSize", "Size") }}
417 {{ apply_fill_layer("CSSPropertyMaskSourceType", "MaskSourceType") }}
418 {{ apply_fill_layer("CSSPropertyWebkitBackgroundComposite", "Composite") }}
419 {{ apply_fill_layer("CSSPropertyWebkitMaskClip", "Clip") }}
420 {{ apply_fill_layer("CSSPropertyWebkitMaskComposite", "Composite") }}
421 {{ apply_fill_layer("CSSPropertyWebkitMaskImage", "Image") }}
422 {{ apply_fill_layer("CSSPropertyWebkitMaskOrigin", "Origin") }}
423 {{ apply_fill_layer("CSSPropertyWebkitMaskPositionX", "XPosition") }}
424 {{ apply_fill_layer("CSSPropertyWebkitMaskPositionY", "YPosition") }}
425 {{ apply_fill_layer("CSSPropertyWebkitMaskRepeatX", "RepeatX") }}
426 {{ apply_fill_layer("CSSPropertyWebkitMaskRepeatY", "RepeatY") }}
427 {{ apply_fill_layer("CSSPropertyWebkitMaskSize", "Size") }}
428
429 {%- macro apply_value_number(property_id, id_for_minus_one) %}
430 {{ declare_value_function(property_id) }}
431 { 421 {
432 {%- set property = properties[property_id] %} 422 {% set property = properties[property_id] %}
433 if (!value->isPrimitiveValue()) 423 if (!value->isPrimitiveValue())
434 return; 424 return;
435 425
436 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 426 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value);
437 if (primitiveValue->getValueID() == {{id_for_minus_one}}) 427 if (primitiveValue->getValueID() == {{id_for_minus_one}})
438 {{ set_value(property) }}(-1); 428 {{set_value(property)}}(-1);
439 else 429 else
440 {{ set_value(property) }}(primitiveValue->getValue<{{property.type_name} }>(CSSPrimitiveValue::CSS_NUMBER)); 430 {{set_value(property)}}(primitiveValue->getValue<{{property.type_name}}> (CSSPrimitiveValue::CSS_NUMBER));
441 } 431 }
442 {%- endmacro %} 432 {% endmacro %}
433 {{apply_value_number('CSSPropertyInternalMarqueeRepetition', 'CSSValueInfinite') }}
443 434
444 {{ apply_value_number("CSSPropertyInternalMarqueeRepetition", "CSSValueInfinite" ) }} 435 {% macro apply_value_shape(property_id) %}
445 436 {{declare_value_function(property_id)}}
446 {%- macro apply_value_shape(property_id) %}
447 {{ declare_value_function(property_id) }}
448 { 437 {
449 {%- set property = properties[property_id] %} 438 {% set property = properties[property_id] %}
450 if (value->isPrimitiveValue()) { 439 if (value->isPrimitiveValue()) {
451 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 440 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value);
452 if (primitiveValue->getValueID() == CSSValueAuto) 441 if (primitiveValue->getValueID() == CSSValueAuto)
453 {{ set_value(property) }}(nullptr); 442 {{set_value(property)}}(nullptr);
454 } else if (value->isImageValue() || value->isImageSetValue()) { 443 } else if (value->isImageValue() || value->isImageSetValue()) {
455 {{ set_value(property) }}(ShapeValue::createImageValue(state.styleImage( {{property_id}}, value))); 444 {{set_value(property)}}(ShapeValue::createImageValue(state.styleImage({{ property_id}}, value)));
456 } else if (value->isValueList()) { 445 } else if (value->isValueList()) {
457 RefPtr<BasicShape> shape; 446 RefPtr<BasicShape> shape;
458 CSSBoxType cssBox = BoxMissing; 447 CSSBoxType cssBox = BoxMissing;
459 CSSValueList* valueList = toCSSValueList(value); 448 CSSValueList* valueList = toCSSValueList(value);
460 for (unsigned i = 0; i < valueList->length(); ++i) { 449 for (unsigned i = 0; i < valueList->length(); ++i) {
461 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(valueList->i temWithoutBoundsCheck(i)); 450 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(valueList->i temWithoutBoundsCheck(i));
462 if (primitiveValue->isShape()) 451 if (primitiveValue->isShape())
463 shape = basicShapeForValue(state, primitiveValue->getShapeValue( )); 452 shape = basicShapeForValue(state, primitiveValue->getShapeValue( ));
464 else if (primitiveValue->getValueID() == CSSValueContentBox 453 else if (primitiveValue->getValueID() == CSSValueContentBox
465 || primitiveValue->getValueID() == CSSValueBorderBox 454 || primitiveValue->getValueID() == CSSValueBorderBox
466 || primitiveValue->getValueID() == CSSValuePaddingBox 455 || primitiveValue->getValueID() == CSSValuePaddingBox
467 || primitiveValue->getValueID() == CSSValueMarginBox) 456 || primitiveValue->getValueID() == CSSValueMarginBox)
468 cssBox = CSSBoxType(*primitiveValue); 457 cssBox = CSSBoxType(*primitiveValue);
469 else 458 else
470 return; 459 return;
471 } 460 }
472 461
473 if (shape) 462 if (shape)
474 {{ set_value(property) }}(ShapeValue::createShapeValue(shape.release (), cssBox)); 463 {{set_value(property)}}(ShapeValue::createShapeValue(shape.release() , cssBox));
475 else if (cssBox != BoxMissing) 464 else if (cssBox != BoxMissing)
476 {{ set_value(property) }}(ShapeValue::createBoxShapeValue(cssBox)); 465 {{set_value(property)}}(ShapeValue::createBoxShapeValue(cssBox));
477 } 466 }
478 } 467 }
479 {%- endmacro %} 468 {% endmacro %}
480 469 {{apply_value_shape('CSSPropertyShapeOutside')}}
481 {{ apply_value_shape("CSSPropertyShapeOutside") }}
482
483 } // namespace WebCore 470 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/build/scripts/templates/StyleBuilder.cpp.tmpl ('k') | Source/build/scripts/templates/StyleBuilderFunctions.h.tmpl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698