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