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

Side by Side Diff: Source/core/css/ComputedStyleCSSValueMapping.cpp

Issue 1225553002: CSSValue Immediates: Make CSSPrimitiveValue a container (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@cssvalue_patch_1
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
« no previous file with comments | « Source/core/css/ComputedStyleCSSValueMapping.h ('k') | Source/core/css/Counter.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004 Zack Rusin <zack@kde.org> 2 * Copyright (C) 2004 Zack Rusin <zack@kde.org>
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com>
6 * Copyright (C) 2011 Sencha, Inc. All rights reserved. 6 * Copyright (C) 2011 Sencha, Inc. All rights reserved.
7 * Copyright (C) 2015 Google Inc. All rights reserved. 7 * Copyright (C) 2015 Google Inc. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public 10 * modify it under the terms of the GNU Lesser General Public
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 #include "platform/LengthFunctions.h" 55 #include "platform/LengthFunctions.h"
56 56
57 namespace blink { 57 namespace blink {
58 58
59 inline static bool isFlexOrGrid(Node* element) 59 inline static bool isFlexOrGrid(Node* element)
60 { 60 {
61 return element && element->ensureComputedStyle() 61 return element && element->ensureComputedStyle()
62 && element->ensureComputedStyle()->isDisplayFlexibleOrGridBox(); 62 && element->ensureComputedStyle()->isDisplayFlexibleOrGridBox();
63 } 63 }
64 64
65 inline static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> zoomAdjustedPixelValue(d ouble value, const ComputedStyle& style) 65 inline static CSSPrimitiveValue zoomAdjustedPixelValue(double value, const Compu tedStyle& style)
66 { 66 {
67 return cssValuePool().createValue(adjustFloatForAbsoluteZoom(value, style), CSSPrimitiveValue::CSS_PX); 67 return cssValuePool().createValue(adjustFloatForAbsoluteZoom(value, style), CSSPrimitiveValue::CSS_PX);
68 } 68 }
69 69
70 inline static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> zoomAdjustedNumberValue( double value, const ComputedStyle& style) 70 inline static CSSPrimitiveValue zoomAdjustedNumberValue(double value, const Comp utedStyle& style)
71 { 71 {
72 return cssValuePool().createValue(value / style.effectiveZoom(), CSSPrimitiv eValue::CSS_NUMBER); 72 return cssValuePool().createValue(value / style.effectiveZoom(), CSSPrimitiv eValue::CSS_NUMBER);
73 } 73 }
74 74
75 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> zoomAdjustedPixelValueForLength (const Length& length, const ComputedStyle& style) 75 static CSSPrimitiveValue zoomAdjustedPixelValueForLength(const Length& length, c onst ComputedStyle& style)
76 { 76 {
77 if (length.isFixed()) 77 if (length.isFixed())
78 return zoomAdjustedPixelValue(length.value(), style); 78 return zoomAdjustedPixelValue(length.value(), style);
79 return cssValuePool().createValue(length, style); 79 return cssValuePool().createValue(length, style);
80 } 80 }
81 81
82 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> pixelValueForUnzoomedLength(con st UnzoomedLength& unzoomedLength, const ComputedStyle& style) 82 static CSSPrimitiveValue pixelValueForUnzoomedLength(const UnzoomedLength& unzoo medLength, const ComputedStyle& style)
83 { 83 {
84 const Length& length = unzoomedLength.length(); 84 const Length& length = unzoomedLength.length();
85 if (length.isFixed()) 85 if (length.isFixed())
86 return cssValuePool().createValue(length.value(), CSSPrimitiveValue::CSS _PX); 86 return cssValuePool().createValue(length.value(), CSSPrimitiveValue::CSS _PX);
87 return cssValuePool().createValue(length, style); 87 return cssValuePool().createValue(length, style);
88 } 88 }
89 89
90 static PassRefPtrWillBeRawPtr<CSSValueList> createPositionListForLayer(CSSProper tyID propertyID, const FillLayer& layer, const ComputedStyle& style) 90 static PassRefPtrWillBeRawPtr<CSSValueList> createPositionListForLayer(CSSProper tyID propertyID, const FillLayer& layer, const ComputedStyle& style)
91 { 91 {
92 RefPtrWillBeRawPtr<CSSValueList> positionList = CSSValueList::createSpaceSep arated(); 92 RefPtrWillBeRawPtr<CSSValueList> positionList = CSSValueList::createSpaceSep arated();
93 if (layer.isBackgroundXOriginSet()) { 93 if (layer.isBackgroundXOriginSet()) {
94 ASSERT_UNUSED(propertyID, propertyID == CSSPropertyBackgroundPosition || propertyID == CSSPropertyWebkitMaskPosition); 94 ASSERT_UNUSED(propertyID, propertyID == CSSPropertyBackgroundPosition || propertyID == CSSPropertyWebkitMaskPosition);
95 positionList->append(cssValuePool().createValue(layer.backgroundXOrigin( ))); 95 positionList->append(cssValuePool().createValue(layer.backgroundXOrigin( )));
96 } 96 }
97 positionList->append(zoomAdjustedPixelValueForLength(layer.xPosition(), styl e)); 97 positionList->append(zoomAdjustedPixelValueForLength(layer.xPosition(), styl e));
98 if (layer.isBackgroundYOriginSet()) { 98 if (layer.isBackgroundYOriginSet()) {
99 ASSERT(propertyID == CSSPropertyBackgroundPosition || propertyID == CSSP ropertyWebkitMaskPosition); 99 ASSERT(propertyID == CSSPropertyBackgroundPosition || propertyID == CSSP ropertyWebkitMaskPosition);
100 positionList->append(cssValuePool().createValue(layer.backgroundYOrigin( ))); 100 positionList->append(cssValuePool().createValue(layer.backgroundYOrigin( )));
101 } 101 }
102 positionList->append(zoomAdjustedPixelValueForLength(layer.yPosition(), styl e)); 102 positionList->append(zoomAdjustedPixelValueForLength(layer.yPosition(), styl e));
103 return positionList.release(); 103 return positionList.release();
104 } 104 }
105 105
106 PassRefPtrWillBeRawPtr<CSSPrimitiveValue> ComputedStyleCSSValueMapping::currentC olorOrValidColor(const ComputedStyle& style, const StyleColor& color) 106 CSSPrimitiveValue ComputedStyleCSSValueMapping::currentColorOrValidColor(const C omputedStyle& style, const StyleColor& color)
107 { 107 {
108 // This function does NOT look at visited information, so that computed styl e doesn't expose that. 108 // This function does NOT look at visited information, so that computed styl e doesn't expose that.
109 return cssValuePool().createColorValue(color.resolve(style.color()).rgb()); 109 return cssValuePool().createColorValue(color.resolve(style.color()).rgb());
110 } 110 }
111 111
112 static CSSValue valueForFillSize(const FillSize& fillSize, const ComputedStyle& style) 112 static CSSValue valueForFillSize(const FillSize& fillSize, const ComputedStyle& style)
113 { 113 {
114 if (fillSize.type == Contain) 114 if (fillSize.type == Contain)
115 return cssValuePool().createIdentifierValue(CSSValueContain); 115 return cssValuePool().createIdentifierValue(CSSValueContain);
116 116
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 // So we should get the opposite length unit and see if it is auto. 188 // So we should get the opposite length unit and see if it is auto.
189 return cssValuePool().createIdentifierValue(CSSValueAuto); 189 return cssValuePool().createIdentifierValue(CSSValueAuto);
190 } 190 }
191 191
192 return zoomAdjustedPixelValueForLength(offset, style); 192 return zoomAdjustedPixelValueForLength(offset, style);
193 } 193 }
194 194
195 static PassRefPtrWillBeRawPtr<CSSBorderImageSliceValue> valueForNinePieceImageSl ice(const NinePieceImage& image) 195 static PassRefPtrWillBeRawPtr<CSSBorderImageSliceValue> valueForNinePieceImageSl ice(const NinePieceImage& image)
196 { 196 {
197 // Create the slices. 197 // Create the slices.
198 RefPtrWillBeRawPtr<CSSPrimitiveValue> top = nullptr; 198 NullableCSSValue top;
199 RefPtrWillBeRawPtr<CSSPrimitiveValue> right = nullptr; 199 NullableCSSValue right;
200 RefPtrWillBeRawPtr<CSSPrimitiveValue> bottom = nullptr; 200 NullableCSSValue bottom;
201 RefPtrWillBeRawPtr<CSSPrimitiveValue> left = nullptr; 201 NullableCSSValue left;
202 202
203 // TODO(alancutter): Make this code aware of calc lengths. 203 // TODO(alancutter): Make this code aware of calc lengths.
204 if (image.imageSlices().top().hasPercent()) 204 if (image.imageSlices().top().hasPercent())
205 top = cssValuePool().createValue(image.imageSlices().top().value(), CSSP rimitiveValue::CSS_PERCENTAGE); 205 top = cssValuePool().createValue(image.imageSlices().top().value(), CSSP rimitiveValue::CSS_PERCENTAGE);
206 else 206 else
207 top = cssValuePool().createValue(image.imageSlices().top().value(), CSSP rimitiveValue::CSS_NUMBER); 207 top = cssValuePool().createValue(image.imageSlices().top().value(), CSSP rimitiveValue::CSS_NUMBER);
208 208
209 if (image.imageSlices().right() == image.imageSlices().top() && image.imageS lices().bottom() == image.imageSlices().top() 209 if (image.imageSlices().right() == image.imageSlices().top() && image.imageS lices().bottom() == image.imageSlices().top()
210 && image.imageSlices().left() == image.imageSlices().top()) { 210 && image.imageSlices().left() == image.imageSlices().top()) {
211 right = top; 211 right = top;
(...skipping 19 matching lines...) Expand all
231 } else { 231 } else {
232 if (image.imageSlices().left().hasPercent()) 232 if (image.imageSlices().left().hasPercent())
233 left = cssValuePool().createValue(image.imageSlices().left() .value(), CSSPrimitiveValue::CSS_PERCENTAGE); 233 left = cssValuePool().createValue(image.imageSlices().left() .value(), CSSPrimitiveValue::CSS_PERCENTAGE);
234 else 234 else
235 left = cssValuePool().createValue(image.imageSlices().left() .value(), CSSPrimitiveValue::CSS_NUMBER); 235 left = cssValuePool().createValue(image.imageSlices().left() .value(), CSSPrimitiveValue::CSS_NUMBER);
236 } 236 }
237 } 237 }
238 } 238 }
239 239
240 RefPtrWillBeRawPtr<Quad> quad = Quad::create(); 240 RefPtrWillBeRawPtr<Quad> quad = Quad::create();
241 quad->setTop(top); 241 quad->setTop(toCSSPrimitiveValue(*top));
242 quad->setRight(right); 242 quad->setRight(toCSSPrimitiveValue(*right));
243 quad->setBottom(bottom); 243 quad->setBottom(toCSSPrimitiveValue(*bottom));
244 quad->setLeft(left); 244 quad->setLeft(toCSSPrimitiveValue(*left));
245 245
246 return CSSBorderImageSliceValue::create(cssValuePool().createValue(quad.rele ase()), image.fill()); 246 return CSSBorderImageSliceValue::create(cssValuePool().createValue(quad.rele ase()), image.fill());
247 } 247 }
248 248
249 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> valueForNinePieceImageQuad(cons t BorderImageLengthBox& box, const ComputedStyle& style) 249 static CSSPrimitiveValue valueForNinePieceImageQuad(const BorderImageLengthBox& box, const ComputedStyle& style)
250 { 250 {
251 // Create the slices. 251 // Create the slices.
252 RefPtrWillBeRawPtr<CSSPrimitiveValue> top = nullptr; 252 NullableCSSValue top;
253 RefPtrWillBeRawPtr<CSSPrimitiveValue> right = nullptr; 253 NullableCSSValue right;
254 RefPtrWillBeRawPtr<CSSPrimitiveValue> bottom = nullptr; 254 NullableCSSValue bottom;
255 RefPtrWillBeRawPtr<CSSPrimitiveValue> left = nullptr; 255 NullableCSSValue left;
256 256
257 if (box.top().isNumber()) 257 if (box.top().isNumber())
258 top = cssValuePool().createValue(box.top().number(), CSSPrimitiveValue:: CSS_NUMBER); 258 top = cssValuePool().createValue(box.top().number(), CSSPrimitiveValue:: CSS_NUMBER);
259 else 259 else
260 top = cssValuePool().createValue(box.top().length(), style); 260 top = cssValuePool().createValue(box.top().length(), style);
261 261
262 if (box.right() == box.top() && box.bottom() == box.top() && box.left() == b ox.top()) { 262 if (box.right() == box.top() && box.bottom() == box.top() && box.left() == b ox.top()) {
263 right = top; 263 right = top;
264 bottom = top; 264 bottom = top;
265 left = top; 265 left = top;
(...skipping 17 matching lines...) Expand all
283 } else { 283 } else {
284 if (box.left().isNumber()) 284 if (box.left().isNumber())
285 left = cssValuePool().createValue(box.left().number(), CSSPr imitiveValue::CSS_NUMBER); 285 left = cssValuePool().createValue(box.left().number(), CSSPr imitiveValue::CSS_NUMBER);
286 else 286 else
287 left = cssValuePool().createValue(box.left().length(), style ); 287 left = cssValuePool().createValue(box.left().length(), style );
288 } 288 }
289 } 289 }
290 } 290 }
291 291
292 RefPtrWillBeRawPtr<Quad> quad = Quad::create(); 292 RefPtrWillBeRawPtr<Quad> quad = Quad::create();
293 quad->setTop(top); 293 quad->setTop(toCSSPrimitiveValue(*top));
294 quad->setRight(right); 294 quad->setRight(toCSSPrimitiveValue(*right));
295 quad->setBottom(bottom); 295 quad->setBottom(toCSSPrimitiveValue(*bottom));
296 quad->setLeft(left); 296 quad->setLeft(toCSSPrimitiveValue(*left));
297 297
298 return cssValuePool().createValue(quad.release()); 298 return cssValuePool().createValue(quad.release());
299 } 299 }
300 300
301 static CSSValueID valueForRepeatRule(int rule) 301 static CSSValueID valueForRepeatRule(int rule)
302 { 302 {
303 switch (rule) { 303 switch (rule) {
304 case RepeatImageRule: 304 case RepeatImageRule:
305 return CSSValueRepeat; 305 return CSSValueRepeat;
306 case RoundImageRule: 306 case RoundImageRule:
307 return CSSValueRound; 307 return CSSValueRound;
308 case SpaceImageRule: 308 case SpaceImageRule:
309 return CSSValueSpace; 309 return CSSValueSpace;
310 default: 310 default:
311 return CSSValueStretch; 311 return CSSValueStretch;
312 } 312 }
313 } 313 }
314 314
315 static CSSValue valueForNinePieceImageRepeat(const NinePieceImage& image) 315 static CSSValue valueForNinePieceImageRepeat(const NinePieceImage& image)
316 { 316 {
317 RefPtrWillBeRawPtr<CSSPrimitiveValue> horizontalRepeat = nullptr; 317 NullableCSSValue horizontalRepeat;
318 RefPtrWillBeRawPtr<CSSPrimitiveValue> verticalRepeat = nullptr; 318 NullableCSSValue verticalRepeat;
319 319
320 horizontalRepeat = cssValuePool().createIdentifierValue(valueForRepeatRule(i mage.horizontalRule())); 320 horizontalRepeat = cssValuePool().createIdentifierValue(valueForRepeatRule(i mage.horizontalRule()));
321 if (image.horizontalRule() == image.verticalRule()) 321 if (image.horizontalRule() == image.verticalRule())
322 verticalRepeat = horizontalRepeat; 322 verticalRepeat = horizontalRepeat;
323 else 323 else
324 verticalRepeat = cssValuePool().createIdentifierValue(valueForRepeatRule (image.verticalRule())); 324 verticalRepeat = cssValuePool().createIdentifierValue(valueForRepeatRule (image.verticalRule()));
325 return cssValuePool().createValue(Pair::create(horizontalRepeat.release(), v erticalRepeat.release(), Pair::DropIdenticalValues)); 325 return cssValuePool().createValue(Pair::create(toCSSPrimitiveValue(*horizont alRepeat), toCSSPrimitiveValue(*verticalRepeat), Pair::DropIdenticalValues));
326 } 326 }
327 327
328 static CSSValue valueForNinePieceImage(const NinePieceImage& image, const Comput edStyle& style) 328 static CSSValue valueForNinePieceImage(const NinePieceImage& image, const Comput edStyle& style)
329 { 329 {
330 if (!image.hasImage()) 330 if (!image.hasImage())
331 return cssValuePool().createIdentifierValue(CSSValueNone); 331 return cssValuePool().createIdentifierValue(CSSValueNone);
332 332
333 // Image first. 333 // Image first.
334 NullableCSSValue imageValue; 334 NullableCSSValue imageValue;
335 if (image.image()) 335 if (image.image())
(...skipping 12 matching lines...) Expand all
348 CSSValue repeat = valueForNinePieceImageRepeat(image); 348 CSSValue repeat = valueForNinePieceImageRepeat(image);
349 349
350 return createBorderImageValue(imageValue, imageSlices, borderSlices, outset, repeat); 350 return createBorderImageValue(imageValue, imageSlices, borderSlices, outset, repeat);
351 } 351 }
352 352
353 static CSSValue valueForReflection(const StyleReflection* reflection, const Comp utedStyle& style) 353 static CSSValue valueForReflection(const StyleReflection* reflection, const Comp utedStyle& style)
354 { 354 {
355 if (!reflection) 355 if (!reflection)
356 return cssValuePool().createIdentifierValue(CSSValueNone); 356 return cssValuePool().createIdentifierValue(CSSValueNone);
357 357
358 RefPtrWillBeRawPtr<CSSPrimitiveValue> offset = nullptr; 358 NullableCSSValue offset;
359 // TODO(alancutter): Make this work correctly for calc lengths. 359 // TODO(alancutter): Make this work correctly for calc lengths.
360 if (reflection->offset().hasPercent()) 360 if (reflection->offset().hasPercent())
361 offset = cssValuePool().createValue(reflection->offset().percent(), CSSP rimitiveValue::CSS_PERCENTAGE); 361 offset = cssValuePool().createValue(reflection->offset().percent(), CSSP rimitiveValue::CSS_PERCENTAGE);
362 else 362 else
363 offset = zoomAdjustedPixelValue(reflection->offset().value(), style); 363 offset = zoomAdjustedPixelValue(reflection->offset().value(), style);
364 364
365 RefPtrWillBeRawPtr<CSSPrimitiveValue> direction = nullptr; 365 NullableCSSValue direction;
366 switch (reflection->direction()) { 366 switch (reflection->direction()) {
367 case ReflectionBelow: 367 case ReflectionBelow:
368 direction = cssValuePool().createIdentifierValue(CSSValueBelow); 368 direction = cssValuePool().createIdentifierValue(CSSValueBelow);
369 break; 369 break;
370 case ReflectionAbove: 370 case ReflectionAbove:
371 direction = cssValuePool().createIdentifierValue(CSSValueAbove); 371 direction = cssValuePool().createIdentifierValue(CSSValueAbove);
372 break; 372 break;
373 case ReflectionLeft: 373 case ReflectionLeft:
374 direction = cssValuePool().createIdentifierValue(CSSValueLeft); 374 direction = cssValuePool().createIdentifierValue(CSSValueLeft);
375 break; 375 break;
376 case ReflectionRight: 376 case ReflectionRight:
377 direction = cssValuePool().createIdentifierValue(CSSValueRight); 377 direction = cssValuePool().createIdentifierValue(CSSValueRight);
378 break; 378 break;
379 } 379 }
380 380
381 return CSSReflectValue::create(direction.release(), offset.release(), valueF orNinePieceImage(reflection->mask(), style)); 381 return CSSReflectValue::create(toCSSPrimitiveValue(*direction), toCSSPrimiti veValue(*offset), valueForNinePieceImage(reflection->mask(), style));
382 } 382 }
383 383
384 static ItemPosition resolveAlignmentAuto(ItemPosition position, Node* element) 384 static ItemPosition resolveAlignmentAuto(ItemPosition position, Node* element)
385 { 385 {
386 if (position != ItemPositionAuto) 386 if (position != ItemPositionAuto)
387 return position; 387 return position;
388 388
389 return isFlexOrGrid(element) ? ItemPositionStretch : ItemPositionStart; 389 return isFlexOrGrid(element) ? ItemPositionStretch : ItemPositionStart;
390 } 390 }
391 391
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 { 425 {
426 RefPtrWillBeRawPtr<CSSValueList> ret = CSSValueList::createCommaSeparated(); 426 RefPtrWillBeRawPtr<CSSValueList> ret = CSSValueList::createCommaSeparated();
427 const FillLayer* currLayer = &style.backgroundLayers(); 427 const FillLayer* currLayer = &style.backgroundLayers();
428 for (; currLayer; currLayer = currLayer->next()) { 428 for (; currLayer; currLayer = currLayer->next()) {
429 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSlashSeparat ed(); 429 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSlashSeparat ed();
430 RefPtrWillBeRawPtr<CSSValueList> beforeSlash = CSSValueList::createSpace Separated(); 430 RefPtrWillBeRawPtr<CSSValueList> beforeSlash = CSSValueList::createSpace Separated();
431 if (!currLayer->next()) { // color only for final layer 431 if (!currLayer->next()) { // color only for final layer
432 NullableCSSValue value = ComputedStyleCSSValueMapping::get(CSSProper tyBackgroundColor, style, layoutObject, styledNode, allowVisitedStyle); 432 NullableCSSValue value = ComputedStyleCSSValueMapping::get(CSSProper tyBackgroundColor, style, layoutObject, styledNode, allowVisitedStyle);
433 beforeSlash->append(*value); 433 beforeSlash->append(*value);
434 } 434 }
435 beforeSlash->append(currLayer->image() ? *currLayer->image()->cssValue() : cssValuePool().createIdentifierValue(CSSValueNone)); 435 beforeSlash->append(currLayer->image() ? *currLayer->image()->cssValue() : CSSValue(cssValuePool().createIdentifierValue(CSSValueNone)));
436 beforeSlash->append(valueForFillRepeat(currLayer->repeatX(), currLayer-> repeatY())); 436 beforeSlash->append(valueForFillRepeat(currLayer->repeatX(), currLayer-> repeatY()));
437 beforeSlash->append(cssValuePool().createValue(currLayer->attachment())) ; 437 beforeSlash->append(cssValuePool().createValue(currLayer->attachment())) ;
438 beforeSlash->append(createPositionListForLayer(CSSPropertyBackgroundPosi tion, *currLayer, style)); 438 beforeSlash->append(createPositionListForLayer(CSSPropertyBackgroundPosi tion, *currLayer, style));
439 list->append(beforeSlash); 439 list->append(beforeSlash);
440 RefPtrWillBeRawPtr<CSSValueList> afterSlash = CSSValueList::createSpaceS eparated(); 440 RefPtrWillBeRawPtr<CSSValueList> afterSlash = CSSValueList::createSpaceS eparated();
441 afterSlash->append(valueForFillSize(currLayer->size(), style)); 441 afterSlash->append(valueForFillSize(currLayer->size(), style));
442 afterSlash->append(cssValuePool().createValue(currLayer->origin())); 442 afterSlash->append(cssValuePool().createValue(currLayer->origin()));
443 afterSlash->append(cssValuePool().createValue(currLayer->clip())); 443 afterSlash->append(cssValuePool().createValue(currLayer->clip()));
444 list->append(afterSlash); 444 list->append(afterSlash);
445 ret->append(list); 445 ret->append(list);
(...skipping 19 matching lines...) Expand all
465 result->append(CSSPrimitiveValue::create(distribution)); 465 result->append(CSSPrimitiveValue::create(distribution));
466 if (distribution == ContentDistributionDefault || position != ContentPositio nAuto) 466 if (distribution == ContentDistributionDefault || position != ContentPositio nAuto)
467 result->append(CSSPrimitiveValue::create(position)); 467 result->append(CSSPrimitiveValue::create(position));
468 if ((position >= ContentPositionCenter || distribution != ContentDistributio nDefault) && overflowAlignment != OverflowAlignmentDefault) 468 if ((position >= ContentPositionCenter || distribution != ContentDistributio nDefault) && overflowAlignment != OverflowAlignmentDefault)
469 result->append(CSSPrimitiveValue::create(overflowAlignment)); 469 result->append(CSSPrimitiveValue::create(overflowAlignment));
470 ASSERT(result->length() > 0); 470 ASSERT(result->length() > 0);
471 ASSERT(result->length() <= 3); 471 ASSERT(result->length() <= 3);
472 return result.release(); 472 return result.release();
473 } 473 }
474 474
475 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> valueForLineHeight(const Comput edStyle& style) 475 static CSSPrimitiveValue valueForLineHeight(const ComputedStyle& style)
476 { 476 {
477 Length length = style.lineHeight(); 477 Length length = style.lineHeight();
478 if (length.isNegative()) 478 if (length.isNegative())
479 return cssValuePool().createIdentifierValue(CSSValueNormal); 479 return cssValuePool().createIdentifierValue(CSSValueNormal);
480 480
481 return zoomAdjustedPixelValue(floatValueForLength(length, style.fontDescript ion().specifiedSize()), style); 481 return zoomAdjustedPixelValue(floatValueForLength(length, style.fontDescript ion().specifiedSize()), style);
482 } 482 }
483 483
484 static CSSValueID identifierForFamily(const AtomicString& family) 484 static CSSValueID identifierForFamily(const AtomicString& family)
485 { 485 {
486 if (family == FontFamilyNames::webkit_cursive) 486 if (family == FontFamilyNames::webkit_cursive)
487 return CSSValueCursive; 487 return CSSValueCursive;
488 if (family == FontFamilyNames::webkit_fantasy) 488 if (family == FontFamilyNames::webkit_fantasy)
489 return CSSValueFantasy; 489 return CSSValueFantasy;
490 if (family == FontFamilyNames::webkit_monospace) 490 if (family == FontFamilyNames::webkit_monospace)
491 return CSSValueMonospace; 491 return CSSValueMonospace;
492 if (family == FontFamilyNames::webkit_pictograph) 492 if (family == FontFamilyNames::webkit_pictograph)
493 return CSSValueWebkitPictograph; 493 return CSSValueWebkitPictograph;
494 if (family == FontFamilyNames::webkit_sans_serif) 494 if (family == FontFamilyNames::webkit_sans_serif)
495 return CSSValueSansSerif; 495 return CSSValueSansSerif;
496 if (family == FontFamilyNames::webkit_serif) 496 if (family == FontFamilyNames::webkit_serif)
497 return CSSValueSerif; 497 return CSSValueSerif;
498 return CSSValueInvalid; 498 return CSSValueInvalid;
499 } 499 }
500 500
501 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> valueForFamily(const AtomicStri ng& family) 501 static CSSPrimitiveValue valueForFamily(const AtomicString& family)
502 { 502 {
503 if (CSSValueID familyIdentifier = identifierForFamily(family)) 503 if (CSSValueID familyIdentifier = identifierForFamily(family))
504 return cssValuePool().createIdentifierValue(familyIdentifier); 504 return cssValuePool().createIdentifierValue(familyIdentifier);
505 return cssValuePool().createValue(family.string(), CSSPrimitiveValue::CSS_CU STOM_IDENT); 505 return cssValuePool().createValue(family.string(), CSSPrimitiveValue::CSS_CU STOM_IDENT);
506 } 506 }
507 507
508 static PassRefPtrWillBeRawPtr<CSSValueList> valueForFontFamily(const ComputedSty le& style) 508 static PassRefPtrWillBeRawPtr<CSSValueList> valueForFontFamily(const ComputedSty le& style)
509 { 509 {
510 const FontFamily& firstFamily = style.fontDescription().family(); 510 const FontFamily& firstFamily = style.fontDescription().family();
511 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createCommaSeparated() ; 511 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createCommaSeparated() ;
512 for (const FontFamily* family = &firstFamily; family; family = family->next( )) 512 for (const FontFamily* family = &firstFamily; family; family = family->next( ))
513 list->append(valueForFamily(family->family())); 513 list->append(valueForFamily(family->family()));
514 return list.release(); 514 return list.release();
515 } 515 }
516 516
517 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> valueForFontSize(const Computed Style& style) 517 static CSSPrimitiveValue valueForFontSize(const ComputedStyle& style)
518 { 518 {
519 return zoomAdjustedPixelValue(style.fontDescription().computedSize(), style) ; 519 return zoomAdjustedPixelValue(style.fontDescription().computedSize(), style) ;
520 } 520 }
521 521
522 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> valueForFontStretch(const Compu tedStyle& style) 522 static CSSPrimitiveValue valueForFontStretch(const ComputedStyle& style)
523 { 523 {
524 return cssValuePool().createValue(style.fontDescription().stretch()); 524 return cssValuePool().createValue(style.fontDescription().stretch());
525 } 525 }
526 526
527 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> valueForFontStyle(const Compute dStyle& style) 527 static CSSPrimitiveValue valueForFontStyle(const ComputedStyle& style)
528 { 528 {
529 return cssValuePool().createValue(style.fontDescription().style()); 529 return cssValuePool().createValue(style.fontDescription().style());
530 } 530 }
531 531
532 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> valueForFontVariant(const Compu tedStyle& style) 532 static CSSPrimitiveValue valueForFontVariant(const ComputedStyle& style)
533 { 533 {
534 return cssValuePool().createValue(style.fontDescription().variant()); 534 return cssValuePool().createValue(style.fontDescription().variant());
535 } 535 }
536 536
537 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> valueForFontWeight(const Comput edStyle& style) 537 static CSSPrimitiveValue valueForFontWeight(const ComputedStyle& style)
538 { 538 {
539 return cssValuePool().createValue(style.fontDescription().weight()); 539 return cssValuePool().createValue(style.fontDescription().weight());
540 } 540 }
541 541
542 static CSSValue specifiedValueForGridTrackBreadth(const GridLength& trackBreadth , const ComputedStyle& style) 542 static CSSValue specifiedValueForGridTrackBreadth(const GridLength& trackBreadth , const ComputedStyle& style)
543 { 543 {
544 if (!trackBreadth.isLength()) 544 if (!trackBreadth.isLength())
545 return cssValuePool().createValue(trackBreadth.flex(), CSSPrimitiveValue ::CSS_FR); 545 return cssValuePool().createValue(trackBreadth.flex(), CSSPrimitiveValue ::CSS_FR);
546 546
547 const Length& trackBreadthLength = trackBreadth.length(); 547 const Length& trackBreadthLength = trackBreadth.length();
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
1008 return CSSValueInvalid; 1008 return CSSValueInvalid;
1009 } 1009 }
1010 1010
1011 static CSSValue valueForContentData(const ComputedStyle& style) 1011 static CSSValue valueForContentData(const ComputedStyle& style)
1012 { 1012 {
1013 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated() ; 1013 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createSpaceSeparated() ;
1014 for (const ContentData* contentData = style.contentData(); contentData; cont entData = contentData->next()) { 1014 for (const ContentData* contentData = style.contentData(); contentData; cont entData = contentData->next()) {
1015 if (contentData->isCounter()) { 1015 if (contentData->isCounter()) {
1016 const CounterContent* counter = toCounterContentData(contentData)->c ounter(); 1016 const CounterContent* counter = toCounterContentData(contentData)->c ounter();
1017 ASSERT(counter); 1017 ASSERT(counter);
1018 RefPtrWillBeRawPtr<CSSPrimitiveValue> identifier = cssValuePool().cr eateValue(counter->identifier(), CSSPrimitiveValue::CSS_CUSTOM_IDENT); 1018 CSSPrimitiveValue identifier = cssValuePool().createValue(counter->i dentifier(), CSSPrimitiveValue::CSS_CUSTOM_IDENT);
1019 RefPtrWillBeRawPtr<CSSPrimitiveValue> separator = cssValuePool().cre ateValue(counter->separator(), CSSPrimitiveValue::CSS_CUSTOM_IDENT); 1019 CSSPrimitiveValue separator = cssValuePool().createValue(counter->se parator(), CSSPrimitiveValue::CSS_CUSTOM_IDENT);
1020 CSSValueID listStyleIdent = CSSValueNone; 1020 CSSValueID listStyleIdent = CSSValueNone;
1021 if (counter->listStyle() != NoneListStyle) 1021 if (counter->listStyle() != NoneListStyle)
1022 listStyleIdent = static_cast<CSSValueID>(CSSValueDisc + counter- >listStyle()); 1022 listStyleIdent = static_cast<CSSValueID>(CSSValueDisc + counter- >listStyle());
1023 RefPtrWillBeRawPtr<CSSPrimitiveValue> listStyle = cssValuePool().cre ateIdentifierValue(listStyleIdent); 1023 CSSPrimitiveValue listStyle = cssValuePool().createIdentifierValue(l istStyleIdent);
1024 list->append(cssValuePool().createValue(Counter::create(identifier.r elease(), listStyle.release(), separator.release()))); 1024 list->append(cssValuePool().createValue(Counter::create(identifier, listStyle, separator)));
1025 } else if (contentData->isImage()) { 1025 } else if (contentData->isImage()) {
1026 const StyleImage* image = toImageContentData(contentData)->image(); 1026 const StyleImage* image = toImageContentData(contentData)->image();
1027 ASSERT(image); 1027 ASSERT(image);
1028 list->append(*image->cssValue()); 1028 list->append(*image->cssValue());
1029 } else if (contentData->isText()) { 1029 } else if (contentData->isText()) {
1030 list->append(cssValuePool().createValue(toTextContentData(contentDat a)->text(), CSSPrimitiveValue::CSS_STRING)); 1030 list->append(cssValuePool().createValue(toTextContentData(contentDat a)->text(), CSSPrimitiveValue::CSS_STRING));
1031 } else if (contentData->isQuote()) { 1031 } else if (contentData->isQuote()) {
1032 const QuoteType quoteType = toQuoteContentData(contentData)->quote() ; 1032 const QuoteType quoteType = toQuoteContentData(contentData)->quote() ;
1033 list->append(cssValuePool().createIdentifierValue(valueForQuoteType( quoteType))); 1033 list->append(cssValuePool().createIdentifierValue(valueForQuoteType( quoteType)));
1034 } else { 1034 } else {
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1146 verticalRadii->append(bottomRightRadius->item(1)); 1146 verticalRadii->append(bottomRightRadius->item(1));
1147 if (showVerticalBottomLeft) 1147 if (showVerticalBottomLeft)
1148 verticalRadii->append(bottomLeftRadius->item(1)); 1148 verticalRadii->append(bottomLeftRadius->item(1));
1149 1149
1150 if (!verticalRadii->equals(toCSSValueList(list->item(0)))) 1150 if (!verticalRadii->equals(toCSSValueList(list->item(0))))
1151 list->append(verticalRadii.release()); 1151 list->append(verticalRadii.release());
1152 1152
1153 return list.release(); 1153 return list.release();
1154 } 1154 }
1155 1155
1156 static PassRefPtrWillBeRawPtr<CSSPrimitiveValue> glyphOrientationToCSSPrimitiveV alue(EGlyphOrientation orientation) 1156 static NullableCSSValue glyphOrientationToCSSPrimitiveValue(EGlyphOrientation or ientation)
1157 { 1157 {
1158 switch (orientation) { 1158 switch (orientation) {
1159 case GO_0DEG: 1159 case GO_0DEG:
1160 return CSSPrimitiveValue::create(0.0f, CSSPrimitiveValue::CSS_DEG); 1160 return CSSPrimitiveValue::create(0.0f, CSSPrimitiveValue::CSS_DEG);
1161 case GO_90DEG: 1161 case GO_90DEG:
1162 return CSSPrimitiveValue::create(90.0f, CSSPrimitiveValue::CSS_DEG); 1162 return CSSPrimitiveValue::create(90.0f, CSSPrimitiveValue::CSS_DEG);
1163 case GO_180DEG: 1163 case GO_180DEG:
1164 return CSSPrimitiveValue::create(180.0f, CSSPrimitiveValue::CSS_DEG); 1164 return CSSPrimitiveValue::create(180.0f, CSSPrimitiveValue::CSS_DEG);
1165 case GO_270DEG: 1165 case GO_270DEG:
1166 return CSSPrimitiveValue::create(270.0f, CSSPrimitiveValue::CSS_DEG); 1166 return CSSPrimitiveValue::create(270.0f, CSSPrimitiveValue::CSS_DEG);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 return CSSPrimitiveValue::createColor(color.rgb()); 1223 return CSSPrimitiveValue::createColor(color.rgb());
1224 } 1224 }
1225 1225
1226 static inline String serializeAsFragmentIdentifier(const AtomicString& resource) 1226 static inline String serializeAsFragmentIdentifier(const AtomicString& resource)
1227 { 1227 {
1228 return "#" + resource; 1228 return "#" + resource;
1229 } 1229 }
1230 1230
1231 CSSValue ComputedStyleCSSValueMapping::valueForShadowData(const ShadowData& shad ow, const ComputedStyle& style, bool useSpread) 1231 CSSValue ComputedStyleCSSValueMapping::valueForShadowData(const ShadowData& shad ow, const ComputedStyle& style, bool useSpread)
1232 { 1232 {
1233 RefPtrWillBeRawPtr<CSSPrimitiveValue> x = zoomAdjustedPixelValue(shadow.x(), style); 1233 CSSPrimitiveValue x = zoomAdjustedPixelValue(shadow.x(), style);
1234 RefPtrWillBeRawPtr<CSSPrimitiveValue> y = zoomAdjustedPixelValue(shadow.y(), style); 1234 CSSPrimitiveValue y = zoomAdjustedPixelValue(shadow.y(), style);
1235 RefPtrWillBeRawPtr<CSSPrimitiveValue> blur = zoomAdjustedPixelValue(shadow.b lur(), style); 1235 CSSPrimitiveValue blur = zoomAdjustedPixelValue(shadow.blur(), style);
1236 RefPtrWillBeRawPtr<CSSPrimitiveValue> spread = useSpread ? zoomAdjustedPixel Value(shadow.spread(), style) : PassRefPtrWillBeRawPtr<CSSPrimitiveValue>(nullpt r); 1236 NullableCSSValue spread = useSpread ? NullableCSSValue(zoomAdjustedPixelValu e(shadow.spread(), style)) : nullptr;
1237 RefPtrWillBeRawPtr<CSSPrimitiveValue> shadowStyle = shadow.style() == Normal ? PassRefPtrWillBeRawPtr<CSSPrimitiveValue>(nullptr) : cssValuePool().createIde ntifierValue(CSSValueInset); 1237 NullableCSSValue shadowStyle = shadow.style() == Normal ? nullptr : Nullable CSSValue(cssValuePool().createIdentifierValue(CSSValueInset));
1238 RefPtrWillBeRawPtr<CSSPrimitiveValue> color = currentColorOrValidColor(style , shadow.color()); 1238 CSSPrimitiveValue color = currentColorOrValidColor(style, shadow.color());
1239 return CSSShadowValue::create(x.release(), y.release(), blur.release(), spre ad.release(), shadowStyle.release(), color.release()); 1239 return CSSShadowValue::create(x, y, blur, spread, shadowStyle, color);
1240 } 1240 }
1241 1241
1242 CSSValue ComputedStyleCSSValueMapping::valueForShadowList(const ShadowList* shad owList, const ComputedStyle& style, bool useSpread) 1242 CSSValue ComputedStyleCSSValueMapping::valueForShadowList(const ShadowList* shad owList, const ComputedStyle& style, bool useSpread)
1243 { 1243 {
1244 if (!shadowList) 1244 if (!shadowList)
1245 return cssValuePool().createIdentifierValue(CSSValueNone); 1245 return cssValuePool().createIdentifierValue(CSSValueNone);
1246 1246
1247 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createCommaSeparated() ; 1247 RefPtrWillBeRawPtr<CSSValueList> list = CSSValueList::createCommaSeparated() ;
1248 size_t shadowCount = shadowList->shadows().size(); 1248 size_t shadowCount = shadowList->shadows().size();
1249 for (size_t i = 0; i < shadowCount; ++i) 1249 for (size_t i = 0; i < shadowCount; ++i)
(...skipping 1351 matching lines...) Expand 10 before | Expand all | Expand 10 after
2601 return zoomAdjustedPixelValueForLength(svgStyle.baselineShiftValue() , style); 2601 return zoomAdjustedPixelValueForLength(svgStyle.baselineShiftValue() , style);
2602 } 2602 }
2603 ASSERT_NOT_REACHED(); 2603 ASSERT_NOT_REACHED();
2604 return nullptr; 2604 return nullptr;
2605 } 2605 }
2606 case CSSPropertyBufferedRendering: 2606 case CSSPropertyBufferedRendering:
2607 return CSSPrimitiveValue::create(svgStyle.bufferedRendering()); 2607 return CSSPrimitiveValue::create(svgStyle.bufferedRendering());
2608 case CSSPropertyGlyphOrientationHorizontal: 2608 case CSSPropertyGlyphOrientationHorizontal:
2609 return glyphOrientationToCSSPrimitiveValue(svgStyle.glyphOrientationHori zontal()); 2609 return glyphOrientationToCSSPrimitiveValue(svgStyle.glyphOrientationHori zontal());
2610 case CSSPropertyGlyphOrientationVertical: { 2610 case CSSPropertyGlyphOrientationVertical: {
2611 if (RefPtrWillBeRawPtr<CSSPrimitiveValue> value = glyphOrientationToCSSP rimitiveValue(svgStyle.glyphOrientationVertical())) 2611 if (NullableCSSValue value = glyphOrientationToCSSPrimitiveValue(svgStyl e.glyphOrientationVertical()))
2612 return value.release(); 2612 return value;
2613 if (svgStyle.glyphOrientationVertical() == GO_AUTO) 2613 if (svgStyle.glyphOrientationVertical() == GO_AUTO)
2614 return CSSPrimitiveValue::createIdentifier(CSSValueAuto); 2614 return CSSPrimitiveValue::createIdentifier(CSSValueAuto);
2615 return nullptr; 2615 return nullptr;
2616 } 2616 }
2617 case CSSPropertyPaintOrder: 2617 case CSSPropertyPaintOrder:
2618 return paintOrderToCSSValueList(svgStyle.paintOrder()); 2618 return paintOrderToCSSValueList(svgStyle.paintOrder());
2619 case CSSPropertyVectorEffect: 2619 case CSSPropertyVectorEffect:
2620 return CSSPrimitiveValue::create(svgStyle.vectorEffect()); 2620 return CSSPrimitiveValue::create(svgStyle.vectorEffect());
2621 case CSSPropertyMaskType: 2621 case CSSPropertyMaskType:
2622 return CSSPrimitiveValue::create(svgStyle.maskType()); 2622 return CSSPrimitiveValue::create(svgStyle.maskType());
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
2701 case CSSPropertyAll: 2701 case CSSPropertyAll:
2702 return nullptr; 2702 return nullptr;
2703 default: 2703 default:
2704 break; 2704 break;
2705 } 2705 }
2706 ASSERT_NOT_REACHED(); 2706 ASSERT_NOT_REACHED();
2707 return nullptr; 2707 return nullptr;
2708 } 2708 }
2709 2709
2710 } 2710 }
OLDNEW
« no previous file with comments | « Source/core/css/ComputedStyleCSSValueMapping.h ('k') | Source/core/css/Counter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698