OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * * Redistributions of source code must retain the above copyright | 4 * * Redistributions of source code must retain the above copyright |
5 * notice, this list of conditions and the following disclaimer. | 5 * notice, this list of conditions and the following disclaimer. |
6 * * Redistributions in binary form must reproduce the above | 6 * * Redistributions in binary form must reproduce the above |
7 * copyright notice, this list of conditions and the following disclaimer | 7 * copyright notice, this list of conditions and the following disclaimer |
8 * in the documentation and/or other materials provided with the | 8 * in the documentation and/or other materials provided with the |
9 * distribution. | 9 * distribution. |
10 * * Neither the name of Google Inc. nor the names of its | 10 * * Neither the name of Google Inc. nor the names of its |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 | 57 |
58 // Fractional unit. | 58 // Fractional unit. |
59 if (primitiveValue->isFlex()) | 59 if (primitiveValue->isFlex()) |
60 return GridLength(primitiveValue->getDoubleValue()); | 60 return GridLength(primitiveValue->getDoubleValue()); |
61 | 61 |
62 return StyleBuilderConverter::convertLengthOrAuto(state, CSSValue(*primitive
Value)); | 62 return StyleBuilderConverter::convertLengthOrAuto(state, CSSValue(*primitive
Value)); |
63 } | 63 } |
64 | 64 |
65 } // namespace | 65 } // namespace |
66 | 66 |
67 PassRefPtr<StyleReflection> StyleBuilderConverter::convertBoxReflect(StyleResolv
erState& state, CSSValue value) | 67 PassRefPtr<StyleReflection> StyleBuilderConverter::convertBoxReflect(StyleResolv
erState& state, const CSSValue& value) |
68 { | 68 { |
69 if (value.isPrimitiveValue()) { | 69 if (value.isPrimitiveValue()) { |
70 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); | 70 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); |
71 return ComputedStyle::initialBoxReflect(); | 71 return ComputedStyle::initialBoxReflect(); |
72 } | 72 } |
73 | 73 |
74 CSSReflectValue& reflectValue = toCSSReflectValue(value); | 74 CSSReflectValue& reflectValue = toCSSReflectValue(value); |
75 RefPtr<StyleReflection> reflection = StyleReflection::create(); | 75 RefPtr<StyleReflection> reflection = StyleReflection::create(); |
76 reflection->setDirection(*reflectValue.direction()); | 76 reflection->setDirection(*reflectValue.direction()); |
77 if (reflectValue.offset()) | 77 if (reflectValue.offset()) |
78 reflection->setOffset(reflectValue.offset()->convertToLength(state.cssTo
LengthConversionData())); | 78 reflection->setOffset(reflectValue.offset()->convertToLength(state.cssTo
LengthConversionData())); |
79 NinePieceImage mask; | 79 NinePieceImage mask; |
80 mask.setMaskDefaults(); | 80 mask.setMaskDefaults(); |
81 CSSToStyleMap::mapNinePieceImage(state, CSSPropertyWebkitBoxReflect, reflect
Value.mask(), mask); | 81 CSSToStyleMap::mapNinePieceImage(state, CSSPropertyWebkitBoxReflect, reflect
Value.mask(), mask); |
82 reflection->setMask(mask); | 82 reflection->setMask(mask); |
83 | 83 |
84 return reflection.release(); | 84 return reflection.release(); |
85 } | 85 } |
86 | 86 |
87 Color StyleBuilderConverter::convertColor(StyleResolverState& state, CSSValue va
lue, bool forVisitedLink) | 87 Color StyleBuilderConverter::convertColor(StyleResolverState& state, const CSSVa
lue& value, bool forVisitedLink) |
88 { | 88 { |
89 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 89 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
90 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa
lue, state.style()->color(), forVisitedLink); | 90 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa
lue, state.style()->color(), forVisitedLink); |
91 } | 91 } |
92 | 92 |
93 AtomicString StyleBuilderConverter::convertFragmentIdentifier(StyleResolverState
& state, CSSValue value) | 93 AtomicString StyleBuilderConverter::convertFragmentIdentifier(StyleResolverState
& state, const CSSValue& value) |
94 { | 94 { |
95 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 95 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
96 if (primitiveValue.isURI()) | 96 if (primitiveValue.isURI()) |
97 return SVGURIReference::fragmentIdentifierFromIRIString(primitiveValue.g
etStringValue(), state.element()->treeScope()); | 97 return SVGURIReference::fragmentIdentifierFromIRIString(primitiveValue.g
etStringValue(), state.element()->treeScope()); |
98 return nullAtom; | 98 return nullAtom; |
99 } | 99 } |
100 | 100 |
101 LengthBox StyleBuilderConverter::convertClip(StyleResolverState& state, CSSValue
value) | 101 LengthBox StyleBuilderConverter::convertClip(StyleResolverState& state, const CS
SValue& value) |
102 { | 102 { |
103 Rect* rect = toCSSPrimitiveValue(value).getRectValue(); | 103 Rect* rect = toCSSPrimitiveValue(value).getRectValue(); |
104 | 104 |
105 return LengthBox(convertLengthOrAuto(state, CSSValue(*rect->top())), | 105 return LengthBox(convertLengthOrAuto(state, CSSValue(*rect->top())), |
106 convertLengthOrAuto(state, CSSValue(*rect->right())), | 106 convertLengthOrAuto(state, CSSValue(*rect->right())), |
107 convertLengthOrAuto(state, CSSValue(*rect->bottom())), | 107 convertLengthOrAuto(state, CSSValue(*rect->bottom())), |
108 convertLengthOrAuto(state, CSSValue(*rect->left()))); | 108 convertLengthOrAuto(state, CSSValue(*rect->left()))); |
109 } | 109 } |
110 | 110 |
111 static FontDescription::GenericFamilyType convertGenericFamily(CSSValueID valueI
D) | 111 static FontDescription::GenericFamilyType convertGenericFamily(CSSValueID valueI
D) |
(...skipping 25 matching lines...) Expand all Loading... |
137 genericFamily = FontDescription::NoFamily; | 137 genericFamily = FontDescription::NoFamily; |
138 familyName = AtomicString(primitiveValue.getStringValue()); | 138 familyName = AtomicString(primitiveValue.getStringValue()); |
139 } else if (state.document().settings()) { | 139 } else if (state.document().settings()) { |
140 genericFamily = convertGenericFamily(primitiveValue.getValueID()); | 140 genericFamily = convertGenericFamily(primitiveValue.getValueID()); |
141 familyName = state.fontBuilder().genericFontFamilyName(genericFamily); | 141 familyName = state.fontBuilder().genericFontFamilyName(genericFamily); |
142 } | 142 } |
143 | 143 |
144 return !familyName.isEmpty(); | 144 return !familyName.isEmpty(); |
145 } | 145 } |
146 | 146 |
147 FontDescription::FamilyDescription StyleBuilderConverter::convertFontFamily(Styl
eResolverState& state, CSSValue value) | 147 FontDescription::FamilyDescription StyleBuilderConverter::convertFontFamily(Styl
eResolverState& state, const CSSValue& value) |
148 { | 148 { |
149 ASSERT(value.isValueList()); | 149 ASSERT(value.isValueList()); |
150 | 150 |
151 FontDescription::FamilyDescription desc(FontDescription::NoFamily); | 151 FontDescription::FamilyDescription desc(FontDescription::NoFamily); |
152 FontFamily* currFamily = nullptr; | 152 FontFamily* currFamily = nullptr; |
153 | 153 |
154 for (auto& family : toCSSValueList(value)) { | 154 for (auto& family : toCSSValueList(value)) { |
155 FontDescription::GenericFamilyType genericFamily = FontDescription::NoFa
mily; | 155 FontDescription::GenericFamilyType genericFamily = FontDescription::NoFa
mily; |
156 AtomicString familyName; | 156 AtomicString familyName; |
157 | 157 |
(...skipping 10 matching lines...) Expand all Loading... |
168 | 168 |
169 currFamily->setFamily(familyName); | 169 currFamily->setFamily(familyName); |
170 | 170 |
171 if (genericFamily != FontDescription::NoFamily) | 171 if (genericFamily != FontDescription::NoFamily) |
172 desc.genericFamily = genericFamily; | 172 desc.genericFamily = genericFamily; |
173 } | 173 } |
174 | 174 |
175 return desc; | 175 return desc; |
176 } | 176 } |
177 | 177 |
178 PassRefPtr<FontFeatureSettings> StyleBuilderConverter::convertFontFeatureSetting
s(StyleResolverState& state, CSSValue value) | 178 PassRefPtr<FontFeatureSettings> StyleBuilderConverter::convertFontFeatureSetting
s(StyleResolverState& state, const CSSValue& value) |
179 { | 179 { |
180 if (value.isPrimitiveValue() && toCSSPrimitiveValue(value).getValueID() == C
SSValueNormal) | 180 if (value.isPrimitiveValue() && toCSSPrimitiveValue(value).getValueID() == C
SSValueNormal) |
181 return FontBuilder::initialFeatureSettings(); | 181 return FontBuilder::initialFeatureSettings(); |
182 | 182 |
183 CSSValueList& list = toCSSValueList(value); | 183 CSSValueList& list = toCSSValueList(value); |
184 RefPtr<FontFeatureSettings> settings = FontFeatureSettings::create(); | 184 RefPtr<FontFeatureSettings> settings = FontFeatureSettings::create(); |
185 int len = list.length(); | 185 int len = list.length(); |
186 for (int i = 0; i < len; ++i) { | 186 for (int i = 0; i < len; ++i) { |
187 CSSFontFeatureValue& feature = toCSSFontFeatureValue(list.item(i)); | 187 CSSFontFeatureValue& feature = toCSSFontFeatureValue(list.item(i)); |
188 settings->append(FontFeature(feature.tag(), feature.value())); | 188 settings->append(FontFeature(feature.tag(), feature.value())); |
(...skipping 11 matching lines...) Expand all Loading... |
200 CSSToLengthConversionData conversionData(state.style(), fontSizes, viewportS
ize, 1.0f); | 200 CSSToLengthConversionData conversionData(state.style(), fontSizes, viewportS
ize, 1.0f); |
201 if (primitiveValue.isLength()) | 201 if (primitiveValue.isLength()) |
202 return primitiveValue.computeLength<float>(conversionData); | 202 return primitiveValue.computeLength<float>(conversionData); |
203 if (primitiveValue.isCalculatedPercentageWithLength()) | 203 if (primitiveValue.isCalculatedPercentageWithLength()) |
204 return primitiveValue.cssCalcValue()->toCalcValue(conversionData)->evalu
ate(parentSize.value); | 204 return primitiveValue.cssCalcValue()->toCalcValue(conversionData)->evalu
ate(parentSize.value); |
205 | 205 |
206 ASSERT_NOT_REACHED(); | 206 ASSERT_NOT_REACHED(); |
207 return 0; | 207 return 0; |
208 } | 208 } |
209 | 209 |
210 FontDescription::Size StyleBuilderConverter::convertFontSize(StyleResolverState&
state, CSSValue value) | 210 FontDescription::Size StyleBuilderConverter::convertFontSize(StyleResolverState&
state, const CSSValue& value) |
211 { | 211 { |
212 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 212 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
213 | 213 |
214 FontDescription::Size parentSize(0, 0.0f, false); | 214 FontDescription::Size parentSize(0, 0.0f, false); |
215 | 215 |
216 // FIXME: Find out when parentStyle could be 0? | 216 // FIXME: Find out when parentStyle could be 0? |
217 if (state.parentStyle()) | 217 if (state.parentStyle()) |
218 parentSize = state.parentFontDescription().size(); | 218 parentSize = state.parentFontDescription().size(); |
219 | 219 |
220 if (CSSValueID valueID = primitiveValue.getValueID()) { | 220 if (CSSValueID valueID = primitiveValue.getValueID()) { |
(...skipping 18 matching lines...) Expand all Loading... |
239 } | 239 } |
240 | 240 |
241 bool parentIsAbsoluteSize = state.parentFontDescription().isAbsoluteSize(); | 241 bool parentIsAbsoluteSize = state.parentFontDescription().isAbsoluteSize(); |
242 | 242 |
243 if (primitiveValue.isPercentage()) | 243 if (primitiveValue.isPercentage()) |
244 return FontDescription::Size(0, (primitiveValue.getFloatValue() * parent
Size.value / 100.0f), parentIsAbsoluteSize); | 244 return FontDescription::Size(0, (primitiveValue.getFloatValue() * parent
Size.value / 100.0f), parentIsAbsoluteSize); |
245 | 245 |
246 return FontDescription::Size(0, computeFontSize(state, primitiveValue, paren
tSize), parentIsAbsoluteSize || !primitiveValue.isFontRelativeLength()); | 246 return FontDescription::Size(0, computeFontSize(state, primitiveValue, paren
tSize), parentIsAbsoluteSize || !primitiveValue.isFontRelativeLength()); |
247 } | 247 } |
248 | 248 |
249 float StyleBuilderConverter::convertFontSizeAdjust(StyleResolverState& state, CS
SValue value) | 249 float StyleBuilderConverter::convertFontSizeAdjust(StyleResolverState& state, co
nst CSSValue& value) |
250 { | 250 { |
251 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 251 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
252 if (primitiveValue.getValueID() == CSSValueNone) | 252 if (primitiveValue.getValueID() == CSSValueNone) |
253 return FontBuilder::initialSizeAdjust(); | 253 return FontBuilder::initialSizeAdjust(); |
254 | 254 |
255 ASSERT(primitiveValue.isNumber()); | 255 ASSERT(primitiveValue.isNumber()); |
256 return primitiveValue.getFloatValue(); | 256 return primitiveValue.getFloatValue(); |
257 } | 257 } |
258 | 258 |
259 FontWeight StyleBuilderConverter::convertFontWeight(StyleResolverState& state, C
SSValue value) | 259 FontWeight StyleBuilderConverter::convertFontWeight(StyleResolverState& state, c
onst CSSValue& value) |
260 { | 260 { |
261 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 261 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
262 switch (primitiveValue.getValueID()) { | 262 switch (primitiveValue.getValueID()) { |
263 case CSSValueBolder: | 263 case CSSValueBolder: |
264 return FontDescription::bolderWeight(state.parentStyle()->fontDescriptio
n().weight()); | 264 return FontDescription::bolderWeight(state.parentStyle()->fontDescriptio
n().weight()); |
265 case CSSValueLighter: | 265 case CSSValueLighter: |
266 return FontDescription::lighterWeight(state.parentStyle()->fontDescripti
on().weight()); | 266 return FontDescription::lighterWeight(state.parentStyle()->fontDescripti
on().weight()); |
267 default: | 267 default: |
268 return primitiveValue; | 268 return primitiveValue; |
269 } | 269 } |
270 } | 270 } |
271 | 271 |
272 FontDescription::VariantLigatures StyleBuilderConverter::convertFontVariantLigat
ures(StyleResolverState&, CSSValue value) | 272 FontDescription::VariantLigatures StyleBuilderConverter::convertFontVariantLigat
ures(StyleResolverState&, const CSSValue& value) |
273 { | 273 { |
274 if (value.isValueList()) { | 274 if (value.isValueList()) { |
275 FontDescription::VariantLigatures ligatures; | 275 FontDescription::VariantLigatures ligatures; |
276 CSSValueList& valueList = toCSSValueList(value); | 276 CSSValueList& valueList = toCSSValueList(value); |
277 for (size_t i = 0; i < valueList.length(); ++i) { | 277 for (size_t i = 0; i < valueList.length(); ++i) { |
278 CSSValue item = valueList.item(i); | 278 CSSValue item = valueList.item(i); |
279 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(item); | 279 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(item); |
280 switch (primitiveValue.getValueID()) { | 280 switch (primitiveValue.getValueID()) { |
281 case CSSValueNoCommonLigatures: | 281 case CSSValueNoCommonLigatures: |
282 ligatures.common = FontDescription::DisabledLigaturesState; | 282 ligatures.common = FontDescription::DisabledLigaturesState; |
(...skipping 25 matching lines...) Expand all Loading... |
308 } | 308 } |
309 } | 309 } |
310 return ligatures; | 310 return ligatures; |
311 } | 311 } |
312 | 312 |
313 ASSERT_WITH_SECURITY_IMPLICATION(value.isPrimitiveValue()); | 313 ASSERT_WITH_SECURITY_IMPLICATION(value.isPrimitiveValue()); |
314 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNormal); | 314 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNormal); |
315 return FontDescription::VariantLigatures(); | 315 return FontDescription::VariantLigatures(); |
316 } | 316 } |
317 | 317 |
318 EGlyphOrientation StyleBuilderConverter::convertGlyphOrientation(StyleResolverSt
ate&, CSSValue value) | 318 EGlyphOrientation StyleBuilderConverter::convertGlyphOrientation(StyleResolverSt
ate&, const CSSValue& value) |
319 { | 319 { |
320 if (!value.isPrimitiveValue()) | 320 if (!value.isPrimitiveValue()) |
321 return GO_0DEG; | 321 return GO_0DEG; |
322 | 322 |
323 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 323 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
324 if (primitiveValue.primitiveType() != CSSPrimitiveValue::CSS_DEG) | 324 if (primitiveValue.primitiveType() != CSSPrimitiveValue::CSS_DEG) |
325 return GO_0DEG; | 325 return GO_0DEG; |
326 | 326 |
327 float angle = fabsf(fmodf(primitiveValue.getFloatValue(), 360.0f)); | 327 float angle = fabsf(fmodf(primitiveValue.getFloatValue(), 360.0f)); |
328 | 328 |
329 if (angle <= 45.0f || angle > 315.0f) | 329 if (angle <= 45.0f || angle > 315.0f) |
330 return GO_0DEG; | 330 return GO_0DEG; |
331 if (angle > 45.0f && angle <= 135.0f) | 331 if (angle > 45.0f && angle <= 135.0f) |
332 return GO_90DEG; | 332 return GO_90DEG; |
333 if (angle > 135.0f && angle <= 225.0f) | 333 if (angle > 135.0f && angle <= 225.0f) |
334 return GO_180DEG; | 334 return GO_180DEG; |
335 return GO_270DEG; | 335 return GO_270DEG; |
336 } | 336 } |
337 | 337 |
338 StyleSelfAlignmentData StyleBuilderConverter::convertSelfOrDefaultAlignmentData(
StyleResolverState&, CSSValue value) | 338 StyleSelfAlignmentData StyleBuilderConverter::convertSelfOrDefaultAlignmentData(
StyleResolverState&, const CSSValue& value) |
339 { | 339 { |
340 StyleSelfAlignmentData alignmentData = ComputedStyle::initialSelfAlignment()
; | 340 StyleSelfAlignmentData alignmentData = ComputedStyle::initialSelfAlignment()
; |
341 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 341 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
342 if (Pair* pairValue = primitiveValue.getPairValue()) { | 342 if (Pair* pairValue = primitiveValue.getPairValue()) { |
343 if (pairValue->first()->getValueID() == CSSValueLegacy) { | 343 if (pairValue->first()->getValueID() == CSSValueLegacy) { |
344 alignmentData.setPositionType(LegacyPosition); | 344 alignmentData.setPositionType(LegacyPosition); |
345 alignmentData.setPosition(*pairValue->second()); | 345 alignmentData.setPosition(*pairValue->second()); |
346 } else { | 346 } else { |
347 alignmentData.setPosition(*pairValue->first()); | 347 alignmentData.setPosition(*pairValue->first()); |
348 alignmentData.setOverflow(*pairValue->second()); | 348 alignmentData.setOverflow(*pairValue->second()); |
349 } | 349 } |
350 } else { | 350 } else { |
351 alignmentData.setPosition(primitiveValue); | 351 alignmentData.setPosition(primitiveValue); |
352 } | 352 } |
353 return alignmentData; | 353 return alignmentData; |
354 } | 354 } |
355 | 355 |
356 StyleContentAlignmentData StyleBuilderConverter::convertContentAlignmentData(Sty
leResolverState&, CSSValue value) | 356 StyleContentAlignmentData StyleBuilderConverter::convertContentAlignmentData(Sty
leResolverState&, const CSSValue& value) |
357 { | 357 { |
358 StyleContentAlignmentData alignmentData = ComputedStyle::initialContentAlign
ment(); | 358 StyleContentAlignmentData alignmentData = ComputedStyle::initialContentAlign
ment(); |
359 CSSContentDistributionValue& contentValue = toCSSContentDistributionValue(va
lue); | 359 CSSContentDistributionValue& contentValue = toCSSContentDistributionValue(va
lue); |
360 if (contentValue.distribution()->getValueID() != CSSValueInvalid) | 360 if (contentValue.distribution()->getValueID() != CSSValueInvalid) |
361 alignmentData.setDistribution(*contentValue.distribution()); | 361 alignmentData.setDistribution(*contentValue.distribution()); |
362 if (contentValue.position()->getValueID() != CSSValueInvalid) | 362 if (contentValue.position()->getValueID() != CSSValueInvalid) |
363 alignmentData.setPosition(*contentValue.position()); | 363 alignmentData.setPosition(*contentValue.position()); |
364 if (contentValue.overflow()->getValueID() != CSSValueInvalid) | 364 if (contentValue.overflow()->getValueID() != CSSValueInvalid) |
365 alignmentData.setOverflow(*contentValue.overflow()); | 365 alignmentData.setOverflow(*contentValue.overflow()); |
366 return alignmentData; | 366 return alignmentData; |
367 } | 367 } |
368 | 368 |
369 GridAutoFlow StyleBuilderConverter::convertGridAutoFlow(StyleResolverState&, CSS
Value value) | 369 GridAutoFlow StyleBuilderConverter::convertGridAutoFlow(StyleResolverState&, con
st CSSValue& value) |
370 { | 370 { |
371 CSSValueList& list = toCSSValueList(value); | 371 CSSValueList& list = toCSSValueList(value); |
372 | 372 |
373 ASSERT(list.length() >= 1); | 373 ASSERT(list.length() >= 1); |
374 CSSPrimitiveValue* first = &toCSSPrimitiveValue(list.item(0)); | 374 CSSPrimitiveValue* first = &toCSSPrimitiveValue(list.item(0)); |
375 CSSPrimitiveValue* second = list.length() == 2 ? &toCSSPrimitiveValue(list.i
tem(1)) : nullptr; | 375 CSSPrimitiveValue* second = list.length() == 2 ? &toCSSPrimitiveValue(list.i
tem(1)) : nullptr; |
376 | 376 |
377 switch (first->getValueID()) { | 377 switch (first->getValueID()) { |
378 case CSSValueRow: | 378 case CSSValueRow: |
379 if (second && second->getValueID() == CSSValueDense) | 379 if (second && second->getValueID() == CSSValueDense) |
380 return AutoFlowRowDense; | 380 return AutoFlowRowDense; |
381 return AutoFlowRow; | 381 return AutoFlowRow; |
382 case CSSValueColumn: | 382 case CSSValueColumn: |
383 if (second && second->getValueID() == CSSValueDense) | 383 if (second && second->getValueID() == CSSValueDense) |
384 return AutoFlowColumnDense; | 384 return AutoFlowColumnDense; |
385 return AutoFlowColumn; | 385 return AutoFlowColumn; |
386 case CSSValueDense: | 386 case CSSValueDense: |
387 if (second && second->getValueID() == CSSValueColumn) | 387 if (second && second->getValueID() == CSSValueColumn) |
388 return AutoFlowColumnDense; | 388 return AutoFlowColumnDense; |
389 return AutoFlowRowDense; | 389 return AutoFlowRowDense; |
390 default: | 390 default: |
391 ASSERT_NOT_REACHED(); | 391 ASSERT_NOT_REACHED(); |
392 return ComputedStyle::initialGridAutoFlow(); | 392 return ComputedStyle::initialGridAutoFlow(); |
393 } | 393 } |
394 } | 394 } |
395 | 395 |
396 GridPosition StyleBuilderConverter::convertGridPosition(StyleResolverState&, CSS
Value value) | 396 GridPosition StyleBuilderConverter::convertGridPosition(StyleResolverState&, con
st CSSValue& value) |
397 { | 397 { |
398 // We accept the specification's grammar: | 398 // We accept the specification's grammar: |
399 // 'auto' | [ <integer> || <custom-ident> ] | [ span && [ <integer> || <cust
om-ident> ] ] | <custom-ident> | 399 // 'auto' | [ <integer> || <custom-ident> ] | [ span && [ <integer> || <cust
om-ident> ] ] | <custom-ident> |
400 | 400 |
401 GridPosition position; | 401 GridPosition position; |
402 | 402 |
403 if (value.isPrimitiveValue()) { | 403 if (value.isPrimitiveValue()) { |
404 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 404 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
405 // We translate <custom-ident> to <string> during parsing as it | 405 // We translate <custom-ident> to <string> during parsing as it |
406 // makes handling it more simple. | 406 // makes handling it more simple. |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 | 442 |
443 ASSERT(it == values.end()); | 443 ASSERT(it == values.end()); |
444 if (isSpanPosition) | 444 if (isSpanPosition) |
445 position.setSpanPosition(gridLineNumber, gridLineName); | 445 position.setSpanPosition(gridLineNumber, gridLineName); |
446 else | 446 else |
447 position.setExplicitPosition(gridLineNumber, gridLineName); | 447 position.setExplicitPosition(gridLineNumber, gridLineName); |
448 | 448 |
449 return position; | 449 return position; |
450 } | 450 } |
451 | 451 |
452 GridTrackSize StyleBuilderConverter::convertGridTrackSize(StyleResolverState& st
ate, CSSValue value) | 452 GridTrackSize StyleBuilderConverter::convertGridTrackSize(StyleResolverState& st
ate, const CSSValue& value) |
453 { | 453 { |
454 if (value.isPrimitiveValue()) | 454 if (value.isPrimitiveValue()) |
455 return GridTrackSize(convertGridTrackBreadth(state, &toCSSPrimitiveValue
(value))); | 455 return GridTrackSize(convertGridTrackBreadth(state, &toCSSPrimitiveValue
(value))); |
456 | 456 |
457 CSSFunctionValue& minmaxFunction = toCSSFunctionValue(value); | 457 CSSFunctionValue& minmaxFunction = toCSSFunctionValue(value); |
458 ASSERT_WITH_SECURITY_IMPLICATION(minmaxFunction.length() == 2); | 458 ASSERT_WITH_SECURITY_IMPLICATION(minmaxFunction.length() == 2); |
459 GridLength minTrackBreadth(convertGridTrackBreadth(state, &toCSSPrimitiveVal
ue(minmaxFunction.item(0)))); | 459 GridLength minTrackBreadth(convertGridTrackBreadth(state, &toCSSPrimitiveVal
ue(minmaxFunction.item(0)))); |
460 GridLength maxTrackBreadth(convertGridTrackBreadth(state, &toCSSPrimitiveVal
ue(minmaxFunction.item(1)))); | 460 GridLength maxTrackBreadth(convertGridTrackBreadth(state, &toCSSPrimitiveVal
ue(minmaxFunction.item(1)))); |
461 return GridTrackSize(minTrackBreadth, maxTrackBreadth); | 461 return GridTrackSize(minTrackBreadth, maxTrackBreadth); |
462 } | 462 } |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 std::sort(startResult.storedValue->value.begin(), startResult.stored
Value->value.end()); | 525 std::sort(startResult.storedValue->value.begin(), startResult.stored
Value->value.end()); |
526 } | 526 } |
527 { | 527 { |
528 NamedGridLinesMap::AddResult endResult = namedGridLines.add(namedGri
dAreaEntry.key + "-end", Vector<size_t>()); | 528 NamedGridLinesMap::AddResult endResult = namedGridLines.add(namedGri
dAreaEntry.key + "-end", Vector<size_t>()); |
529 endResult.storedValue->value.append(areaSpan.resolvedFinalPosition.t
oInt() + 1); | 529 endResult.storedValue->value.append(areaSpan.resolvedFinalPosition.t
oInt() + 1); |
530 std::sort(endResult.storedValue->value.begin(), endResult.storedValu
e->value.end()); | 530 std::sort(endResult.storedValue->value.begin(), endResult.storedValu
e->value.end()); |
531 } | 531 } |
532 } | 532 } |
533 } | 533 } |
534 | 534 |
535 Length StyleBuilderConverter::convertLength(const StyleResolverState& state, CSS
Value value) | 535 Length StyleBuilderConverter::convertLength(const StyleResolverState& state, con
st CSSValue& value) |
536 { | 536 { |
537 return toCSSPrimitiveValue(value).convertToLength(state.cssToLengthConversio
nData()); | 537 return toCSSPrimitiveValue(value).convertToLength(state.cssToLengthConversio
nData()); |
538 } | 538 } |
539 | 539 |
540 UnzoomedLength StyleBuilderConverter::convertUnzoomedLength(const StyleResolverS
tate& state, CSSValue value) | 540 UnzoomedLength StyleBuilderConverter::convertUnzoomedLength(const StyleResolverS
tate& state, const CSSValue& value) |
541 { | 541 { |
542 return UnzoomedLength(toCSSPrimitiveValue(value).convertToLength(state.cssTo
LengthConversionData().copyWithAdjustedZoom(1.0f))); | 542 return UnzoomedLength(toCSSPrimitiveValue(value).convertToLength(state.cssTo
LengthConversionData().copyWithAdjustedZoom(1.0f))); |
543 } | 543 } |
544 | 544 |
545 Length StyleBuilderConverter::convertLengthOrAuto(const StyleResolverState& stat
e, CSSValue value) | 545 Length StyleBuilderConverter::convertLengthOrAuto(const StyleResolverState& stat
e, const CSSValue& value) |
546 { | 546 { |
547 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 547 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
548 if (primitiveValue.getValueID() == CSSValueAuto) | 548 if (primitiveValue.getValueID() == CSSValueAuto) |
549 return Length(Auto); | 549 return Length(Auto); |
550 return primitiveValue.convertToLength(state.cssToLengthConversionData()); | 550 return primitiveValue.convertToLength(state.cssToLengthConversionData()); |
551 } | 551 } |
552 | 552 |
553 Length StyleBuilderConverter::convertLengthSizing(StyleResolverState& state, CSS
Value value) | 553 Length StyleBuilderConverter::convertLengthSizing(StyleResolverState& state, con
st CSSValue& value) |
554 { | 554 { |
555 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 555 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
556 switch (primitiveValue.getValueID()) { | 556 switch (primitiveValue.getValueID()) { |
557 case CSSValueInvalid: | 557 case CSSValueInvalid: |
558 return convertLength(state, value); | 558 return convertLength(state, value); |
559 case CSSValueIntrinsic: | 559 case CSSValueIntrinsic: |
560 return Length(Intrinsic); | 560 return Length(Intrinsic); |
561 case CSSValueMinIntrinsic: | 561 case CSSValueMinIntrinsic: |
562 return Length(MinIntrinsic); | 562 return Length(MinIntrinsic); |
563 case CSSValueMinContent: | 563 case CSSValueMinContent: |
564 case CSSValueWebkitMinContent: | 564 case CSSValueWebkitMinContent: |
565 return Length(MinContent); | 565 return Length(MinContent); |
566 case CSSValueMaxContent: | 566 case CSSValueMaxContent: |
567 case CSSValueWebkitMaxContent: | 567 case CSSValueWebkitMaxContent: |
568 return Length(MaxContent); | 568 return Length(MaxContent); |
569 case CSSValueWebkitFillAvailable: | 569 case CSSValueWebkitFillAvailable: |
570 return Length(FillAvailable); | 570 return Length(FillAvailable); |
571 case CSSValueWebkitFitContent: | 571 case CSSValueWebkitFitContent: |
572 return Length(FitContent); | 572 return Length(FitContent); |
573 case CSSValueAuto: | 573 case CSSValueAuto: |
574 return Length(Auto); | 574 return Length(Auto); |
575 default: | 575 default: |
576 ASSERT_NOT_REACHED(); | 576 ASSERT_NOT_REACHED(); |
577 return Length(); | 577 return Length(); |
578 } | 578 } |
579 } | 579 } |
580 | 580 |
581 Length StyleBuilderConverter::convertLengthMaxSizing(StyleResolverState& state,
CSSValue value) | 581 Length StyleBuilderConverter::convertLengthMaxSizing(StyleResolverState& state,
const CSSValue& value) |
582 { | 582 { |
583 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 583 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
584 if (primitiveValue.getValueID() == CSSValueNone) | 584 if (primitiveValue.getValueID() == CSSValueNone) |
585 return Length(MaxSizeNone); | 585 return Length(MaxSizeNone); |
586 return convertLengthSizing(state, value); | 586 return convertLengthSizing(state, value); |
587 } | 587 } |
588 | 588 |
589 TabSize StyleBuilderConverter::convertLengthOrTabSpaces(StyleResolverState& stat
e, CSSValue value) | 589 TabSize StyleBuilderConverter::convertLengthOrTabSpaces(StyleResolverState& stat
e, const CSSValue& value) |
590 { | 590 { |
591 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 591 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
592 if (primitiveValue.isNumber()) | 592 if (primitiveValue.isNumber()) |
593 return TabSize(primitiveValue.getIntValue()); | 593 return TabSize(primitiveValue.getIntValue()); |
594 return TabSize(primitiveValue.computeLength<float>(state.cssToLengthConversi
onData())); | 594 return TabSize(primitiveValue.computeLength<float>(state.cssToLengthConversi
onData())); |
595 } | 595 } |
596 | 596 |
597 LineBoxContain StyleBuilderConverter::convertLineBoxContain(StyleResolverState&,
CSSValue value) | 597 LineBoxContain StyleBuilderConverter::convertLineBoxContain(StyleResolverState&,
const CSSValue& value) |
598 { | 598 { |
599 if (value.isPrimitiveValue()) { | 599 if (value.isPrimitiveValue()) { |
600 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); | 600 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); |
601 return LineBoxContainNone; | 601 return LineBoxContainNone; |
602 } | 602 } |
603 | 603 |
604 return toCSSLineBoxContainValue(value).value(); | 604 return toCSSLineBoxContainValue(value).value(); |
605 } | 605 } |
606 | 606 |
607 static CSSToLengthConversionData lineHeightToLengthConversionData(StyleResolverS
tate& state) | 607 static CSSToLengthConversionData lineHeightToLengthConversionData(StyleResolverS
tate& state) |
608 { | 608 { |
609 float multiplier = state.style()->effectiveZoom(); | 609 float multiplier = state.style()->effectiveZoom(); |
610 if (LocalFrame* frame = state.document().frame()) | 610 if (LocalFrame* frame = state.document().frame()) |
611 multiplier *= frame->textZoomFactor(); | 611 multiplier *= frame->textZoomFactor(); |
612 return state.cssToLengthConversionData().copyWithAdjustedZoom(multiplier); | 612 return state.cssToLengthConversionData().copyWithAdjustedZoom(multiplier); |
613 } | 613 } |
614 | 614 |
615 Length StyleBuilderConverter::convertLineHeight(StyleResolverState& state, CSSVa
lue value) | 615 Length StyleBuilderConverter::convertLineHeight(StyleResolverState& state, const
CSSValue& value) |
616 { | 616 { |
617 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 617 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
618 | 618 |
619 if (primitiveValue.isLength()) | 619 if (primitiveValue.isLength()) |
620 return primitiveValue.computeLength<Length>(lineHeightToLengthConversion
Data(state)); | 620 return primitiveValue.computeLength<Length>(lineHeightToLengthConversion
Data(state)); |
621 if (primitiveValue.isPercentage()) | 621 if (primitiveValue.isPercentage()) |
622 return Length((state.style()->computedFontSize() * primitiveValue.getInt
Value()) / 100.0, Fixed); | 622 return Length((state.style()->computedFontSize() * primitiveValue.getInt
Value()) / 100.0, Fixed); |
623 if (primitiveValue.isNumber()) | 623 if (primitiveValue.isNumber()) |
624 return Length(primitiveValue.getDoubleValue() * 100.0, Percent); | 624 return Length(primitiveValue.getDoubleValue() * 100.0, Percent); |
625 if (primitiveValue.isCalculated()) { | 625 if (primitiveValue.isCalculated()) { |
626 Length zoomedLength = Length(primitiveValue.cssCalcValue()->toCalcValue(
lineHeightToLengthConversionData(state))); | 626 Length zoomedLength = Length(primitiveValue.cssCalcValue()->toCalcValue(
lineHeightToLengthConversionData(state))); |
627 return Length(valueForLength(zoomedLength, state.style()->fontSize()), F
ixed); | 627 return Length(valueForLength(zoomedLength, state.style()->fontSize()), F
ixed); |
628 } | 628 } |
629 | 629 |
630 ASSERT(primitiveValue.getValueID() == CSSValueNormal); | 630 ASSERT(primitiveValue.getValueID() == CSSValueNormal); |
631 return ComputedStyle::initialLineHeight(); | 631 return ComputedStyle::initialLineHeight(); |
632 } | 632 } |
633 | 633 |
634 float StyleBuilderConverter::convertNumberOrPercentage(StyleResolverState& state
, CSSValue value) | 634 float StyleBuilderConverter::convertNumberOrPercentage(StyleResolverState& state
, const CSSValue& value) |
635 { | 635 { |
636 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 636 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
637 ASSERT(primitiveValue.isNumber() || primitiveValue.isPercentage()); | 637 ASSERT(primitiveValue.isNumber() || primitiveValue.isPercentage()); |
638 if (primitiveValue.isNumber()) | 638 if (primitiveValue.isNumber()) |
639 return primitiveValue.getFloatValue(); | 639 return primitiveValue.getFloatValue(); |
640 return primitiveValue.getFloatValue() / 100.0f; | 640 return primitiveValue.getFloatValue() / 100.0f; |
641 } | 641 } |
642 | 642 |
643 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> | 643 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> |
644 static Length convertPositionLength(StyleResolverState& state, CSSPrimitiveValue
* primitiveValue) | 644 static Length convertPositionLength(StyleResolverState& state, CSSPrimitiveValue
* primitiveValue) |
645 { | 645 { |
646 if (Pair* pair = primitiveValue->getPairValue()) { | 646 if (Pair* pair = primitiveValue->getPairValue()) { |
647 Length length = StyleBuilderConverter::convertLength(state, CSSValue(*pa
ir->second())); | 647 Length length = StyleBuilderConverter::convertLength(state, CSSValue(*pa
ir->second())); |
648 if (pair->first()->getValueID() == cssValueFor0) | 648 if (pair->first()->getValueID() == cssValueFor0) |
649 return length; | 649 return length; |
650 ASSERT(pair->first()->getValueID() == cssValueFor100); | 650 ASSERT(pair->first()->getValueID() == cssValueFor100); |
651 return length.subtractFromOneHundredPercent(); | 651 return length.subtractFromOneHundredPercent(); |
652 } | 652 } |
653 | 653 |
654 return StyleBuilderConverter::convertLength(state, CSSValue(*primitiveValue)
); | 654 return StyleBuilderConverter::convertLength(state, CSSValue(*primitiveValue)
); |
655 } | 655 } |
656 | 656 |
657 LengthPoint StyleBuilderConverter::convertPosition(StyleResolverState& state, CS
SValue value) | 657 LengthPoint StyleBuilderConverter::convertPosition(StyleResolverState& state, co
nst CSSValue& value) |
658 { | 658 { |
659 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 659 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
660 Pair* pair = primitiveValue.getPairValue(); | 660 Pair* pair = primitiveValue.getPairValue(); |
661 return LengthPoint( | 661 return LengthPoint( |
662 convertPositionLength<CSSValueLeft, CSSValueRight>(state, pair->first())
, | 662 convertPositionLength<CSSValueLeft, CSSValueRight>(state, pair->first())
, |
663 convertPositionLength<CSSValueTop, CSSValueBottom>(state, pair->second()
) | 663 convertPositionLength<CSSValueTop, CSSValueBottom>(state, pair->second()
) |
664 ); | 664 ); |
665 } | 665 } |
666 | 666 |
667 static float convertPerspectiveLength(StyleResolverState& state, CSSPrimitiveVal
ue& primitiveValue) | 667 static float convertPerspectiveLength(StyleResolverState& state, CSSPrimitiveVal
ue& primitiveValue) |
668 { | 668 { |
669 return std::max(primitiveValue.computeLength<float>(state.cssToLengthConvers
ionData()), 0.0f); | 669 return std::max(primitiveValue.computeLength<float>(state.cssToLengthConvers
ionData()), 0.0f); |
670 } | 670 } |
671 | 671 |
672 float StyleBuilderConverter::convertPerspective(StyleResolverState& state, CSSVa
lue value) | 672 float StyleBuilderConverter::convertPerspective(StyleResolverState& state, const
CSSValue& value) |
673 { | 673 { |
674 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 674 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
675 | 675 |
676 if (primitiveValue.getValueID() == CSSValueNone) | 676 if (primitiveValue.getValueID() == CSSValueNone) |
677 return ComputedStyle::initialPerspective(); | 677 return ComputedStyle::initialPerspective(); |
678 return convertPerspectiveLength(state, primitiveValue); | 678 return convertPerspectiveLength(state, primitiveValue); |
679 } | 679 } |
680 | 680 |
681 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> | 681 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> |
682 static Length convertOriginLength(StyleResolverState& state, CSSPrimitiveValue&
primitiveValue) | 682 static Length convertOriginLength(StyleResolverState& state, CSSPrimitiveValue&
primitiveValue) |
683 { | 683 { |
684 if (primitiveValue.isValueID()) { | 684 if (primitiveValue.isValueID()) { |
685 switch (primitiveValue.getValueID()) { | 685 switch (primitiveValue.getValueID()) { |
686 case cssValueFor0: | 686 case cssValueFor0: |
687 return Length(0, Percent); | 687 return Length(0, Percent); |
688 case cssValueFor100: | 688 case cssValueFor100: |
689 return Length(100, Percent); | 689 return Length(100, Percent); |
690 case CSSValueCenter: | 690 case CSSValueCenter: |
691 return Length(50, Percent); | 691 return Length(50, Percent); |
692 default: | 692 default: |
693 ASSERT_NOT_REACHED(); | 693 ASSERT_NOT_REACHED(); |
694 } | 694 } |
695 } | 695 } |
696 | 696 |
697 return StyleBuilderConverter::convertLength(state, CSSValue(primitiveValue))
; | 697 return StyleBuilderConverter::convertLength(state, CSSValue(primitiveValue))
; |
698 } | 698 } |
699 | 699 |
700 LengthPoint StyleBuilderConverter::convertPerspectiveOrigin(StyleResolverState&
state, CSSValue value) | 700 LengthPoint StyleBuilderConverter::convertPerspectiveOrigin(StyleResolverState&
state, const CSSValue& value) |
701 { | 701 { |
702 CSSValueList& list = toCSSValueList(value); | 702 CSSValueList& list = toCSSValueList(value); |
703 ASSERT(list.length() == 2); | 703 ASSERT(list.length() == 2); |
704 | 704 |
705 CSSPrimitiveValue& primitiveValueX = toCSSPrimitiveValue(list.item(0)); | 705 CSSPrimitiveValue& primitiveValueX = toCSSPrimitiveValue(list.item(0)); |
706 CSSPrimitiveValue& primitiveValueY = toCSSPrimitiveValue(list.item(1)); | 706 CSSPrimitiveValue& primitiveValueY = toCSSPrimitiveValue(list.item(1)); |
707 | 707 |
708 return LengthPoint( | 708 return LengthPoint( |
709 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX)
, | 709 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX)
, |
710 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) | 710 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) |
711 ); | 711 ); |
712 } | 712 } |
713 | 713 |
714 EPaintOrder StyleBuilderConverter::convertPaintOrder(StyleResolverState&, CSSVal
ue cssPaintOrder) | 714 EPaintOrder StyleBuilderConverter::convertPaintOrder(StyleResolverState&, const
CSSValue& cssPaintOrder) |
715 { | 715 { |
716 if (cssPaintOrder.isValueList()) { | 716 if (cssPaintOrder.isValueList()) { |
717 int paintOrder = 0; | 717 int paintOrder = 0; |
718 const CSSValueList& list = toCSSValueList(cssPaintOrder); | 718 const CSSValueList& list = toCSSValueList(cssPaintOrder); |
719 for (size_t i = 0; i < list.length(); ++i) { | 719 for (size_t i = 0; i < list.length(); ++i) { |
720 EPaintOrderType paintOrderType = PT_NONE; | 720 EPaintOrderType paintOrderType = PT_NONE; |
721 switch (toCSSPrimitiveValue(list.item(i)).getValueID()) { | 721 switch (toCSSPrimitiveValue(list.item(i)).getValueID()) { |
722 case CSSValueFill: | 722 case CSSValueFill: |
723 paintOrderType = PT_FILL; | 723 paintOrderType = PT_FILL; |
724 break; | 724 break; |
725 case CSSValueStroke: | 725 case CSSValueStroke: |
726 paintOrderType = PT_STROKE; | 726 paintOrderType = PT_STROKE; |
727 break; | 727 break; |
728 case CSSValueMarkers: | 728 case CSSValueMarkers: |
729 paintOrderType = PT_MARKERS; | 729 paintOrderType = PT_MARKERS; |
730 break; | 730 break; |
731 default: | 731 default: |
732 ASSERT_NOT_REACHED(); | 732 ASSERT_NOT_REACHED(); |
733 break; | 733 break; |
734 } | 734 } |
735 | 735 |
736 paintOrder |= (paintOrderType << kPaintOrderBitwidth*i); | 736 paintOrder |= (paintOrderType << kPaintOrderBitwidth*i); |
737 } | 737 } |
738 return (EPaintOrder)paintOrder; | 738 return (EPaintOrder)paintOrder; |
739 } | 739 } |
740 | 740 |
741 return PO_NORMAL; | 741 return PO_NORMAL; |
742 } | 742 } |
743 | 743 |
744 Length StyleBuilderConverter::convertQuirkyLength(StyleResolverState& state, CSS
Value value) | 744 Length StyleBuilderConverter::convertQuirkyLength(StyleResolverState& state, con
st CSSValue& value) |
745 { | 745 { |
746 Length length = convertLengthOrAuto(state, value); | 746 Length length = convertLengthOrAuto(state, value); |
747 // This is only for margins which use __qem | 747 // This is only for margins which use __qem |
748 length.setQuirk(toCSSPrimitiveValue(value).isQuirkValue()); | 748 length.setQuirk(toCSSPrimitiveValue(value).isQuirkValue()); |
749 return length; | 749 return length; |
750 } | 750 } |
751 | 751 |
752 PassRefPtr<QuotesData> StyleBuilderConverter::convertQuotes(StyleResolverState&,
CSSValue value) | 752 PassRefPtr<QuotesData> StyleBuilderConverter::convertQuotes(StyleResolverState&,
const CSSValue& value) |
753 { | 753 { |
754 if (value.isValueList()) { | 754 if (value.isValueList()) { |
755 CSSValueList& list = toCSSValueList(value); | 755 CSSValueList& list = toCSSValueList(value); |
756 RefPtr<QuotesData> quotes = QuotesData::create(); | 756 RefPtr<QuotesData> quotes = QuotesData::create(); |
757 for (size_t i = 0; i < list.length(); i += 2) { | 757 for (size_t i = 0; i < list.length(); i += 2) { |
758 CSSValue first = list.item(i); | 758 CSSValue first = list.item(i); |
759 CSSValue second = list.item(i + 1); | 759 CSSValue second = list.item(i + 1); |
760 String startQuote = toCSSPrimitiveValue(first).getStringValue(); | 760 String startQuote = toCSSPrimitiveValue(first).getStringValue(); |
761 String endQuote = toCSSPrimitiveValue(second).getStringValue(); | 761 String endQuote = toCSSPrimitiveValue(second).getStringValue(); |
762 quotes->addPair(std::make_pair(startQuote, endQuote)); | 762 quotes->addPair(std::make_pair(startQuote, endQuote)); |
763 } | 763 } |
764 return quotes.release(); | 764 return quotes.release(); |
765 } | 765 } |
766 // FIXME: We should assert we're a primitive value with valueID = CSSValueNo
ne | 766 // FIXME: We should assert we're a primitive value with valueID = CSSValueNo
ne |
767 return QuotesData::create(); | 767 return QuotesData::create(); |
768 } | 768 } |
769 | 769 |
770 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, CSSVa
lue value) | 770 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, const
CSSValue& value) |
771 { | 771 { |
772 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 772 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
773 Pair* pair = primitiveValue.getPairValue(); | 773 Pair* pair = primitiveValue.getPairValue(); |
774 Length radiusWidth = pair->first()->convertToLength(state.cssToLengthConvers
ionData()); | 774 Length radiusWidth = pair->first()->convertToLength(state.cssToLengthConvers
ionData()); |
775 Length radiusHeight = pair->second()->convertToLength(state.cssToLengthConve
rsionData()); | 775 Length radiusHeight = pair->second()->convertToLength(state.cssToLengthConve
rsionData()); |
776 float width = radiusWidth.value(); | 776 float width = radiusWidth.value(); |
777 float height = radiusHeight.value(); | 777 float height = radiusHeight.value(); |
778 ASSERT(width >= 0 && height >= 0); | 778 ASSERT(width >= 0 && height >= 0); |
779 if (width <= 0 || height <= 0) | 779 if (width <= 0 || height <= 0) |
780 return LengthSize(Length(0, Fixed), Length(0, Fixed)); | 780 return LengthSize(Length(0, Fixed), Length(0, Fixed)); |
781 return LengthSize(radiusWidth, radiusHeight); | 781 return LengthSize(radiusWidth, radiusHeight); |
782 } | 782 } |
783 | 783 |
784 PassRefPtr<ShadowList> StyleBuilderConverter::convertShadow(StyleResolverState&
state, CSSValue value) | 784 PassRefPtr<ShadowList> StyleBuilderConverter::convertShadow(StyleResolverState&
state, const CSSValue& value) |
785 { | 785 { |
786 if (value.isPrimitiveValue()) { | 786 if (value.isPrimitiveValue()) { |
787 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); | 787 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); |
788 return PassRefPtr<ShadowList>(); | 788 return PassRefPtr<ShadowList>(); |
789 } | 789 } |
790 | 790 |
791 const CSSValueList& valueList = toCSSValueList(value); | 791 const CSSValueList& valueList = toCSSValueList(value); |
792 size_t shadowCount = valueList.length(); | 792 size_t shadowCount = valueList.length(); |
793 ShadowDataVector shadows; | 793 ShadowDataVector shadows; |
794 for (size_t i = 0; i < shadowCount; ++i) { | 794 for (size_t i = 0; i < shadowCount; ++i) { |
795 const CSSShadowValue& item = toCSSShadowValue(valueList.item(i)); | 795 const CSSShadowValue& item = toCSSShadowValue(valueList.item(i)); |
796 float x = item.x->computeLength<float>(state.cssToLengthConversionData()
); | 796 float x = item.x->computeLength<float>(state.cssToLengthConversionData()
); |
797 float y = item.y->computeLength<float>(state.cssToLengthConversionData()
); | 797 float y = item.y->computeLength<float>(state.cssToLengthConversionData()
); |
798 float blur = item.blur ? item.blur->computeLength<float>(state.cssToLeng
thConversionData()) : 0; | 798 float blur = item.blur ? item.blur->computeLength<float>(state.cssToLeng
thConversionData()) : 0; |
799 float spread = item.spread ? item.spread->computeLength<float>(state.css
ToLengthConversionData()) : 0; | 799 float spread = item.spread ? item.spread->computeLength<float>(state.css
ToLengthConversionData()) : 0; |
800 ShadowStyle shadowStyle = item.style && item.style->getValueID() == CSSV
alueInset ? Inset : Normal; | 800 ShadowStyle shadowStyle = item.style && item.style->getValueID() == CSSV
alueInset ? Inset : Normal; |
801 StyleColor color = StyleColor::currentColor(); | 801 StyleColor color = StyleColor::currentColor(); |
802 if (item.color) | 802 if (item.color) |
803 color = convertStyleColor(state, CSSValue(*item.color)); | 803 color = convertStyleColor(state, CSSValue(item.color)); |
804 shadows.append(ShadowData(FloatPoint(x, y), blur, spread, shadowStyle, c
olor)); | 804 shadows.append(ShadowData(FloatPoint(x, y), blur, spread, shadowStyle, c
olor)); |
805 } | 805 } |
806 return ShadowList::adopt(shadows); | 806 return ShadowList::adopt(shadows); |
807 } | 807 } |
808 | 808 |
809 PassRefPtr<ShapeValue> StyleBuilderConverter::convertShapeValue(StyleResolverSta
te& state, CSSValue value) | 809 PassRefPtr<ShapeValue> StyleBuilderConverter::convertShapeValue(StyleResolverSta
te& state, const CSSValue& value) |
810 { | 810 { |
811 if (value.isPrimitiveValue()) { | 811 if (value.isPrimitiveValue()) { |
812 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); | 812 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); |
813 return nullptr; | 813 return nullptr; |
814 } | 814 } |
815 | 815 |
816 if (value.isImageValue() || value.isImageGeneratorValue() || value.isImageSe
tValue()) | 816 if (value.isImageValue() || value.isImageGeneratorValue() || value.isImageSe
tValue()) |
817 return ShapeValue::createImageValue(state.styleImage(CSSPropertyShapeOut
side, value)); | 817 return ShapeValue::createImageValue(state.styleImage(CSSPropertyShapeOut
side, value)); |
818 | 818 |
819 RefPtr<BasicShape> shape; | 819 RefPtr<BasicShape> shape; |
820 CSSBoxType cssBox = BoxMissing; | 820 CSSBoxType cssBox = BoxMissing; |
821 CSSValueList& valueList = toCSSValueList(value); | 821 CSSValueList& valueList = toCSSValueList(value); |
822 for (unsigned i = 0; i < valueList.length(); ++i) { | 822 for (unsigned i = 0; i < valueList.length(); ++i) { |
823 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(valueList.item(i
)); | 823 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(valueList.item(i
)); |
824 if (primitiveValue.isShape()) | 824 if (primitiveValue.isShape()) |
825 shape = basicShapeForValue(state, primitiveValue.getShapeValue()); | 825 shape = basicShapeForValue(state, primitiveValue.getShapeValue()); |
826 else | 826 else |
827 cssBox = CSSBoxType(primitiveValue); | 827 cssBox = CSSBoxType(primitiveValue); |
828 } | 828 } |
829 | 829 |
830 if (shape) | 830 if (shape) |
831 return ShapeValue::createShapeValue(shape.release(), cssBox); | 831 return ShapeValue::createShapeValue(shape.release(), cssBox); |
832 | 832 |
833 ASSERT(cssBox != BoxMissing); | 833 ASSERT(cssBox != BoxMissing); |
834 return ShapeValue::createBoxShapeValue(cssBox); | 834 return ShapeValue::createBoxShapeValue(cssBox); |
835 } | 835 } |
836 | 836 |
837 float StyleBuilderConverter::convertSpacing(StyleResolverState& state, CSSValue
value) | 837 float StyleBuilderConverter::convertSpacing(StyleResolverState& state, const CSS
Value& value) |
838 { | 838 { |
839 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 839 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
840 if (primitiveValue.getValueID() == CSSValueNormal) | 840 if (primitiveValue.getValueID() == CSSValueNormal) |
841 return 0; | 841 return 0; |
842 return primitiveValue.computeLength<float>(state.cssToLengthConversionData()
); | 842 return primitiveValue.computeLength<float>(state.cssToLengthConversionData()
); |
843 } | 843 } |
844 | 844 |
845 PassRefPtr<SVGDashArray> StyleBuilderConverter::convertStrokeDasharray(StyleReso
lverState& state, CSSValue value) | 845 PassRefPtr<SVGDashArray> StyleBuilderConverter::convertStrokeDasharray(StyleReso
lverState& state, const CSSValue& value) |
846 { | 846 { |
847 if (!value.isValueList()) | 847 if (!value.isValueList()) |
848 return SVGComputedStyle::initialStrokeDashArray(); | 848 return SVGComputedStyle::initialStrokeDashArray(); |
849 | 849 |
850 CSSValueList& dashes = toCSSValueList(value); | 850 CSSValueList& dashes = toCSSValueList(value); |
851 | 851 |
852 RefPtr<SVGDashArray> array = SVGDashArray::create(); | 852 RefPtr<SVGDashArray> array = SVGDashArray::create(); |
853 size_t length = dashes.length(); | 853 size_t length = dashes.length(); |
854 for (size_t i = 0; i < length; ++i) { | 854 for (size_t i = 0; i < length; ++i) { |
855 CSSValue currValue = dashes.item(i); | 855 CSSValue currValue = dashes.item(i); |
856 if (!currValue.isPrimitiveValue()) | 856 if (!currValue.isPrimitiveValue()) |
857 continue; | 857 continue; |
858 | 858 |
859 array->append(convertLength(state, currValue)); | 859 array->append(convertLength(state, currValue)); |
860 } | 860 } |
861 | 861 |
862 return array.release(); | 862 return array.release(); |
863 } | 863 } |
864 | 864 |
865 StyleColor StyleBuilderConverter::convertStyleColor(StyleResolverState& state, C
SSValue value, bool forVisitedLink) | 865 StyleColor StyleBuilderConverter::convertStyleColor(StyleResolverState& state, C
SSValue value, bool forVisitedLink) |
866 { | 866 { |
867 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 867 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
868 if (primitiveValue.getValueID() == CSSValueCurrentcolor) | 868 if (primitiveValue.getValueID() == CSSValueCurrentcolor) |
869 return StyleColor::currentColor(); | 869 return StyleColor::currentColor(); |
870 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa
lue, Color(), forVisitedLink); | 870 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa
lue, Color(), forVisitedLink); |
871 } | 871 } |
872 | 872 |
873 float StyleBuilderConverter::convertTextStrokeWidth(StyleResolverState& state, C
SSValue value) | 873 float StyleBuilderConverter::convertTextStrokeWidth(StyleResolverState& state, c
onst CSSValue& value) |
874 { | 874 { |
875 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 875 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
876 if (primitiveValue.getValueID()) { | 876 if (primitiveValue.getValueID()) { |
877 float multiplier = convertLineWidth<float>(state, value); | 877 float multiplier = convertLineWidth<float>(state, value); |
878 return CSSPrimitiveValue::create(multiplier / 48, CSSPrimitiveValue::CSS
_EMS)->computeLength<float>(state.cssToLengthConversionData()); | 878 return CSSPrimitiveValue::create(multiplier / 48, CSSPrimitiveValue::CSS
_EMS)->computeLength<float>(state.cssToLengthConversionData()); |
879 } | 879 } |
880 return primitiveValue.computeLength<float>(state.cssToLengthConversionData()
); | 880 return primitiveValue.computeLength<float>(state.cssToLengthConversionData()
); |
881 } | 881 } |
882 | 882 |
883 TransformOrigin StyleBuilderConverter::convertTransformOrigin(StyleResolverState
& state, CSSValue value) | 883 TransformOrigin StyleBuilderConverter::convertTransformOrigin(StyleResolverState
& state, const CSSValue& value) |
884 { | 884 { |
885 CSSValueList& list = toCSSValueList(value); | 885 CSSValueList& list = toCSSValueList(value); |
886 ASSERT(list.length() == 3); | 886 ASSERT(list.length() == 3); |
887 | 887 |
888 CSSPrimitiveValue& primitiveValueX = toCSSPrimitiveValue(list.item(0)); | 888 CSSPrimitiveValue& primitiveValueX = toCSSPrimitiveValue(list.item(0)); |
889 CSSPrimitiveValue& primitiveValueY = toCSSPrimitiveValue(list.item(1)); | 889 CSSPrimitiveValue& primitiveValueY = toCSSPrimitiveValue(list.item(1)); |
890 | 890 |
891 return TransformOrigin( | 891 return TransformOrigin( |
892 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX)
, | 892 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX)
, |
893 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY)
, | 893 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY)
, |
894 StyleBuilderConverter::convertComputedLength<float>(state, list.item(2)) | 894 StyleBuilderConverter::convertComputedLength<float>(state, list.item(2)) |
895 ); | 895 ); |
896 } | 896 } |
897 | 897 |
898 ScrollSnapPoints StyleBuilderConverter::convertSnapPoints(StyleResolverState& st
ate, CSSValue value) | 898 ScrollSnapPoints StyleBuilderConverter::convertSnapPoints(StyleResolverState& st
ate, const CSSValue& value) |
899 { | 899 { |
900 // Handles: none | repeat(<length>) | 900 // Handles: none | repeat(<length>) |
901 ScrollSnapPoints points; | 901 ScrollSnapPoints points; |
902 points.hasRepeat = false; | 902 points.hasRepeat = false; |
903 | 903 |
904 if (!value.isFunctionValue()) | 904 if (!value.isFunctionValue()) |
905 return points; | 905 return points; |
906 | 906 |
907 CSSFunctionValue& repeatFunction = toCSSFunctionValue(value); | 907 CSSFunctionValue& repeatFunction = toCSSFunctionValue(value); |
908 ASSERT_WITH_SECURITY_IMPLICATION(repeatFunction.length() == 1); | 908 ASSERT_WITH_SECURITY_IMPLICATION(repeatFunction.length() == 1); |
909 points.repeatOffset = convertLength(state, repeatFunction.item(0)); | 909 points.repeatOffset = convertLength(state, repeatFunction.item(0)); |
910 points.hasRepeat = true; | 910 points.hasRepeat = true; |
911 | 911 |
912 return points; | 912 return points; |
913 } | 913 } |
914 | 914 |
915 Vector<LengthPoint> StyleBuilderConverter::convertSnapCoordinates(StyleResolverS
tate& state, CSSValue value) | 915 Vector<LengthPoint> StyleBuilderConverter::convertSnapCoordinates(StyleResolverS
tate& state, const CSSValue& value) |
916 { | 916 { |
917 // Handles: none | <position># | 917 // Handles: none | <position># |
918 Vector<LengthPoint> coordinates; | 918 Vector<LengthPoint> coordinates; |
919 | 919 |
920 if (!value.isValueList()) | 920 if (!value.isValueList()) |
921 return coordinates; | 921 return coordinates; |
922 | 922 |
923 CSSValueList& valueList = toCSSValueList(value); | 923 CSSValueList& valueList = toCSSValueList(value); |
924 coordinates.reserveInitialCapacity(valueList.length()); | 924 coordinates.reserveInitialCapacity(valueList.length()); |
925 for (auto& snapCoordinate : valueList) { | 925 for (auto& snapCoordinate : valueList) { |
926 coordinates.uncheckedAppend(convertPosition(state, snapCoordinate)); | 926 coordinates.uncheckedAppend(convertPosition(state, snapCoordinate)); |
927 } | 927 } |
928 | 928 |
929 return coordinates; | 929 return coordinates; |
930 } | 930 } |
931 | 931 |
932 PassRefPtr<TranslateTransformOperation> StyleBuilderConverter::convertTranslate(
StyleResolverState& state, CSSValue value) | 932 PassRefPtr<TranslateTransformOperation> StyleBuilderConverter::convertTranslate(
StyleResolverState& state, const CSSValue& value) |
933 { | 933 { |
934 CSSValueList& list = toCSSValueList(value); | 934 CSSValueList& list = toCSSValueList(value); |
935 ASSERT(list.length() <= 3); | 935 ASSERT(list.length() <= 3); |
936 Length tx = convertLength(state, list.item(0)); | 936 Length tx = convertLength(state, list.item(0)); |
937 Length ty(0, Fixed); | 937 Length ty(0, Fixed); |
938 double tz = 0; | 938 double tz = 0; |
939 if (list.length() >= 2) | 939 if (list.length() >= 2) |
940 ty = convertLength(state, list.item(1)); | 940 ty = convertLength(state, list.item(1)); |
941 if (list.length() == 3) | 941 if (list.length() == 3) |
942 tz = toCSSPrimitiveValue(list.item(2)).getDoubleValue(); | 942 tz = toCSSPrimitiveValue(list.item(2)).getDoubleValue(); |
943 | 943 |
944 return TranslateTransformOperation::create(tx, ty, tz, TransformOperation::T
ranslate3D); | 944 return TranslateTransformOperation::create(tx, ty, tz, TransformOperation::T
ranslate3D); |
945 } | 945 } |
946 | 946 |
947 PassRefPtr<RotateTransformOperation> StyleBuilderConverter::convertRotate(StyleR
esolverState& state, CSSValue value) | 947 PassRefPtr<RotateTransformOperation> StyleBuilderConverter::convertRotate(StyleR
esolverState& state, const CSSValue& value) |
948 { | 948 { |
949 CSSValueList& list = toCSSValueList(value); | 949 CSSValueList& list = toCSSValueList(value); |
950 ASSERT(list.length() == 1 || list.length() == 4); | 950 ASSERT(list.length() == 1 || list.length() == 4); |
951 double angle = toCSSPrimitiveValue(list.item(0)).computeDegrees(); | 951 double angle = toCSSPrimitiveValue(list.item(0)).computeDegrees(); |
952 double x = 0; | 952 double x = 0; |
953 double y = 0; | 953 double y = 0; |
954 double z = 1; | 954 double z = 1; |
955 if (list.length() == 4) { | 955 if (list.length() == 4) { |
956 x = toCSSPrimitiveValue(list.item(1)).getDoubleValue(); | 956 x = toCSSPrimitiveValue(list.item(1)).getDoubleValue(); |
957 y = toCSSPrimitiveValue(list.item(2)).getDoubleValue(); | 957 y = toCSSPrimitiveValue(list.item(2)).getDoubleValue(); |
958 z = toCSSPrimitiveValue(list.item(3)).getDoubleValue(); | 958 z = toCSSPrimitiveValue(list.item(3)).getDoubleValue(); |
959 } | 959 } |
960 | 960 |
961 return RotateTransformOperation::create(x, y, z, angle, TransformOperation::
Rotate3D); | 961 return RotateTransformOperation::create(x, y, z, angle, TransformOperation::
Rotate3D); |
962 } | 962 } |
963 | 963 |
964 PassRefPtr<ScaleTransformOperation> StyleBuilderConverter::convertScale(StyleRes
olverState& state, CSSValue value) | 964 PassRefPtr<ScaleTransformOperation> StyleBuilderConverter::convertScale(StyleRes
olverState& state, const CSSValue& value) |
965 { | 965 { |
966 CSSValueList& list = toCSSValueList(value); | 966 CSSValueList& list = toCSSValueList(value); |
967 ASSERT(list.length() <= 3); | 967 ASSERT(list.length() <= 3); |
968 double sx = toCSSPrimitiveValue(list.item(0)).getDoubleValue(); | 968 double sx = toCSSPrimitiveValue(list.item(0)).getDoubleValue(); |
969 double sy = sx; | 969 double sy = sx; |
970 double sz = 1; | 970 double sz = 1; |
971 if (list.length() >= 2) | 971 if (list.length() >= 2) |
972 sy = toCSSPrimitiveValue(list.item(1)).getDoubleValue(); | 972 sy = toCSSPrimitiveValue(list.item(1)).getDoubleValue(); |
973 if (list.length() == 3) | 973 if (list.length() == 3) |
974 sz = toCSSPrimitiveValue(list.item(2)).getDoubleValue(); | 974 sz = toCSSPrimitiveValue(list.item(2)).getDoubleValue(); |
975 | 975 |
976 return ScaleTransformOperation::create(sx, sy, sz, TransformOperation::Scale
3D); | 976 return ScaleTransformOperation::create(sx, sy, sz, TransformOperation::Scale
3D); |
977 } | 977 } |
978 | 978 |
979 } // namespace blink | 979 } // namespace blink |
OLD | NEW |