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

Side by Side Diff: Source/core/css/resolver/CSSToStyleMap.cpp

Issue 1164573002: CSSValue Immediates: Change CSSValue to an object instead of a pointer (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 5 years, 4 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r ights reserved. 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r ights reserved.
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
(...skipping 25 matching lines...) Expand all
36 #include "core/css/CSSTimingFunctionValue.h" 36 #include "core/css/CSSTimingFunctionValue.h"
37 #include "core/css/Pair.h" 37 #include "core/css/Pair.h"
38 #include "core/css/Rect.h" 38 #include "core/css/Rect.h"
39 #include "core/css/resolver/StyleBuilderConverter.h" 39 #include "core/css/resolver/StyleBuilderConverter.h"
40 #include "core/css/resolver/StyleResolverState.h" 40 #include "core/css/resolver/StyleResolverState.h"
41 #include "core/style/BorderImageLengthBox.h" 41 #include "core/style/BorderImageLengthBox.h"
42 #include "core/style/FillLayer.h" 42 #include "core/style/FillLayer.h"
43 43
44 namespace blink { 44 namespace blink {
45 45
46 void CSSToStyleMap::mapFillAttachment(StyleResolverState&, FillLayer* layer, CSS Value* value) 46 void CSSToStyleMap::mapFillAttachment(StyleResolverState&, FillLayer* layer, CSS Value value)
47 { 47 {
48 if (value->isInitialValue()) { 48 if (value.isInitialValue()) {
49 layer->setAttachment(FillLayer::initialFillAttachment(layer->type())); 49 layer->setAttachment(FillLayer::initialFillAttachment(layer->type()));
50 return; 50 return;
51 } 51 }
52 52
53 if (!value->isPrimitiveValue()) 53 if (!value.isPrimitiveValue())
54 return; 54 return;
55 55
56 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 56 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
57 switch (primitiveValue->getValueID()) { 57 switch (primitiveValue.getValueID()) {
58 case CSSValueFixed: 58 case CSSValueFixed:
59 layer->setAttachment(FixedBackgroundAttachment); 59 layer->setAttachment(FixedBackgroundAttachment);
60 break; 60 break;
61 case CSSValueScroll: 61 case CSSValueScroll:
62 layer->setAttachment(ScrollBackgroundAttachment); 62 layer->setAttachment(ScrollBackgroundAttachment);
63 break; 63 break;
64 case CSSValueLocal: 64 case CSSValueLocal:
65 layer->setAttachment(LocalBackgroundAttachment); 65 layer->setAttachment(LocalBackgroundAttachment);
66 break; 66 break;
67 default: 67 default:
68 return; 68 return;
69 } 69 }
70 } 70 }
71 71
72 void CSSToStyleMap::mapFillClip(StyleResolverState&, FillLayer* layer, CSSValue* value) 72 void CSSToStyleMap::mapFillClip(StyleResolverState&, FillLayer* layer, CSSValue value)
73 { 73 {
74 if (value->isInitialValue()) { 74 if (value.isInitialValue()) {
75 layer->setClip(FillLayer::initialFillClip(layer->type())); 75 layer->setClip(FillLayer::initialFillClip(layer->type()));
76 return; 76 return;
77 } 77 }
78 78
79 if (!value->isPrimitiveValue()) 79 if (!value.isPrimitiveValue())
80 return; 80 return;
81 81
82 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 82 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
83 layer->setClip(*primitiveValue); 83 layer->setClip(primitiveValue);
84 } 84 }
85 85
86 void CSSToStyleMap::mapFillComposite(StyleResolverState&, FillLayer* layer, CSSV alue* value) 86 void CSSToStyleMap::mapFillComposite(StyleResolverState&, FillLayer* layer, CSSV alue value)
87 { 87 {
88 if (value->isInitialValue()) { 88 if (value.isInitialValue()) {
89 layer->setComposite(FillLayer::initialFillComposite(layer->type())); 89 layer->setComposite(FillLayer::initialFillComposite(layer->type()));
90 return; 90 return;
91 } 91 }
92 92
93 if (!value->isPrimitiveValue()) 93 if (!value.isPrimitiveValue())
94 return; 94 return;
95 95
96 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 96 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
97 layer->setComposite(*primitiveValue); 97 layer->setComposite(primitiveValue);
98 } 98 }
99 99
100 void CSSToStyleMap::mapFillBlendMode(StyleResolverState&, FillLayer* layer, CSSV alue* value) 100 void CSSToStyleMap::mapFillBlendMode(StyleResolverState&, FillLayer* layer, CSSV alue value)
101 { 101 {
102 if (value->isInitialValue()) { 102 if (value.isInitialValue()) {
103 layer->setBlendMode(FillLayer::initialFillBlendMode(layer->type())); 103 layer->setBlendMode(FillLayer::initialFillBlendMode(layer->type()));
104 return; 104 return;
105 } 105 }
106 106
107 if (!value->isPrimitiveValue()) 107 if (!value.isPrimitiveValue())
108 return; 108 return;
109 109
110 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 110 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
111 layer->setBlendMode(*primitiveValue); 111 layer->setBlendMode(primitiveValue);
112 } 112 }
113 113
114 void CSSToStyleMap::mapFillOrigin(StyleResolverState&, FillLayer* layer, CSSValu e* value) 114 void CSSToStyleMap::mapFillOrigin(StyleResolverState&, FillLayer* layer, CSSValu e value)
115 { 115 {
116 if (value->isInitialValue()) { 116 if (value.isInitialValue()) {
117 layer->setOrigin(FillLayer::initialFillOrigin(layer->type())); 117 layer->setOrigin(FillLayer::initialFillOrigin(layer->type()));
118 return; 118 return;
119 } 119 }
120 120
121 if (!value->isPrimitiveValue()) 121 if (!value.isPrimitiveValue())
122 return; 122 return;
123 123
124 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 124 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
125 layer->setOrigin(*primitiveValue); 125 layer->setOrigin(primitiveValue);
126 } 126 }
127 127
128 128
129 void CSSToStyleMap::mapFillImage(StyleResolverState& state, FillLayer* layer, CS SValue* value) 129 void CSSToStyleMap::mapFillImage(StyleResolverState& state, FillLayer* layer, CS SValue value)
130 { 130 {
131 if (value->isInitialValue()) { 131 if (value.isInitialValue()) {
132 layer->setImage(FillLayer::initialFillImage(layer->type())); 132 layer->setImage(FillLayer::initialFillImage(layer->type()));
133 return; 133 return;
134 } 134 }
135 135
136 CSSPropertyID property = layer->type() == BackgroundFillLayer ? CSSPropertyB ackgroundImage : CSSPropertyWebkitMaskImage; 136 CSSPropertyID property = layer->type() == BackgroundFillLayer ? CSSPropertyB ackgroundImage : CSSPropertyWebkitMaskImage;
137 layer->setImage(state.styleImage(property, value)); 137 layer->setImage(state.styleImage(property, value));
138 } 138 }
139 139
140 void CSSToStyleMap::mapFillRepeatX(StyleResolverState&, FillLayer* layer, CSSVal ue* value) 140 void CSSToStyleMap::mapFillRepeatX(StyleResolverState&, FillLayer* layer, CSSVal ue value)
141 { 141 {
142 if (value->isInitialValue()) { 142 if (value.isInitialValue()) {
143 layer->setRepeatX(FillLayer::initialFillRepeatX(layer->type())); 143 layer->setRepeatX(FillLayer::initialFillRepeatX(layer->type()));
144 return; 144 return;
145 } 145 }
146 146
147 if (!value->isPrimitiveValue()) 147 if (!value.isPrimitiveValue())
148 return; 148 return;
149 149
150 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 150 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
151 layer->setRepeatX(*primitiveValue); 151 layer->setRepeatX(primitiveValue);
152 } 152 }
153 153
154 void CSSToStyleMap::mapFillRepeatY(StyleResolverState&, FillLayer* layer, CSSVal ue* value) 154 void CSSToStyleMap::mapFillRepeatY(StyleResolverState&, FillLayer* layer, CSSVal ue value)
155 { 155 {
156 if (value->isInitialValue()) { 156 if (value.isInitialValue()) {
157 layer->setRepeatY(FillLayer::initialFillRepeatY(layer->type())); 157 layer->setRepeatY(FillLayer::initialFillRepeatY(layer->type()));
158 return; 158 return;
159 } 159 }
160 160
161 if (!value->isPrimitiveValue()) 161 if (!value.isPrimitiveValue())
162 return; 162 return;
163 163
164 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 164 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
165 layer->setRepeatY(*primitiveValue); 165 layer->setRepeatY(primitiveValue);
166 } 166 }
167 167
168 void CSSToStyleMap::mapFillSize(StyleResolverState& state, FillLayer* layer, CSS Value* value) 168 void CSSToStyleMap::mapFillSize(StyleResolverState& state, FillLayer* layer, CSS Value value)
169 { 169 {
170 if (value->isInitialValue()) { 170 if (value.isInitialValue()) {
171 layer->setSizeType(FillLayer::initialFillSizeType(layer->type())); 171 layer->setSizeType(FillLayer::initialFillSizeType(layer->type()));
172 layer->setSizeLength(FillLayer::initialFillSizeLength(layer->type())); 172 layer->setSizeLength(FillLayer::initialFillSizeLength(layer->type()));
173 return; 173 return;
174 } 174 }
175 175
176 if (!value->isPrimitiveValue()) 176 if (!value.isPrimitiveValue())
177 return; 177 return;
178 178
179 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 179 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
180 if (primitiveValue->getValueID() == CSSValueContain) 180 if (primitiveValue.getValueID() == CSSValueContain)
181 layer->setSizeType(Contain); 181 layer->setSizeType(Contain);
182 else if (primitiveValue->getValueID() == CSSValueCover) 182 else if (primitiveValue.getValueID() == CSSValueCover)
183 layer->setSizeType(Cover); 183 layer->setSizeType(Cover);
184 else 184 else
185 layer->setSizeType(SizeLength); 185 layer->setSizeType(SizeLength);
186 186
187 LengthSize b = FillLayer::initialFillSizeLength(layer->type()); 187 LengthSize b = FillLayer::initialFillSizeLength(layer->type());
188 188
189 if (primitiveValue->getValueID() == CSSValueContain || primitiveValue->getVa lueID() == CSSValueCover) { 189 if (primitiveValue.getValueID() == CSSValueContain || primitiveValue.getValu eID() == CSSValueCover) {
190 layer->setSizeLength(b); 190 layer->setSizeLength(b);
191 return; 191 return;
192 } 192 }
193 193
194 Length firstLength; 194 Length firstLength;
195 Length secondLength; 195 Length secondLength;
196 196
197 if (Pair* pair = primitiveValue->getPairValue()) { 197 if (Pair* pair = primitiveValue.getPairValue()) {
198 firstLength = StyleBuilderConverter::convertLengthOrAuto(state, pair->fi rst()); 198 firstLength = StyleBuilderConverter::convertLengthOrAuto(state, CSSValue (*pair->first()));
199 secondLength = StyleBuilderConverter::convertLengthOrAuto(state, pair->s econd()); 199 secondLength = StyleBuilderConverter::convertLengthOrAuto(state, CSSValu e(*pair->second()));
200 } else { 200 } else {
201 firstLength = StyleBuilderConverter::convertLengthOrAuto(state, primitiv eValue); 201 firstLength = StyleBuilderConverter::convertLengthOrAuto(state, value);
202 secondLength = Length(); 202 secondLength = Length();
203 } 203 }
204 204
205 b.setWidth(firstLength); 205 b.setWidth(firstLength);
206 b.setHeight(secondLength); 206 b.setHeight(secondLength);
207 layer->setSizeLength(b); 207 layer->setSizeLength(b);
208 } 208 }
209 209
210 void CSSToStyleMap::mapFillXPosition(StyleResolverState& state, FillLayer* layer , CSSValue* value) 210 void CSSToStyleMap::mapFillXPosition(StyleResolverState& state, FillLayer* layer , CSSValue value)
211 { 211 {
212 if (value->isInitialValue()) { 212 if (value.isInitialValue()) {
213 layer->setXPosition(FillLayer::initialFillXPosition(layer->type())); 213 layer->setXPosition(FillLayer::initialFillXPosition(layer->type()));
214 return; 214 return;
215 } 215 }
216 216
217 if (!value->isPrimitiveValue()) 217 if (!value.isPrimitiveValue())
218 return; 218 return;
219 219
220 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 220 CSSPrimitiveValue* primitiveValue = &toCSSPrimitiveValue(value);
221 Pair* pair = primitiveValue->getPairValue(); 221 Pair* pair = primitiveValue->getPairValue();
222 if (pair) 222 if (pair)
223 primitiveValue = pair->second(); 223 primitiveValue = pair->second();
224 224
225 Length length = primitiveValue->convertToLength(state.cssToLengthConversionD ata()); 225 Length length = primitiveValue->convertToLength(state.cssToLengthConversionD ata());
226 226
227 layer->setXPosition(length); 227 layer->setXPosition(length);
228 if (pair) 228 if (pair)
229 layer->setBackgroundXOrigin(*(pair->first())); 229 layer->setBackgroundXOrigin(*(pair->first()));
230 } 230 }
231 231
232 void CSSToStyleMap::mapFillYPosition(StyleResolverState& state, FillLayer* layer , CSSValue* value) 232 void CSSToStyleMap::mapFillYPosition(StyleResolverState& state, FillLayer* layer , CSSValue value)
233 { 233 {
234 if (value->isInitialValue()) { 234 if (value.isInitialValue()) {
235 layer->setYPosition(FillLayer::initialFillYPosition(layer->type())); 235 layer->setYPosition(FillLayer::initialFillYPosition(layer->type()));
236 return; 236 return;
237 } 237 }
238 238
239 if (!value->isPrimitiveValue()) 239 if (!value.isPrimitiveValue())
240 return; 240 return;
241 241
242 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 242 CSSPrimitiveValue* primitiveValue = &toCSSPrimitiveValue(value);
243 Pair* pair = primitiveValue->getPairValue(); 243 Pair* pair = primitiveValue->getPairValue();
244 if (pair) 244 if (pair)
245 primitiveValue = pair->second(); 245 primitiveValue = pair->second();
246 246
247 Length length = primitiveValue->convertToLength(state.cssToLengthConversionD ata()); 247 Length length = primitiveValue->convertToLength(state.cssToLengthConversionD ata());
248 248
249 layer->setYPosition(length); 249 layer->setYPosition(length);
250 if (pair) 250 if (pair)
251 layer->setBackgroundYOrigin(*(pair->first())); 251 layer->setBackgroundYOrigin(*(pair->first()));
252 } 252 }
253 253
254 void CSSToStyleMap::mapFillMaskSourceType(StyleResolverState&, FillLayer* layer, CSSValue* value) 254 void CSSToStyleMap::mapFillMaskSourceType(StyleResolverState&, FillLayer* layer, CSSValue value)
255 { 255 {
256 EMaskSourceType type = FillLayer::initialFillMaskSourceType(layer->type()); 256 EMaskSourceType type = FillLayer::initialFillMaskSourceType(layer->type());
257 if (value->isInitialValue()) { 257 if (value.isInitialValue()) {
258 layer->setMaskSourceType(type); 258 layer->setMaskSourceType(type);
259 return; 259 return;
260 } 260 }
261 261
262 if (!value->isPrimitiveValue()) 262 if (!value.isPrimitiveValue())
263 return; 263 return;
264 264
265 switch (toCSSPrimitiveValue(value)->getValueID()) { 265 switch (toCSSPrimitiveValue(value).getValueID()) {
266 case CSSValueAlpha: 266 case CSSValueAlpha:
267 type = MaskAlpha; 267 type = MaskAlpha;
268 break; 268 break;
269 case CSSValueLuminance: 269 case CSSValueLuminance:
270 type = MaskLuminance; 270 type = MaskLuminance;
271 break; 271 break;
272 case CSSValueAuto: 272 case CSSValueAuto:
273 break; 273 break;
274 default: 274 default:
275 ASSERT_NOT_REACHED(); 275 ASSERT_NOT_REACHED();
276 } 276 }
277 277
278 layer->setMaskSourceType(type); 278 layer->setMaskSourceType(type);
279 } 279 }
280 280
281 double CSSToStyleMap::mapAnimationDelay(CSSValue* value) 281 double CSSToStyleMap::mapAnimationDelay(CSSValue value)
282 { 282 {
283 if (value->isInitialValue()) 283 if (value.isInitialValue())
284 return CSSTimingData::initialDelay(); 284 return CSSTimingData::initialDelay();
285 return toCSSPrimitiveValue(value)->computeSeconds(); 285 return toCSSPrimitiveValue(value).computeSeconds();
286 } 286 }
287 287
288 Timing::PlaybackDirection CSSToStyleMap::mapAnimationDirection(CSSValue* value) 288 Timing::PlaybackDirection CSSToStyleMap::mapAnimationDirection(CSSValue value)
289 { 289 {
290 if (value->isInitialValue()) 290 if (value.isInitialValue())
291 return CSSAnimationData::initialDirection(); 291 return CSSAnimationData::initialDirection();
292 292
293 switch (toCSSPrimitiveValue(value)->getValueID()) { 293 switch (toCSSPrimitiveValue(value).getValueID()) {
294 case CSSValueNormal: 294 case CSSValueNormal:
295 return Timing::PlaybackDirectionNormal; 295 return Timing::PlaybackDirectionNormal;
296 case CSSValueAlternate: 296 case CSSValueAlternate:
297 return Timing::PlaybackDirectionAlternate; 297 return Timing::PlaybackDirectionAlternate;
298 case CSSValueReverse: 298 case CSSValueReverse:
299 return Timing::PlaybackDirectionReverse; 299 return Timing::PlaybackDirectionReverse;
300 case CSSValueAlternateReverse: 300 case CSSValueAlternateReverse:
301 return Timing::PlaybackDirectionAlternateReverse; 301 return Timing::PlaybackDirectionAlternateReverse;
302 default: 302 default:
303 ASSERT_NOT_REACHED(); 303 ASSERT_NOT_REACHED();
304 return CSSAnimationData::initialDirection(); 304 return CSSAnimationData::initialDirection();
305 } 305 }
306 } 306 }
307 307
308 double CSSToStyleMap::mapAnimationDuration(CSSValue* value) 308 double CSSToStyleMap::mapAnimationDuration(CSSValue value)
309 { 309 {
310 if (value->isInitialValue()) 310 if (value.isInitialValue())
311 return CSSTimingData::initialDuration(); 311 return CSSTimingData::initialDuration();
312 return toCSSPrimitiveValue(value)->computeSeconds(); 312 return toCSSPrimitiveValue(value).computeSeconds();
313 } 313 }
314 314
315 Timing::FillMode CSSToStyleMap::mapAnimationFillMode(CSSValue* value) 315 Timing::FillMode CSSToStyleMap::mapAnimationFillMode(CSSValue value)
316 { 316 {
317 if (value->isInitialValue()) 317 if (value.isInitialValue())
318 return CSSAnimationData::initialFillMode(); 318 return CSSAnimationData::initialFillMode();
319 319
320 switch (toCSSPrimitiveValue(value)->getValueID()) { 320 switch (toCSSPrimitiveValue(value).getValueID()) {
321 case CSSValueNone: 321 case CSSValueNone:
322 return Timing::FillModeNone; 322 return Timing::FillModeNone;
323 case CSSValueForwards: 323 case CSSValueForwards:
324 return Timing::FillModeForwards; 324 return Timing::FillModeForwards;
325 case CSSValueBackwards: 325 case CSSValueBackwards:
326 return Timing::FillModeBackwards; 326 return Timing::FillModeBackwards;
327 case CSSValueBoth: 327 case CSSValueBoth:
328 return Timing::FillModeBoth; 328 return Timing::FillModeBoth;
329 default: 329 default:
330 ASSERT_NOT_REACHED(); 330 ASSERT_NOT_REACHED();
331 return CSSAnimationData::initialFillMode(); 331 return CSSAnimationData::initialFillMode();
332 } 332 }
333 } 333 }
334 334
335 double CSSToStyleMap::mapAnimationIterationCount(CSSValue* value) 335 double CSSToStyleMap::mapAnimationIterationCount(CSSValue value)
336 { 336 {
337 if (value->isInitialValue()) 337 if (value.isInitialValue())
338 return CSSAnimationData::initialIterationCount(); 338 return CSSAnimationData::initialIterationCount();
339 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 339 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
340 if (primitiveValue->getValueID() == CSSValueInfinite) 340 if (primitiveValue.getValueID() == CSSValueInfinite)
341 return std::numeric_limits<double>::infinity(); 341 return std::numeric_limits<double>::infinity();
342 return primitiveValue->getFloatValue(); 342 return primitiveValue.getFloatValue();
343 } 343 }
344 344
345 AtomicString CSSToStyleMap::mapAnimationName(CSSValue* value) 345 AtomicString CSSToStyleMap::mapAnimationName(CSSValue value)
346 { 346 {
347 if (value->isInitialValue()) 347 if (value.isInitialValue())
348 return CSSAnimationData::initialName(); 348 return CSSAnimationData::initialName();
349 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 349 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
350 if (primitiveValue->getValueID() == CSSValueNone) 350 if (primitiveValue.getValueID() == CSSValueNone)
351 return CSSAnimationData::initialName(); 351 return CSSAnimationData::initialName();
352 return AtomicString(primitiveValue->getStringValue()); 352 return AtomicString(primitiveValue.getStringValue());
353 } 353 }
354 354
355 EAnimPlayState CSSToStyleMap::mapAnimationPlayState(CSSValue* value) 355 EAnimPlayState CSSToStyleMap::mapAnimationPlayState(CSSValue value)
356 { 356 {
357 if (value->isInitialValue()) 357 if (value.isInitialValue())
358 return CSSAnimationData::initialPlayState(); 358 return CSSAnimationData::initialPlayState();
359 if (toCSSPrimitiveValue(value)->getValueID() == CSSValuePaused) 359 if (toCSSPrimitiveValue(value).getValueID() == CSSValuePaused)
360 return AnimPlayStatePaused; 360 return AnimPlayStatePaused;
361 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueRunning); 361 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueRunning);
362 return AnimPlayStatePlaying; 362 return AnimPlayStatePlaying;
363 } 363 }
364 364
365 CSSTransitionData::TransitionProperty CSSToStyleMap::mapAnimationProperty(CSSVal ue* value) 365 CSSTransitionData::TransitionProperty CSSToStyleMap::mapAnimationProperty(CSSVal ue value)
366 { 366 {
367 if (value->isInitialValue()) 367 if (value.isInitialValue())
368 return CSSTransitionData::initialProperty(); 368 return CSSTransitionData::initialProperty();
369 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 369 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
370 if (primitiveValue->isCustomIdent()) 370 if (primitiveValue.isCustomIdent())
371 return CSSTransitionData::TransitionProperty(primitiveValue->getStringVa lue()); 371 return CSSTransitionData::TransitionProperty(primitiveValue.getStringVal ue());
372 if (primitiveValue->getValueID() == CSSValueAll) 372 if (primitiveValue.getValueID() == CSSValueAll)
373 return CSSTransitionData::TransitionProperty(CSSTransitionData::Transiti onAll); 373 return CSSTransitionData::TransitionProperty(CSSTransitionData::Transiti onAll);
374 if (primitiveValue->getValueID() == CSSValueNone) 374 if (primitiveValue.getValueID() == CSSValueNone)
375 return CSSTransitionData::TransitionProperty(CSSTransitionData::Transiti onNone); 375 return CSSTransitionData::TransitionProperty(CSSTransitionData::Transiti onNone);
376 return CSSTransitionData::TransitionProperty(primitiveValue->getPropertyID() ); 376 return CSSTransitionData::TransitionProperty(primitiveValue.getPropertyID()) ;
377 } 377 }
378 378
379 PassRefPtr<TimingFunction> CSSToStyleMap::mapAnimationTimingFunction(CSSValue* v alue, bool allowStepMiddle) 379 PassRefPtr<TimingFunction> CSSToStyleMap::mapAnimationTimingFunction(CSSValue va lue, bool allowStepMiddle)
380 { 380 {
381 // FIXME: We should probably only call into this function with a valid 381 // FIXME: We should probably only call into this function with a valid
382 // single timing function value which isn't initial or inherit. We can 382 // single timing function value which isn't initial or inherit. We can
383 // currently get into here with initial since the parser expands unset 383 // currently get into here with initial since the parser expands unset
384 // properties in shorthands to initial. 384 // properties in shorthands to initial.
385 385
386 if (value->isPrimitiveValue()) { 386 if (value.isPrimitiveValue()) {
387 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 387 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value);
388 switch (primitiveValue->getValueID()) { 388 switch (primitiveValue.getValueID()) {
389 case CSSValueLinear: 389 case CSSValueLinear:
390 return LinearTimingFunction::shared(); 390 return LinearTimingFunction::shared();
391 case CSSValueEase: 391 case CSSValueEase:
392 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction:: Ease); 392 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction:: Ease);
393 case CSSValueEaseIn: 393 case CSSValueEaseIn:
394 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction:: EaseIn); 394 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction:: EaseIn);
395 case CSSValueEaseOut: 395 case CSSValueEaseOut:
396 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction:: EaseOut); 396 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction:: EaseOut);
397 case CSSValueEaseInOut: 397 case CSSValueEaseInOut:
398 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction:: EaseInOut); 398 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction:: EaseInOut);
399 case CSSValueStepStart: 399 case CSSValueStepStart:
400 return StepsTimingFunction::preset(StepsTimingFunction::Start); 400 return StepsTimingFunction::preset(StepsTimingFunction::Start);
401 case CSSValueStepMiddle: 401 case CSSValueStepMiddle:
402 if (allowStepMiddle) 402 if (allowStepMiddle)
403 return StepsTimingFunction::preset(StepsTimingFunction::Middle); 403 return StepsTimingFunction::preset(StepsTimingFunction::Middle);
404 return CSSTimingData::initialTimingFunction(); 404 return CSSTimingData::initialTimingFunction();
405 case CSSValueStepEnd: 405 case CSSValueStepEnd:
406 return StepsTimingFunction::preset(StepsTimingFunction::End); 406 return StepsTimingFunction::preset(StepsTimingFunction::End);
407 default: 407 default:
408 ASSERT_NOT_REACHED(); 408 ASSERT_NOT_REACHED();
409 return CSSTimingData::initialTimingFunction(); 409 return CSSTimingData::initialTimingFunction();
410 } 410 }
411 } 411 }
412 412
413 if (value->isCubicBezierTimingFunctionValue()) { 413 if (value.isCubicBezierTimingFunctionValue()) {
414 CSSCubicBezierTimingFunctionValue* cubicTimingFunction = toCSSCubicBezie rTimingFunctionValue(value); 414 CSSCubicBezierTimingFunctionValue& cubicTimingFunction = toCSSCubicBezie rTimingFunctionValue(value);
415 return CubicBezierTimingFunction::create(cubicTimingFunction->x1(), cubi cTimingFunction->y1(), cubicTimingFunction->x2(), cubicTimingFunction->y2()); 415 return CubicBezierTimingFunction::create(cubicTimingFunction.x1(), cubic TimingFunction.y1(), cubicTimingFunction.x2(), cubicTimingFunction.y2());
416 } 416 }
417 417
418 if (value->isInitialValue()) 418 if (value.isInitialValue())
419 return CSSTimingData::initialTimingFunction(); 419 return CSSTimingData::initialTimingFunction();
420 420
421 CSSStepsTimingFunctionValue* stepsTimingFunction = toCSSStepsTimingFunctionV alue(value); 421 CSSStepsTimingFunctionValue& stepsTimingFunction = toCSSStepsTimingFunctionV alue(value);
422 if (stepsTimingFunction->stepAtPosition() == StepsTimingFunction::Middle && !allowStepMiddle) 422 if (stepsTimingFunction.stepAtPosition() == StepsTimingFunction::Middle && ! allowStepMiddle)
423 return CSSTimingData::initialTimingFunction(); 423 return CSSTimingData::initialTimingFunction();
424 return StepsTimingFunction::create(stepsTimingFunction->numberOfSteps(), ste psTimingFunction->stepAtPosition()); 424 return StepsTimingFunction::create(stepsTimingFunction.numberOfSteps(), step sTimingFunction.stepAtPosition());
425 } 425 }
426 426
427 void CSSToStyleMap::mapNinePieceImage(StyleResolverState& state, CSSPropertyID p roperty, CSSValue* value, NinePieceImage& image) 427 void CSSToStyleMap::mapNinePieceImage(StyleResolverState& state, CSSPropertyID p roperty, NullableCSSValue value, NinePieceImage& image)
428 { 428 {
429 // If we're not a value list, then we are "none" and don't need to alter the empty image at all. 429 // If we're not a value list, then we are "none" and don't need to alter the empty image at all.
430 if (!value || !value->isValueList()) 430 if (!value || !value->isValueList())
431 return; 431 return;
432 432
433 // Retrieve the border image value. 433 // Retrieve the border image value.
434 CSSValueList* borderImage = toCSSValueList(value); 434 CSSValueList* borderImage = toCSSValueList(value);
435 435
436 // Set the image (this kicks off the load). 436 // Set the image (this kicks off the load).
437 CSSPropertyID imageProperty; 437 CSSPropertyID imageProperty;
438 if (property == CSSPropertyWebkitBorderImage) 438 if (property == CSSPropertyWebkitBorderImage)
439 imageProperty = CSSPropertyBorderImageSource; 439 imageProperty = CSSPropertyBorderImageSource;
440 else if (property == CSSPropertyWebkitMaskBoxImage) 440 else if (property == CSSPropertyWebkitMaskBoxImage)
441 imageProperty = CSSPropertyWebkitMaskBoxImageSource; 441 imageProperty = CSSPropertyWebkitMaskBoxImageSource;
442 else 442 else
443 imageProperty = property; 443 imageProperty = property;
444 444
445 for (unsigned i = 0 ; i < borderImage->length() ; ++i) { 445 for (unsigned i = 0 ; i < borderImage->length() ; ++i) {
446 CSSValue* current = borderImage->item(i); 446 CSSValue current = borderImage->item(i);
447 447
448 if (current->isImageValue() || current->isImageGeneratorValue() || curre nt->isImageSetValue()) 448 if (current.isImageValue() || current.isImageGeneratorValue() || current .isImageSetValue()) {
449 image.setImage(state.styleImage(imageProperty, current)); 449 image.setImage(state.styleImage(imageProperty, current));
450 else if (current->isBorderImageSliceValue()) 450 } else if (current.isBorderImageSliceValue()) {
451 mapNinePieceImageSlice(state, current, image); 451 mapNinePieceImageSlice(state, current, image);
452 else if (current->isValueList()) { 452 } else if (current.isValueList()) {
453 CSSValueList* slashList = toCSSValueList(current); 453 CSSValueList& slashList = toCSSValueList(current);
454 size_t length = slashList->length(); 454 size_t length = slashList.length();
455 // Map in the image slices. 455 // Map in the image slices.
456 if (length && slashList->item(0)->isBorderImageSliceValue()) 456 if (length && slashList.item(0).isBorderImageSliceValue())
457 mapNinePieceImageSlice(state, slashList->item(0), image); 457 mapNinePieceImageSlice(state, slashList.item(0), image);
458 458
459 // Map in the border slices. 459 // Map in the border slices.
460 if (length > 1) 460 if (length > 1)
461 image.setBorderSlices(mapNinePieceImageQuad(state, slashList->it em(1))); 461 image.setBorderSlices(mapNinePieceImageQuad(state, slashList.ite m(1)));
462 462
463 // Map in the outset. 463 // Map in the outset.
464 if (length > 2) 464 if (length > 2)
465 image.setOutset(mapNinePieceImageQuad(state, slashList->item(2)) ); 465 image.setOutset(mapNinePieceImageQuad(state, slashList.item(2))) ;
466 } else if (current->isPrimitiveValue()) { 466 } else if (current.isPrimitiveValue()) {
467 // Set the appropriate rules for stretch/round/repeat of the slices. 467 // Set the appropriate rules for stretch/round/repeat of the slices.
468 mapNinePieceImageRepeat(state, current, image); 468 mapNinePieceImageRepeat(state, current, image);
469 } 469 }
470 } 470 }
471 471
472 if (property == CSSPropertyWebkitBorderImage) { 472 if (property == CSSPropertyWebkitBorderImage) {
473 // We have to preserve the legacy behavior of -webkit-border-image and m ake the border slices 473 // We have to preserve the legacy behavior of -webkit-border-image and m ake the border slices
474 // also set the border widths. We don't need to worry about percentages, since we don't even support 474 // also set the border widths. We don't need to worry about percentages, since we don't even support
475 // those on real borders yet. 475 // those on real borders yet.
476 if (image.borderSlices().top().isLength() && image.borderSlices().top(). length().isFixed()) 476 if (image.borderSlices().top().isLength() && image.borderSlices().top(). length().isFixed())
477 state.style()->setBorderTopWidth(image.borderSlices().top().length() .value()); 477 state.style()->setBorderTopWidth(image.borderSlices().top().length() .value());
478 if (image.borderSlices().right().isLength() && image.borderSlices().righ t().length().isFixed()) 478 if (image.borderSlices().right().isLength() && image.borderSlices().righ t().length().isFixed())
479 state.style()->setBorderRightWidth(image.borderSlices().right().leng th().value()); 479 state.style()->setBorderRightWidth(image.borderSlices().right().leng th().value());
480 if (image.borderSlices().bottom().isLength() && image.borderSlices().bot tom().length().isFixed()) 480 if (image.borderSlices().bottom().isLength() && image.borderSlices().bot tom().length().isFixed())
481 state.style()->setBorderBottomWidth(image.borderSlices().bottom().le ngth().value()); 481 state.style()->setBorderBottomWidth(image.borderSlices().bottom().le ngth().value());
482 if (image.borderSlices().left().isLength() && image.borderSlices().left( ).length().isFixed()) 482 if (image.borderSlices().left().isLength() && image.borderSlices().left( ).length().isFixed())
483 state.style()->setBorderLeftWidth(image.borderSlices().left().length ().value()); 483 state.style()->setBorderLeftWidth(image.borderSlices().left().length ().value());
484 } 484 }
485 } 485 }
486 486
487 void CSSToStyleMap::mapNinePieceImageSlice(StyleResolverState&, CSSValue* value, NinePieceImage& image) 487 void CSSToStyleMap::mapNinePieceImageSlice(StyleResolverState&, NullableCSSValue value, NinePieceImage& image)
488 { 488 {
489 if (!value || !value->isBorderImageSliceValue()) 489 if (!value || !value->isBorderImageSliceValue())
490 return; 490 return;
491 491
492 // Retrieve the border image value. 492 // Retrieve the border image value.
493 CSSBorderImageSliceValue* borderImageSlice = toCSSBorderImageSliceValue(valu e); 493 CSSBorderImageSliceValue* borderImageSlice = toCSSBorderImageSliceValue(valu e);
494 494
495 // Set up a length box to represent our image slices. 495 // Set up a length box to represent our image slices.
496 LengthBox box; 496 LengthBox box;
497 Quad* slices = borderImageSlice->slices(); 497 Quad* slices = borderImageSlice->slices();
(...skipping 23 matching lines...) Expand all
521 { 521 {
522 if (value.isNumber()) 522 if (value.isNumber())
523 return value.getDoubleValue(); 523 return value.getDoubleValue();
524 if (value.isPercentage()) 524 if (value.isPercentage())
525 return Length(value.getDoubleValue(), Percent); 525 return Length(value.getDoubleValue(), Percent);
526 if (value.getValueID() != CSSValueAuto) 526 if (value.getValueID() != CSSValueAuto)
527 return value.computeLength<Length>(conversionData); 527 return value.computeLength<Length>(conversionData);
528 return Length(Auto); 528 return Length(Auto);
529 } 529 }
530 530
531 BorderImageLengthBox CSSToStyleMap::mapNinePieceImageQuad(StyleResolverState& st ate, CSSValue* value) 531 BorderImageLengthBox CSSToStyleMap::mapNinePieceImageQuad(StyleResolverState& st ate, NullableCSSValue value)
532 { 532 {
533 if (!value || !value->isPrimitiveValue()) 533 if (!value || !value->isPrimitiveValue())
534 return BorderImageLengthBox(Length(Auto)); 534 return BorderImageLengthBox(Length(Auto));
535 535
536 Quad* slices = toCSSPrimitiveValue(value)->getQuadValue(); 536 Quad* slices = toCSSPrimitiveValue(value)->getQuadValue();
537 537
538 // Set up a border image length box to represent our image slices. 538 // Set up a border image length box to represent our image slices.
539 return BorderImageLengthBox( 539 return BorderImageLengthBox(
540 toBorderImageLength(*slices->top(), state.cssToLengthConversionData()), 540 toBorderImageLength(*slices->top(), state.cssToLengthConversionData()),
541 toBorderImageLength(*slices->right(), state.cssToLengthConversionData()) , 541 toBorderImageLength(*slices->right(), state.cssToLengthConversionData()) ,
542 toBorderImageLength(*slices->bottom(), state.cssToLengthConversionData() ), 542 toBorderImageLength(*slices->bottom(), state.cssToLengthConversionData() ),
543 toBorderImageLength(*slices->left(), state.cssToLengthConversionData())) ; 543 toBorderImageLength(*slices->left(), state.cssToLengthConversionData())) ;
544 } 544 }
545 545
546 void CSSToStyleMap::mapNinePieceImageRepeat(StyleResolverState&, CSSValue* value , NinePieceImage& image) 546 void CSSToStyleMap::mapNinePieceImageRepeat(StyleResolverState&, NullableCSSValu e value, NinePieceImage& image)
547 { 547 {
548 if (!value || !value->isPrimitiveValue()) 548 if (!value || !value->isPrimitiveValue())
549 return; 549 return;
550 550
551 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 551 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value);
552 Pair* pair = primitiveValue->getPairValue(); 552 Pair* pair = primitiveValue->getPairValue();
553 if (!pair || !pair->first() || !pair->second()) 553 if (!pair || !pair->first() || !pair->second())
554 return; 554 return;
555 555
556 CSSValueID firstIdentifier = pair->first()->getValueID(); 556 CSSValueID firstIdentifier = pair->first()->getValueID();
(...skipping 28 matching lines...) Expand all
585 verticalRule = SpaceImageRule; 585 verticalRule = SpaceImageRule;
586 break; 586 break;
587 default: // CSSValueRepeat 587 default: // CSSValueRepeat
588 verticalRule = RepeatImageRule; 588 verticalRule = RepeatImageRule;
589 break; 589 break;
590 } 590 }
591 image.setVerticalRule(verticalRule); 591 image.setVerticalRule(verticalRule);
592 } 592 }
593 593
594 }; 594 };
OLDNEW
« no previous file with comments | « Source/core/css/resolver/CSSToStyleMap.h ('k') | Source/core/css/resolver/ElementStyleResources.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698