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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 if (primitiveValue->getValueID() == CSSValueMinContent) | 49 if (primitiveValue->getValueID() == CSSValueMinContent) |
50 return Length(MinContent); | 50 return Length(MinContent); |
51 | 51 |
52 if (primitiveValue->getValueID() == CSSValueMaxContent) | 52 if (primitiveValue->getValueID() == CSSValueMaxContent) |
53 return Length(MaxContent); | 53 return Length(MaxContent); |
54 | 54 |
55 // Fractional unit. | 55 // Fractional unit. |
56 if (primitiveValue->isFlex()) | 56 if (primitiveValue->isFlex()) |
57 return GridLength(primitiveValue->getDoubleValue()); | 57 return GridLength(primitiveValue->getDoubleValue()); |
58 | 58 |
59 return StyleBuilderConverter::convertLengthOrAuto(state, primitiveValue); | 59 return StyleBuilderConverter::convertLengthOrAuto(state, CSSValue(*primitive
Value)); |
60 } | 60 } |
61 | 61 |
62 } // namespace | 62 } // namespace |
63 | 63 |
64 PassRefPtr<StyleReflection> StyleBuilderConverter::convertBoxReflect(StyleResolv
erState& state, CSSValue* value) | 64 PassRefPtr<StyleReflection> StyleBuilderConverter::convertBoxReflect(StyleResolv
erState& state, CSSValue value) |
65 { | 65 { |
66 if (value->isPrimitiveValue()) { | 66 if (value.isPrimitiveValue()) { |
67 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); | 67 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); |
68 return ComputedStyle::initialBoxReflect(); | 68 return ComputedStyle::initialBoxReflect(); |
69 } | 69 } |
70 | 70 |
71 CSSReflectValue* reflectValue = toCSSReflectValue(value); | 71 CSSReflectValue& reflectValue = toCSSReflectValue(value); |
72 RefPtr<StyleReflection> reflection = StyleReflection::create(); | 72 RefPtr<StyleReflection> reflection = StyleReflection::create(); |
73 reflection->setDirection(*reflectValue->direction()); | 73 reflection->setDirection(*reflectValue.direction()); |
74 if (reflectValue->offset()) | 74 if (reflectValue.offset()) |
75 reflection->setOffset(reflectValue->offset()->convertToLength(state.cssT
oLengthConversionData())); | 75 reflection->setOffset(reflectValue.offset()->convertToLength(state.cssTo
LengthConversionData())); |
76 NinePieceImage mask; | 76 NinePieceImage mask; |
77 mask.setMaskDefaults(); | 77 mask.setMaskDefaults(); |
78 CSSToStyleMap::mapNinePieceImage(state, CSSPropertyWebkitBoxReflect, reflect
Value->mask(), mask); | 78 CSSToStyleMap::mapNinePieceImage(state, CSSPropertyWebkitBoxReflect, reflect
Value.mask(), mask); |
79 reflection->setMask(mask); | 79 reflection->setMask(mask); |
80 | 80 |
81 return reflection.release(); | 81 return reflection.release(); |
82 } | 82 } |
83 | 83 |
84 Color StyleBuilderConverter::convertColor(StyleResolverState& state, CSSValue* v
alue, bool forVisitedLink) | 84 Color StyleBuilderConverter::convertColor(StyleResolverState& state, CSSValue va
lue, bool forVisitedLink) |
85 { | 85 { |
86 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 86 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
87 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa
lue, state.style()->color(), forVisitedLink); | 87 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa
lue, state.style()->color(), forVisitedLink); |
88 } | 88 } |
89 | 89 |
90 AtomicString StyleBuilderConverter::convertFragmentIdentifier(StyleResolverState
& state, CSSValue* value) | 90 AtomicString StyleBuilderConverter::convertFragmentIdentifier(StyleResolverState
& state, CSSValue value) |
91 { | 91 { |
92 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 92 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
93 if (primitiveValue->isURI()) | 93 if (primitiveValue.isURI()) |
94 return SVGURIReference::fragmentIdentifierFromIRIString(primitiveValue->
getStringValue(), state.element()->treeScope()); | 94 return SVGURIReference::fragmentIdentifierFromIRIString(primitiveValue.g
etStringValue(), state.element()->treeScope()); |
95 return nullAtom; | 95 return nullAtom; |
96 } | 96 } |
97 | 97 |
98 LengthBox StyleBuilderConverter::convertClip(StyleResolverState& state, CSSValue
* value) | 98 LengthBox StyleBuilderConverter::convertClip(StyleResolverState& state, CSSValue
value) |
99 { | 99 { |
100 Rect* rect = toCSSPrimitiveValue(value)->getRectValue(); | 100 Rect* rect = toCSSPrimitiveValue(value).getRectValue(); |
101 | 101 |
102 return LengthBox(convertLengthOrAuto(state, rect->top()), | 102 return LengthBox(convertLengthOrAuto(state, CSSValue(*rect->top())), |
103 convertLengthOrAuto(state, rect->right()), | 103 convertLengthOrAuto(state, CSSValue(*rect->right())), |
104 convertLengthOrAuto(state, rect->bottom()), | 104 convertLengthOrAuto(state, CSSValue(*rect->bottom())), |
105 convertLengthOrAuto(state, rect->left())); | 105 convertLengthOrAuto(state, CSSValue(*rect->left()))); |
106 } | 106 } |
107 | 107 |
108 static FontDescription::GenericFamilyType convertGenericFamily(CSSValueID valueI
D) | 108 static FontDescription::GenericFamilyType convertGenericFamily(CSSValueID valueI
D) |
109 { | 109 { |
110 switch (valueID) { | 110 switch (valueID) { |
111 case CSSValueWebkitBody: | 111 case CSSValueWebkitBody: |
112 return FontDescription::StandardFamily; | 112 return FontDescription::StandardFamily; |
113 case CSSValueSerif: | 113 case CSSValueSerif: |
114 return FontDescription::SerifFamily; | 114 return FontDescription::SerifFamily; |
115 case CSSValueSansSerif: | 115 case CSSValueSansSerif: |
116 return FontDescription::SansSerifFamily; | 116 return FontDescription::SansSerifFamily; |
117 case CSSValueCursive: | 117 case CSSValueCursive: |
118 return FontDescription::CursiveFamily; | 118 return FontDescription::CursiveFamily; |
119 case CSSValueFantasy: | 119 case CSSValueFantasy: |
120 return FontDescription::FantasyFamily; | 120 return FontDescription::FantasyFamily; |
121 case CSSValueMonospace: | 121 case CSSValueMonospace: |
122 return FontDescription::MonospaceFamily; | 122 return FontDescription::MonospaceFamily; |
123 case CSSValueWebkitPictograph: | 123 case CSSValueWebkitPictograph: |
124 return FontDescription::PictographFamily; | 124 return FontDescription::PictographFamily; |
125 default: | 125 default: |
126 return FontDescription::NoFamily; | 126 return FontDescription::NoFamily; |
127 } | 127 } |
128 } | 128 } |
129 | 129 |
130 static bool convertFontFamilyName(StyleResolverState& state, CSSPrimitiveValue*
primitiveValue, | 130 static bool convertFontFamilyName(StyleResolverState& state, CSSPrimitiveValue&
primitiveValue, |
131 FontDescription::GenericFamilyType& genericFamily, AtomicString& familyName) | 131 FontDescription::GenericFamilyType& genericFamily, AtomicString& familyName) |
132 { | 132 { |
133 if (primitiveValue->isString()) { | 133 if (primitiveValue.isString()) { |
134 genericFamily = FontDescription::NoFamily; | 134 genericFamily = FontDescription::NoFamily; |
135 familyName = AtomicString(primitiveValue->getStringValue()); | 135 familyName = AtomicString(primitiveValue.getStringValue()); |
136 } else if (state.document().settings()) { | 136 } else if (state.document().settings()) { |
137 genericFamily = convertGenericFamily(primitiveValue->getValueID()); | 137 genericFamily = convertGenericFamily(primitiveValue.getValueID()); |
138 familyName = state.fontBuilder().genericFontFamilyName(genericFamily); | 138 familyName = state.fontBuilder().genericFontFamilyName(genericFamily); |
139 } | 139 } |
140 | 140 |
141 return !familyName.isEmpty(); | 141 return !familyName.isEmpty(); |
142 } | 142 } |
143 | 143 |
144 FontDescription::FamilyDescription StyleBuilderConverter::convertFontFamily(Styl
eResolverState& state, CSSValue* value) | 144 FontDescription::FamilyDescription StyleBuilderConverter::convertFontFamily(Styl
eResolverState& state, CSSValue value) |
145 { | 145 { |
146 ASSERT(value->isValueList()); | 146 ASSERT(value.isValueList()); |
147 | 147 |
148 FontDescription::FamilyDescription desc(FontDescription::NoFamily); | 148 FontDescription::FamilyDescription desc(FontDescription::NoFamily); |
149 FontFamily* currFamily = nullptr; | 149 FontFamily* currFamily = nullptr; |
150 | 150 |
151 for (auto& family : toCSSValueList(*value)) { | 151 for (auto& family : toCSSValueList(value)) { |
152 FontDescription::GenericFamilyType genericFamily = FontDescription::NoFa
mily; | 152 FontDescription::GenericFamilyType genericFamily = FontDescription::NoFa
mily; |
153 AtomicString familyName; | 153 AtomicString familyName; |
154 | 154 |
155 if (!convertFontFamilyName(state, toCSSPrimitiveValue(family.get()), gen
ericFamily, familyName)) | 155 if (!convertFontFamilyName(state, toCSSPrimitiveValue(family), genericFa
mily, familyName)) |
156 continue; | 156 continue; |
157 | 157 |
158 if (!currFamily) { | 158 if (!currFamily) { |
159 currFamily = &desc.family; | 159 currFamily = &desc.family; |
160 } else { | 160 } else { |
161 RefPtr<SharedFontFamily> newFamily = SharedFontFamily::create(); | 161 RefPtr<SharedFontFamily> newFamily = SharedFontFamily::create(); |
162 currFamily->appendFamily(newFamily); | 162 currFamily->appendFamily(newFamily); |
163 currFamily = newFamily.get(); | 163 currFamily = newFamily.get(); |
164 } | 164 } |
165 | 165 |
166 currFamily->setFamily(familyName); | 166 currFamily->setFamily(familyName); |
167 | 167 |
168 if (genericFamily != FontDescription::NoFamily) | 168 if (genericFamily != FontDescription::NoFamily) |
169 desc.genericFamily = genericFamily; | 169 desc.genericFamily = genericFamily; |
170 } | 170 } |
171 | 171 |
172 return desc; | 172 return desc; |
173 } | 173 } |
174 | 174 |
175 PassRefPtr<FontFeatureSettings> StyleBuilderConverter::convertFontFeatureSetting
s(StyleResolverState& state, CSSValue* value) | 175 PassRefPtr<FontFeatureSettings> StyleBuilderConverter::convertFontFeatureSetting
s(StyleResolverState& state, CSSValue value) |
176 { | 176 { |
177 if (value->isPrimitiveValue() && toCSSPrimitiveValue(value)->getValueID() ==
CSSValueNormal) | 177 if (value.isPrimitiveValue() && toCSSPrimitiveValue(value).getValueID() == C
SSValueNormal) |
178 return FontBuilder::initialFeatureSettings(); | 178 return FontBuilder::initialFeatureSettings(); |
179 | 179 |
180 CSSValueList* list = toCSSValueList(value); | 180 CSSValueList& list = toCSSValueList(value); |
181 RefPtr<FontFeatureSettings> settings = FontFeatureSettings::create(); | 181 RefPtr<FontFeatureSettings> settings = FontFeatureSettings::create(); |
182 int len = list->length(); | 182 int len = list.length(); |
183 for (int i = 0; i < len; ++i) { | 183 for (int i = 0; i < len; ++i) { |
184 CSSFontFeatureValue* feature = toCSSFontFeatureValue(list->item(i)); | 184 CSSFontFeatureValue& feature = toCSSFontFeatureValue(list.item(i)); |
185 settings->append(FontFeature(feature->tag(), feature->value())); | 185 settings->append(FontFeature(feature.tag(), feature.value())); |
186 } | 186 } |
187 return settings; | 187 return settings; |
188 } | 188 } |
189 | 189 |
190 static float computeFontSize(StyleResolverState& state, CSSPrimitiveValue* primi
tiveValue, const FontDescription::Size& parentSize) | 190 static float computeFontSize(StyleResolverState& state, CSSPrimitiveValue& primi
tiveValue, const FontDescription::Size& parentSize) |
191 { | 191 { |
192 float em = state.parentStyle()->specifiedFontSize(); | 192 float em = state.parentStyle()->specifiedFontSize(); |
193 float rem = state.rootElementStyle() ? state.rootElementStyle()->specifiedFo
ntSize() : 1.0f; | 193 float rem = state.rootElementStyle() ? state.rootElementStyle()->specifiedFo
ntSize() : 1.0f; |
194 CSSToLengthConversionData::FontSizes fontSizes(em, rem, &state.parentStyle()
->font()); | 194 CSSToLengthConversionData::FontSizes fontSizes(em, rem, &state.parentStyle()
->font()); |
195 CSSToLengthConversionData::ViewportSize viewportSize(state.document().layout
View()); | 195 CSSToLengthConversionData::ViewportSize viewportSize(state.document().layout
View()); |
196 | 196 |
197 CSSToLengthConversionData conversionData(state.style(), fontSizes, viewportS
ize, 1.0f); | 197 CSSToLengthConversionData conversionData(state.style(), fontSizes, viewportS
ize, 1.0f); |
198 if (primitiveValue->isLength()) | 198 if (primitiveValue.isLength()) |
199 return primitiveValue->computeLength<float>(conversionData); | 199 return primitiveValue.computeLength<float>(conversionData); |
200 if (primitiveValue->isCalculatedPercentageWithLength()) | 200 if (primitiveValue.isCalculatedPercentageWithLength()) |
201 return primitiveValue->cssCalcValue()->toCalcValue(conversionData)->eval
uate(parentSize.value); | 201 return primitiveValue.cssCalcValue()->toCalcValue(conversionData)->evalu
ate(parentSize.value); |
202 | 202 |
203 ASSERT_NOT_REACHED(); | 203 ASSERT_NOT_REACHED(); |
204 return 0; | 204 return 0; |
205 } | 205 } |
206 | 206 |
207 FontDescription::Size StyleBuilderConverter::convertFontSize(StyleResolverState&
state, CSSValue* value) | 207 FontDescription::Size StyleBuilderConverter::convertFontSize(StyleResolverState&
state, CSSValue value) |
208 { | 208 { |
209 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 209 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
210 | 210 |
211 FontDescription::Size parentSize(0, 0.0f, false); | 211 FontDescription::Size parentSize(0, 0.0f, false); |
212 | 212 |
213 // FIXME: Find out when parentStyle could be 0? | 213 // FIXME: Find out when parentStyle could be 0? |
214 if (state.parentStyle()) | 214 if (state.parentStyle()) |
215 parentSize = state.parentFontDescription().size(); | 215 parentSize = state.parentFontDescription().size(); |
216 | 216 |
217 if (CSSValueID valueID = primitiveValue->getValueID()) { | 217 if (CSSValueID valueID = primitiveValue.getValueID()) { |
218 switch (valueID) { | 218 switch (valueID) { |
219 case CSSValueXxSmall: | 219 case CSSValueXxSmall: |
220 case CSSValueXSmall: | 220 case CSSValueXSmall: |
221 case CSSValueSmall: | 221 case CSSValueSmall: |
222 case CSSValueMedium: | 222 case CSSValueMedium: |
223 case CSSValueLarge: | 223 case CSSValueLarge: |
224 case CSSValueXLarge: | 224 case CSSValueXLarge: |
225 case CSSValueXxLarge: | 225 case CSSValueXxLarge: |
226 case CSSValueWebkitXxxLarge: | 226 case CSSValueWebkitXxxLarge: |
227 return FontDescription::Size(FontSize::keywordSize(valueID), 0.0f, f
alse); | 227 return FontDescription::Size(FontSize::keywordSize(valueID), 0.0f, f
alse); |
228 case CSSValueLarger: | 228 case CSSValueLarger: |
229 return FontDescription::largerSize(parentSize); | 229 return FontDescription::largerSize(parentSize); |
230 case CSSValueSmaller: | 230 case CSSValueSmaller: |
231 return FontDescription::smallerSize(parentSize); | 231 return FontDescription::smallerSize(parentSize); |
232 default: | 232 default: |
233 ASSERT_NOT_REACHED(); | 233 ASSERT_NOT_REACHED(); |
234 return FontBuilder::initialSize(); | 234 return FontBuilder::initialSize(); |
235 } | 235 } |
236 } | 236 } |
237 | 237 |
238 bool parentIsAbsoluteSize = state.parentFontDescription().isAbsoluteSize(); | 238 bool parentIsAbsoluteSize = state.parentFontDescription().isAbsoluteSize(); |
239 | 239 |
240 if (primitiveValue->isPercentage()) | 240 if (primitiveValue.isPercentage()) |
241 return FontDescription::Size(0, (primitiveValue->getFloatValue() * paren
tSize.value / 100.0f), parentIsAbsoluteSize); | 241 return FontDescription::Size(0, (primitiveValue.getFloatValue() * parent
Size.value / 100.0f), parentIsAbsoluteSize); |
242 | 242 |
243 return FontDescription::Size(0, computeFontSize(state, primitiveValue, paren
tSize), parentIsAbsoluteSize || !primitiveValue->isFontRelativeLength()); | 243 return FontDescription::Size(0, computeFontSize(state, primitiveValue, paren
tSize), parentIsAbsoluteSize || !primitiveValue.isFontRelativeLength()); |
244 } | 244 } |
245 | 245 |
246 float StyleBuilderConverter::convertFontSizeAdjust(StyleResolverState& state, CS
SValue* value) | 246 float StyleBuilderConverter::convertFontSizeAdjust(StyleResolverState& state, CS
SValue value) |
247 { | 247 { |
248 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 248 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
249 if (primitiveValue->getValueID() == CSSValueNone) | 249 if (primitiveValue.getValueID() == CSSValueNone) |
250 return FontBuilder::initialSizeAdjust(); | 250 return FontBuilder::initialSizeAdjust(); |
251 | 251 |
252 ASSERT(primitiveValue->isNumber()); | 252 ASSERT(primitiveValue.isNumber()); |
253 return primitiveValue->getFloatValue(); | 253 return primitiveValue.getFloatValue(); |
254 } | 254 } |
255 | 255 |
256 FontWeight StyleBuilderConverter::convertFontWeight(StyleResolverState& state, C
SSValue* value) | 256 FontWeight StyleBuilderConverter::convertFontWeight(StyleResolverState& state, C
SSValue value) |
257 { | 257 { |
258 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 258 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
259 switch (primitiveValue->getValueID()) { | 259 switch (primitiveValue.getValueID()) { |
260 case CSSValueBolder: | 260 case CSSValueBolder: |
261 return FontDescription::bolderWeight(state.parentStyle()->fontDescriptio
n().weight()); | 261 return FontDescription::bolderWeight(state.parentStyle()->fontDescriptio
n().weight()); |
262 case CSSValueLighter: | 262 case CSSValueLighter: |
263 return FontDescription::lighterWeight(state.parentStyle()->fontDescripti
on().weight()); | 263 return FontDescription::lighterWeight(state.parentStyle()->fontDescripti
on().weight()); |
264 default: | 264 default: |
265 return *primitiveValue; | 265 return primitiveValue; |
266 } | 266 } |
267 } | 267 } |
268 | 268 |
269 FontDescription::VariantLigatures StyleBuilderConverter::convertFontVariantLigat
ures(StyleResolverState&, CSSValue* value) | 269 FontDescription::VariantLigatures StyleBuilderConverter::convertFontVariantLigat
ures(StyleResolverState&, CSSValue value) |
270 { | 270 { |
271 if (value->isValueList()) { | 271 if (value.isValueList()) { |
272 FontDescription::VariantLigatures ligatures; | 272 FontDescription::VariantLigatures ligatures; |
273 CSSValueList* valueList = toCSSValueList(value); | 273 CSSValueList& valueList = toCSSValueList(value); |
274 for (size_t i = 0; i < valueList->length(); ++i) { | 274 for (size_t i = 0; i < valueList.length(); ++i) { |
275 CSSValue* item = valueList->item(i); | 275 CSSValue item = valueList.item(i); |
276 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(item); | 276 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(item); |
277 switch (primitiveValue->getValueID()) { | 277 switch (primitiveValue.getValueID()) { |
278 case CSSValueNoCommonLigatures: | 278 case CSSValueNoCommonLigatures: |
279 ligatures.common = FontDescription::DisabledLigaturesState; | 279 ligatures.common = FontDescription::DisabledLigaturesState; |
280 break; | 280 break; |
281 case CSSValueCommonLigatures: | 281 case CSSValueCommonLigatures: |
282 ligatures.common = FontDescription::EnabledLigaturesState; | 282 ligatures.common = FontDescription::EnabledLigaturesState; |
283 break; | 283 break; |
284 case CSSValueNoDiscretionaryLigatures: | 284 case CSSValueNoDiscretionaryLigatures: |
285 ligatures.discretionary = FontDescription::DisabledLigaturesStat
e; | 285 ligatures.discretionary = FontDescription::DisabledLigaturesStat
e; |
286 break; | 286 break; |
287 case CSSValueDiscretionaryLigatures: | 287 case CSSValueDiscretionaryLigatures: |
(...skipping 12 matching lines...) Expand all Loading... |
300 ligatures.contextual = FontDescription::EnabledLigaturesState; | 300 ligatures.contextual = FontDescription::EnabledLigaturesState; |
301 break; | 301 break; |
302 default: | 302 default: |
303 ASSERT_NOT_REACHED(); | 303 ASSERT_NOT_REACHED(); |
304 break; | 304 break; |
305 } | 305 } |
306 } | 306 } |
307 return ligatures; | 307 return ligatures; |
308 } | 308 } |
309 | 309 |
310 ASSERT_WITH_SECURITY_IMPLICATION(value->isPrimitiveValue()); | 310 ASSERT_WITH_SECURITY_IMPLICATION(value.isPrimitiveValue()); |
311 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNormal); | 311 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNormal); |
312 return FontDescription::VariantLigatures(); | 312 return FontDescription::VariantLigatures(); |
313 } | 313 } |
314 | 314 |
315 EGlyphOrientation StyleBuilderConverter::convertGlyphOrientation(StyleResolverSt
ate&, CSSValue* value) | 315 EGlyphOrientation StyleBuilderConverter::convertGlyphOrientation(StyleResolverSt
ate&, CSSValue value) |
316 { | 316 { |
317 if (!value->isPrimitiveValue()) | 317 if (!value.isPrimitiveValue()) |
318 return GO_0DEG; | 318 return GO_0DEG; |
319 | 319 |
320 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 320 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
321 if (primitiveValue->primitiveType() != CSSPrimitiveValue::CSS_DEG) | 321 if (primitiveValue.primitiveType() != CSSPrimitiveValue::CSS_DEG) |
322 return GO_0DEG; | 322 return GO_0DEG; |
323 | 323 |
324 float angle = fabsf(fmodf(primitiveValue->getFloatValue(), 360.0f)); | 324 float angle = fabsf(fmodf(primitiveValue.getFloatValue(), 360.0f)); |
325 | 325 |
326 if (angle <= 45.0f || angle > 315.0f) | 326 if (angle <= 45.0f || angle > 315.0f) |
327 return GO_0DEG; | 327 return GO_0DEG; |
328 if (angle > 45.0f && angle <= 135.0f) | 328 if (angle > 45.0f && angle <= 135.0f) |
329 return GO_90DEG; | 329 return GO_90DEG; |
330 if (angle > 135.0f && angle <= 225.0f) | 330 if (angle > 135.0f && angle <= 225.0f) |
331 return GO_180DEG; | 331 return GO_180DEG; |
332 return GO_270DEG; | 332 return GO_270DEG; |
333 } | 333 } |
334 | 334 |
335 StyleSelfAlignmentData StyleBuilderConverter::convertSelfOrDefaultAlignmentData(
StyleResolverState&, CSSValue* value) | 335 StyleSelfAlignmentData StyleBuilderConverter::convertSelfOrDefaultAlignmentData(
StyleResolverState&, CSSValue value) |
336 { | 336 { |
337 StyleSelfAlignmentData alignmentData = ComputedStyle::initialSelfAlignment()
; | 337 StyleSelfAlignmentData alignmentData = ComputedStyle::initialSelfAlignment()
; |
338 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 338 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
339 if (Pair* pairValue = primitiveValue->getPairValue()) { | 339 if (Pair* pairValue = primitiveValue.getPairValue()) { |
340 if (pairValue->first()->getValueID() == CSSValueLegacy) { | 340 if (pairValue->first()->getValueID() == CSSValueLegacy) { |
341 alignmentData.setPositionType(LegacyPosition); | 341 alignmentData.setPositionType(LegacyPosition); |
342 alignmentData.setPosition(*pairValue->second()); | 342 alignmentData.setPosition(*pairValue->second()); |
343 } else { | 343 } else { |
344 alignmentData.setPosition(*pairValue->first()); | 344 alignmentData.setPosition(*pairValue->first()); |
345 alignmentData.setOverflow(*pairValue->second()); | 345 alignmentData.setOverflow(*pairValue->second()); |
346 } | 346 } |
347 } else { | 347 } else { |
348 alignmentData.setPosition(*primitiveValue); | 348 alignmentData.setPosition(primitiveValue); |
349 } | 349 } |
350 return alignmentData; | 350 return alignmentData; |
351 } | 351 } |
352 | 352 |
353 StyleContentAlignmentData StyleBuilderConverter::convertContentAlignmentData(Sty
leResolverState&, CSSValue* value) | 353 StyleContentAlignmentData StyleBuilderConverter::convertContentAlignmentData(Sty
leResolverState&, CSSValue value) |
354 { | 354 { |
355 StyleContentAlignmentData alignmentData = ComputedStyle::initialContentAlign
ment(); | 355 StyleContentAlignmentData alignmentData = ComputedStyle::initialContentAlign
ment(); |
356 CSSContentDistributionValue* contentValue = toCSSContentDistributionValue(va
lue); | 356 CSSContentDistributionValue& contentValue = toCSSContentDistributionValue(va
lue); |
357 if (contentValue->distribution()->getValueID() != CSSValueInvalid) | 357 if (contentValue.distribution()->getValueID() != CSSValueInvalid) |
358 alignmentData.setDistribution(*contentValue->distribution()); | 358 alignmentData.setDistribution(*contentValue.distribution()); |
359 if (contentValue->position()->getValueID() != CSSValueInvalid) | 359 if (contentValue.position()->getValueID() != CSSValueInvalid) |
360 alignmentData.setPosition(*contentValue->position()); | 360 alignmentData.setPosition(*contentValue.position()); |
361 if (contentValue->overflow()->getValueID() != CSSValueInvalid) | 361 if (contentValue.overflow()->getValueID() != CSSValueInvalid) |
362 alignmentData.setOverflow(*contentValue->overflow()); | 362 alignmentData.setOverflow(*contentValue.overflow()); |
363 return alignmentData; | 363 return alignmentData; |
364 } | 364 } |
365 | 365 |
366 GridAutoFlow StyleBuilderConverter::convertGridAutoFlow(StyleResolverState&, CSS
Value* value) | 366 GridAutoFlow StyleBuilderConverter::convertGridAutoFlow(StyleResolverState&, CSS
Value value) |
367 { | 367 { |
368 CSSValueList* list = toCSSValueList(value); | 368 CSSValueList& list = toCSSValueList(value); |
369 | 369 |
370 ASSERT(list->length() >= 1); | 370 ASSERT(list.length() >= 1); |
371 CSSPrimitiveValue* first = toCSSPrimitiveValue(list->item(0)); | 371 CSSPrimitiveValue* first = &toCSSPrimitiveValue(list.item(0)); |
372 CSSPrimitiveValue* second = list->length() == 2 ? toCSSPrimitiveValue(list->
item(1)) : nullptr; | 372 CSSPrimitiveValue* second = list.length() == 2 ? &toCSSPrimitiveValue(list.i
tem(1)) : nullptr; |
373 | 373 |
374 switch (first->getValueID()) { | 374 switch (first->getValueID()) { |
375 case CSSValueRow: | 375 case CSSValueRow: |
376 if (second && second->getValueID() == CSSValueDense) | 376 if (second && second->getValueID() == CSSValueDense) |
377 return AutoFlowRowDense; | 377 return AutoFlowRowDense; |
378 return AutoFlowRow; | 378 return AutoFlowRow; |
379 case CSSValueColumn: | 379 case CSSValueColumn: |
380 if (second && second->getValueID() == CSSValueDense) | 380 if (second && second->getValueID() == CSSValueDense) |
381 return AutoFlowColumnDense; | 381 return AutoFlowColumnDense; |
382 return AutoFlowColumn; | 382 return AutoFlowColumn; |
383 case CSSValueDense: | 383 case CSSValueDense: |
384 if (second && second->getValueID() == CSSValueColumn) | 384 if (second && second->getValueID() == CSSValueColumn) |
385 return AutoFlowColumnDense; | 385 return AutoFlowColumnDense; |
386 return AutoFlowRowDense; | 386 return AutoFlowRowDense; |
387 default: | 387 default: |
388 ASSERT_NOT_REACHED(); | 388 ASSERT_NOT_REACHED(); |
389 return ComputedStyle::initialGridAutoFlow(); | 389 return ComputedStyle::initialGridAutoFlow(); |
390 } | 390 } |
391 } | 391 } |
392 | 392 |
393 GridPosition StyleBuilderConverter::convertGridPosition(StyleResolverState&, CSS
Value* value) | 393 GridPosition StyleBuilderConverter::convertGridPosition(StyleResolverState&, CSS
Value value) |
394 { | 394 { |
395 // We accept the specification's grammar: | 395 // We accept the specification's grammar: |
396 // 'auto' | [ <integer> || <custom-ident> ] | [ span && [ <integer> || <cust
om-ident> ] ] | <custom-ident> | 396 // 'auto' | [ <integer> || <custom-ident> ] | [ span && [ <integer> || <cust
om-ident> ] ] | <custom-ident> |
397 | 397 |
398 GridPosition position; | 398 GridPosition position; |
399 | 399 |
400 if (value->isPrimitiveValue()) { | 400 if (value.isPrimitiveValue()) { |
401 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 401 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
402 // We translate <custom-ident> to <string> during parsing as it | 402 // We translate <custom-ident> to <string> during parsing as it |
403 // makes handling it more simple. | 403 // makes handling it more simple. |
404 if (primitiveValue->isString()) { | 404 if (primitiveValue.isString()) { |
405 position.setNamedGridArea(primitiveValue->getStringValue()); | 405 position.setNamedGridArea(primitiveValue.getStringValue()); |
406 return position; | 406 return position; |
407 } | 407 } |
408 | 408 |
409 ASSERT(primitiveValue->getValueID() == CSSValueAuto); | 409 ASSERT(primitiveValue.getValueID() == CSSValueAuto); |
410 return position; | 410 return position; |
411 } | 411 } |
412 | 412 |
413 CSSValueList* values = toCSSValueList(value); | 413 CSSValueList& values = toCSSValueList(value); |
414 ASSERT(values->length()); | 414 ASSERT(values.length()); |
415 | 415 |
416 bool isSpanPosition = false; | 416 bool isSpanPosition = false; |
417 // The specification makes the <integer> optional, in which case it default
to '1'. | 417 // The specification makes the <integer> optional, in which case it default
to '1'. |
418 int gridLineNumber = 1; | 418 int gridLineNumber = 1; |
419 String gridLineName; | 419 String gridLineName; |
420 | 420 |
421 auto it = values->begin(); | 421 auto it = values.begin(); |
422 CSSPrimitiveValue* currentValue = toCSSPrimitiveValue(it->get()); | 422 CSSPrimitiveValue* currentValue = &toCSSPrimitiveValue(*it); |
423 if (currentValue->getValueID() == CSSValueSpan) { | 423 if (currentValue->getValueID() == CSSValueSpan) { |
424 isSpanPosition = true; | 424 isSpanPosition = true; |
425 ++it; | 425 ++it; |
426 currentValue = it != values->end() ? toCSSPrimitiveValue(it->get()) : 0; | 426 currentValue = it != values.end() ? &toCSSPrimitiveValue(*it) : 0; |
427 } | 427 } |
428 | 428 |
429 if (currentValue && currentValue->isNumber()) { | 429 if (currentValue && currentValue->isNumber()) { |
430 gridLineNumber = currentValue->getIntValue(); | 430 gridLineNumber = currentValue->getIntValue(); |
431 ++it; | 431 ++it; |
432 currentValue = it != values->end() ? toCSSPrimitiveValue(it->get()) : 0; | 432 currentValue = it != values.end() ? &toCSSPrimitiveValue(*it) : 0; |
433 } | 433 } |
434 | 434 |
435 if (currentValue && currentValue->isString()) { | 435 if (currentValue && currentValue->isString()) { |
436 gridLineName = currentValue->getStringValue(); | 436 gridLineName = currentValue->getStringValue(); |
437 ++it; | 437 ++it; |
438 } | 438 } |
439 | 439 |
440 ASSERT(it == values->end()); | 440 ASSERT(it == values.end()); |
441 if (isSpanPosition) | 441 if (isSpanPosition) |
442 position.setSpanPosition(gridLineNumber, gridLineName); | 442 position.setSpanPosition(gridLineNumber, gridLineName); |
443 else | 443 else |
444 position.setExplicitPosition(gridLineNumber, gridLineName); | 444 position.setExplicitPosition(gridLineNumber, gridLineName); |
445 | 445 |
446 return position; | 446 return position; |
447 } | 447 } |
448 | 448 |
449 GridTrackSize StyleBuilderConverter::convertGridTrackSize(StyleResolverState& st
ate, CSSValue* value) | 449 GridTrackSize StyleBuilderConverter::convertGridTrackSize(StyleResolverState& st
ate, CSSValue value) |
450 { | 450 { |
451 if (value->isPrimitiveValue()) | 451 if (value.isPrimitiveValue()) |
452 return GridTrackSize(convertGridTrackBreadth(state, toCSSPrimitiveValue(
value))); | 452 return GridTrackSize(convertGridTrackBreadth(state, &toCSSPrimitiveValue
(value))); |
453 | 453 |
454 CSSFunctionValue* minmaxFunction = toCSSFunctionValue(value); | 454 CSSFunctionValue& minmaxFunction = toCSSFunctionValue(value); |
455 ASSERT_WITH_SECURITY_IMPLICATION(minmaxFunction->length() == 2); | 455 ASSERT_WITH_SECURITY_IMPLICATION(minmaxFunction.length() == 2); |
456 GridLength minTrackBreadth(convertGridTrackBreadth(state, toCSSPrimitiveValu
e(minmaxFunction->item(0)))); | 456 GridLength minTrackBreadth(convertGridTrackBreadth(state, &toCSSPrimitiveVal
ue(minmaxFunction.item(0)))); |
457 GridLength maxTrackBreadth(convertGridTrackBreadth(state, toCSSPrimitiveValu
e(minmaxFunction->item(1)))); | 457 GridLength maxTrackBreadth(convertGridTrackBreadth(state, &toCSSPrimitiveVal
ue(minmaxFunction.item(1)))); |
458 return GridTrackSize(minTrackBreadth, maxTrackBreadth); | 458 return GridTrackSize(minTrackBreadth, maxTrackBreadth); |
459 } | 459 } |
460 | 460 |
461 bool StyleBuilderConverter::convertGridTrackList(CSSValue* value, Vector<GridTra
ckSize>& trackSizes, NamedGridLinesMap& namedGridLines, OrderedNamedGridLines& o
rderedNamedGridLines, StyleResolverState& state) | 461 bool StyleBuilderConverter::convertGridTrackList(CSSValue value, Vector<GridTrac
kSize>& trackSizes, NamedGridLinesMap& namedGridLines, OrderedNamedGridLines& or
deredNamedGridLines, StyleResolverState& state) |
462 { | 462 { |
463 // Handle 'none'. | 463 // Handle 'none'. |
464 if (value->isPrimitiveValue()) { | 464 if (value.isPrimitiveValue()) { |
465 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 465 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
466 return primitiveValue->getValueID() == CSSValueNone; | 466 return primitiveValue.getValueID() == CSSValueNone; |
467 } | 467 } |
468 | 468 |
469 if (!value->isValueList()) | 469 if (!value.isValueList()) |
470 return false; | 470 return false; |
471 | 471 |
472 size_t currentNamedGridLine = 0; | 472 size_t currentNamedGridLine = 0; |
473 for (auto& currValue : *toCSSValueList(value)) { | 473 for (auto& currValue : toCSSValueList(value)) { |
474 if (currValue->isGridLineNamesValue()) { | 474 if (currValue.isGridLineNamesValue()) { |
475 for (auto& namedGridLineValue : toCSSGridLineNamesValue(*currValue))
{ | 475 for (auto& namedGridLineValue : toCSSGridLineNamesValue(currValue))
{ |
476 String namedGridLine = toCSSPrimitiveValue(namedGridLineValue.ge
t())->getStringValue(); | 476 String namedGridLine = toCSSPrimitiveValue(namedGridLineValue).g
etStringValue(); |
477 NamedGridLinesMap::AddResult result = namedGridLines.add(namedGr
idLine, Vector<size_t>()); | 477 NamedGridLinesMap::AddResult result = namedGridLines.add(namedGr
idLine, Vector<size_t>()); |
478 result.storedValue->value.append(currentNamedGridLine); | 478 result.storedValue->value.append(currentNamedGridLine); |
479 OrderedNamedGridLines::AddResult orderedInsertionResult = ordere
dNamedGridLines.add(currentNamedGridLine, Vector<String>()); | 479 OrderedNamedGridLines::AddResult orderedInsertionResult = ordere
dNamedGridLines.add(currentNamedGridLine, Vector<String>()); |
480 orderedInsertionResult.storedValue->value.append(namedGridLine); | 480 orderedInsertionResult.storedValue->value.append(namedGridLine); |
481 } | 481 } |
482 continue; | 482 continue; |
483 } | 483 } |
484 | 484 |
485 ++currentNamedGridLine; | 485 ++currentNamedGridLine; |
486 trackSizes.append(convertGridTrackSize(state, currValue.get())); | 486 trackSizes.append(convertGridTrackSize(state, currValue)); |
487 } | 487 } |
488 | 488 |
489 // The parser should have rejected any <track-list> without any <track-size>
as | 489 // The parser should have rejected any <track-list> without any <track-size>
as |
490 // this is not conformant to the syntax. | 490 // this is not conformant to the syntax. |
491 ASSERT(!trackSizes.isEmpty()); | 491 ASSERT(!trackSizes.isEmpty()); |
492 return true; | 492 return true; |
493 } | 493 } |
494 | 494 |
495 void StyleBuilderConverter::convertOrderedNamedGridLinesMapToNamedGridLinesMap(c
onst OrderedNamedGridLines& orderedNamedGridLines, NamedGridLinesMap& namedGridL
ines) | 495 void StyleBuilderConverter::convertOrderedNamedGridLinesMapToNamedGridLinesMap(c
onst OrderedNamedGridLines& orderedNamedGridLines, NamedGridLinesMap& namedGridL
ines) |
496 { | 496 { |
(...skipping 25 matching lines...) Expand all Loading... |
522 std::sort(startResult.storedValue->value.begin(), startResult.stored
Value->value.end()); | 522 std::sort(startResult.storedValue->value.begin(), startResult.stored
Value->value.end()); |
523 } | 523 } |
524 { | 524 { |
525 NamedGridLinesMap::AddResult endResult = namedGridLines.add(namedGri
dAreaEntry.key + "-end", Vector<size_t>()); | 525 NamedGridLinesMap::AddResult endResult = namedGridLines.add(namedGri
dAreaEntry.key + "-end", Vector<size_t>()); |
526 endResult.storedValue->value.append(areaSpan.resolvedFinalPosition.t
oInt() + 1); | 526 endResult.storedValue->value.append(areaSpan.resolvedFinalPosition.t
oInt() + 1); |
527 std::sort(endResult.storedValue->value.begin(), endResult.storedValu
e->value.end()); | 527 std::sort(endResult.storedValue->value.begin(), endResult.storedValu
e->value.end()); |
528 } | 528 } |
529 } | 529 } |
530 } | 530 } |
531 | 531 |
532 Length StyleBuilderConverter::convertLength(const StyleResolverState& state, CSS
Value* value) | 532 Length StyleBuilderConverter::convertLength(const StyleResolverState& state, CSS
Value value) |
533 { | 533 { |
534 return toCSSPrimitiveValue(value)->convertToLength(state.cssToLengthConversi
onData()); | 534 return toCSSPrimitiveValue(value).convertToLength(state.cssToLengthConversio
nData()); |
535 } | 535 } |
536 | 536 |
537 UnzoomedLength StyleBuilderConverter::convertUnzoomedLength(const StyleResolverS
tate& state, CSSValue* value) | 537 UnzoomedLength StyleBuilderConverter::convertUnzoomedLength(const StyleResolverS
tate& state, CSSValue value) |
538 { | 538 { |
539 return UnzoomedLength(toCSSPrimitiveValue(value)->convertToLength(state.cssT
oLengthConversionData().copyWithAdjustedZoom(1.0f))); | 539 return UnzoomedLength(toCSSPrimitiveValue(value).convertToLength(state.cssTo
LengthConversionData().copyWithAdjustedZoom(1.0f))); |
540 } | 540 } |
541 | 541 |
542 Length StyleBuilderConverter::convertLengthOrAuto(const StyleResolverState& stat
e, CSSValue* value) | 542 Length StyleBuilderConverter::convertLengthOrAuto(const StyleResolverState& stat
e, CSSValue value) |
543 { | 543 { |
544 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 544 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
545 if (primitiveValue->getValueID() == CSSValueAuto) | 545 if (primitiveValue.getValueID() == CSSValueAuto) |
546 return Length(Auto); | 546 return Length(Auto); |
547 return primitiveValue->convertToLength(state.cssToLengthConversionData()); | 547 return primitiveValue.convertToLength(state.cssToLengthConversionData()); |
548 } | 548 } |
549 | 549 |
550 Length StyleBuilderConverter::convertLengthSizing(StyleResolverState& state, CSS
Value* value) | 550 Length StyleBuilderConverter::convertLengthSizing(StyleResolverState& state, CSS
Value value) |
551 { | 551 { |
552 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 552 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
553 switch (primitiveValue->getValueID()) { | 553 switch (primitiveValue.getValueID()) { |
554 case CSSValueInvalid: | 554 case CSSValueInvalid: |
555 return convertLength(state, value); | 555 return convertLength(state, value); |
556 case CSSValueIntrinsic: | 556 case CSSValueIntrinsic: |
557 return Length(Intrinsic); | 557 return Length(Intrinsic); |
558 case CSSValueMinIntrinsic: | 558 case CSSValueMinIntrinsic: |
559 return Length(MinIntrinsic); | 559 return Length(MinIntrinsic); |
560 case CSSValueWebkitMinContent: | 560 case CSSValueWebkitMinContent: |
561 return Length(MinContent); | 561 return Length(MinContent); |
562 case CSSValueWebkitMaxContent: | 562 case CSSValueWebkitMaxContent: |
563 return Length(MaxContent); | 563 return Length(MaxContent); |
564 case CSSValueWebkitFillAvailable: | 564 case CSSValueWebkitFillAvailable: |
565 return Length(FillAvailable); | 565 return Length(FillAvailable); |
566 case CSSValueWebkitFitContent: | 566 case CSSValueWebkitFitContent: |
567 return Length(FitContent); | 567 return Length(FitContent); |
568 case CSSValueAuto: | 568 case CSSValueAuto: |
569 return Length(Auto); | 569 return Length(Auto); |
570 default: | 570 default: |
571 ASSERT_NOT_REACHED(); | 571 ASSERT_NOT_REACHED(); |
572 return Length(); | 572 return Length(); |
573 } | 573 } |
574 } | 574 } |
575 | 575 |
576 Length StyleBuilderConverter::convertLengthMaxSizing(StyleResolverState& state,
CSSValue* value) | 576 Length StyleBuilderConverter::convertLengthMaxSizing(StyleResolverState& state,
CSSValue value) |
577 { | 577 { |
578 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 578 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
579 if (primitiveValue->getValueID() == CSSValueNone) | 579 if (primitiveValue.getValueID() == CSSValueNone) |
580 return Length(MaxSizeNone); | 580 return Length(MaxSizeNone); |
581 return convertLengthSizing(state, value); | 581 return convertLengthSizing(state, value); |
582 } | 582 } |
583 | 583 |
584 TabSize StyleBuilderConverter::convertLengthOrTabSpaces(StyleResolverState& stat
e, CSSValue* value) | 584 TabSize StyleBuilderConverter::convertLengthOrTabSpaces(StyleResolverState& stat
e, CSSValue value) |
585 { | 585 { |
586 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 586 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
587 if (primitiveValue->isNumber()) | 587 if (primitiveValue.isNumber()) |
588 return TabSize(primitiveValue->getIntValue()); | 588 return TabSize(primitiveValue.getIntValue()); |
589 return TabSize(primitiveValue->computeLength<float>(state.cssToLengthConvers
ionData())); | 589 return TabSize(primitiveValue.computeLength<float>(state.cssToLengthConversi
onData())); |
590 } | 590 } |
591 | 591 |
592 LineBoxContain StyleBuilderConverter::convertLineBoxContain(StyleResolverState&,
CSSValue* value) | 592 LineBoxContain StyleBuilderConverter::convertLineBoxContain(StyleResolverState&,
CSSValue value) |
593 { | 593 { |
594 if (value->isPrimitiveValue()) { | 594 if (value.isPrimitiveValue()) { |
595 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); | 595 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); |
596 return LineBoxContainNone; | 596 return LineBoxContainNone; |
597 } | 597 } |
598 | 598 |
599 return toCSSLineBoxContainValue(value)->value(); | 599 return toCSSLineBoxContainValue(value).value(); |
600 } | 600 } |
601 | 601 |
602 static CSSToLengthConversionData lineHeightToLengthConversionData(StyleResolverS
tate& state) | 602 static CSSToLengthConversionData lineHeightToLengthConversionData(StyleResolverS
tate& state) |
603 { | 603 { |
604 float multiplier = state.style()->effectiveZoom(); | 604 float multiplier = state.style()->effectiveZoom(); |
605 if (LocalFrame* frame = state.document().frame()) | 605 if (LocalFrame* frame = state.document().frame()) |
606 multiplier *= frame->textZoomFactor(); | 606 multiplier *= frame->textZoomFactor(); |
607 return state.cssToLengthConversionData().copyWithAdjustedZoom(multiplier); | 607 return state.cssToLengthConversionData().copyWithAdjustedZoom(multiplier); |
608 } | 608 } |
609 | 609 |
610 Length StyleBuilderConverter::convertLineHeight(StyleResolverState& state, CSSVa
lue* value) | 610 Length StyleBuilderConverter::convertLineHeight(StyleResolverState& state, CSSVa
lue value) |
611 { | 611 { |
612 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 612 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
613 | 613 |
614 if (primitiveValue->isLength()) | 614 if (primitiveValue.isLength()) |
615 return primitiveValue->computeLength<Length>(lineHeightToLengthConversio
nData(state)); | 615 return primitiveValue.computeLength<Length>(lineHeightToLengthConversion
Data(state)); |
616 if (primitiveValue->isPercentage()) | 616 if (primitiveValue.isPercentage()) |
617 return Length((state.style()->computedFontSize() * primitiveValue->getIn
tValue()) / 100.0, Fixed); | 617 return Length((state.style()->computedFontSize() * primitiveValue.getInt
Value()) / 100.0, Fixed); |
618 if (primitiveValue->isNumber()) | 618 if (primitiveValue.isNumber()) |
619 return Length(primitiveValue->getDoubleValue() * 100.0, Percent); | 619 return Length(primitiveValue.getDoubleValue() * 100.0, Percent); |
620 if (primitiveValue->isCalculated()) { | 620 if (primitiveValue.isCalculated()) { |
621 Length zoomedLength = Length(primitiveValue->cssCalcValue()->toCalcValue
(lineHeightToLengthConversionData(state))); | 621 Length zoomedLength = Length(primitiveValue.cssCalcValue()->toCalcValue(
lineHeightToLengthConversionData(state))); |
622 return Length(valueForLength(zoomedLength, state.style()->fontSize()), F
ixed); | 622 return Length(valueForLength(zoomedLength, state.style()->fontSize()), F
ixed); |
623 } | 623 } |
624 | 624 |
625 ASSERT(primitiveValue->getValueID() == CSSValueNormal); | 625 ASSERT(primitiveValue.getValueID() == CSSValueNormal); |
626 return ComputedStyle::initialLineHeight(); | 626 return ComputedStyle::initialLineHeight(); |
627 } | 627 } |
628 | 628 |
629 float StyleBuilderConverter::convertNumberOrPercentage(StyleResolverState& state
, CSSValue* value) | 629 float StyleBuilderConverter::convertNumberOrPercentage(StyleResolverState& state
, CSSValue value) |
630 { | 630 { |
631 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 631 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
632 ASSERT(primitiveValue->isNumber() || primitiveValue->isPercentage()); | 632 ASSERT(primitiveValue.isNumber() || primitiveValue.isPercentage()); |
633 if (primitiveValue->isNumber()) | 633 if (primitiveValue.isNumber()) |
634 return primitiveValue->getFloatValue(); | 634 return primitiveValue.getFloatValue(); |
635 return primitiveValue->getFloatValue() / 100.0f; | 635 return primitiveValue.getFloatValue() / 100.0f; |
636 } | 636 } |
637 | 637 |
638 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> | 638 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> |
639 static Length convertPositionLength(StyleResolverState& state, CSSPrimitiveValue
* primitiveValue) | 639 static Length convertPositionLength(StyleResolverState& state, CSSPrimitiveValue
* primitiveValue) |
640 { | 640 { |
641 if (Pair* pair = primitiveValue->getPairValue()) { | 641 if (Pair* pair = primitiveValue->getPairValue()) { |
642 Length length = StyleBuilderConverter::convertLength(state, pair->second
()); | 642 Length length = StyleBuilderConverter::convertLength(state, CSSValue(*pa
ir->second())); |
643 if (pair->first()->getValueID() == cssValueFor0) | 643 if (pair->first()->getValueID() == cssValueFor0) |
644 return length; | 644 return length; |
645 ASSERT(pair->first()->getValueID() == cssValueFor100); | 645 ASSERT(pair->first()->getValueID() == cssValueFor100); |
646 return length.subtractFromOneHundredPercent(); | 646 return length.subtractFromOneHundredPercent(); |
647 } | 647 } |
648 | 648 |
649 return StyleBuilderConverter::convertLength(state, primitiveValue); | 649 return StyleBuilderConverter::convertLength(state, CSSValue(*primitiveValue)
); |
650 } | 650 } |
651 | 651 |
652 LengthPoint StyleBuilderConverter::convertPosition(StyleResolverState& state, CS
SValue* value) | 652 LengthPoint StyleBuilderConverter::convertPosition(StyleResolverState& state, CS
SValue value) |
653 { | 653 { |
654 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 654 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
655 Pair* pair = primitiveValue->getPairValue(); | 655 Pair* pair = primitiveValue.getPairValue(); |
656 return LengthPoint( | 656 return LengthPoint( |
657 convertPositionLength<CSSValueLeft, CSSValueRight>(state, pair->first())
, | 657 convertPositionLength<CSSValueLeft, CSSValueRight>(state, pair->first())
, |
658 convertPositionLength<CSSValueTop, CSSValueBottom>(state, pair->second()
) | 658 convertPositionLength<CSSValueTop, CSSValueBottom>(state, pair->second()
) |
659 ); | 659 ); |
660 } | 660 } |
661 | 661 |
662 static float convertPerspectiveLength(StyleResolverState& state, CSSPrimitiveVal
ue* primitiveValue) | 662 static float convertPerspectiveLength(StyleResolverState& state, CSSPrimitiveVal
ue& primitiveValue) |
663 { | 663 { |
664 return std::max(primitiveValue->computeLength<float>(state.cssToLengthConver
sionData()), 0.0f); | 664 return std::max(primitiveValue.computeLength<float>(state.cssToLengthConvers
ionData()), 0.0f); |
665 } | 665 } |
666 | 666 |
667 float StyleBuilderConverter::convertPerspective(StyleResolverState& state, CSSVa
lue* value) | 667 float StyleBuilderConverter::convertPerspective(StyleResolverState& state, CSSVa
lue value) |
668 { | 668 { |
669 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 669 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
670 | 670 |
671 if (primitiveValue->getValueID() == CSSValueNone) | 671 if (primitiveValue.getValueID() == CSSValueNone) |
672 return ComputedStyle::initialPerspective(); | 672 return ComputedStyle::initialPerspective(); |
673 return convertPerspectiveLength(state, primitiveValue); | 673 return convertPerspectiveLength(state, primitiveValue); |
674 } | 674 } |
675 | 675 |
676 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> | 676 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> |
677 static Length convertOriginLength(StyleResolverState& state, CSSPrimitiveValue*
primitiveValue) | 677 static Length convertOriginLength(StyleResolverState& state, CSSPrimitiveValue&
primitiveValue) |
678 { | 678 { |
679 if (primitiveValue->isValueID()) { | 679 if (primitiveValue.isValueID()) { |
680 switch (primitiveValue->getValueID()) { | 680 switch (primitiveValue.getValueID()) { |
681 case cssValueFor0: | 681 case cssValueFor0: |
682 return Length(0, Percent); | 682 return Length(0, Percent); |
683 case cssValueFor100: | 683 case cssValueFor100: |
684 return Length(100, Percent); | 684 return Length(100, Percent); |
685 case CSSValueCenter: | 685 case CSSValueCenter: |
686 return Length(50, Percent); | 686 return Length(50, Percent); |
687 default: | 687 default: |
688 ASSERT_NOT_REACHED(); | 688 ASSERT_NOT_REACHED(); |
689 } | 689 } |
690 } | 690 } |
691 | 691 |
692 return StyleBuilderConverter::convertLength(state, primitiveValue); | 692 return StyleBuilderConverter::convertLength(state, CSSValue(primitiveValue))
; |
693 } | 693 } |
694 | 694 |
695 LengthPoint StyleBuilderConverter::convertPerspectiveOrigin(StyleResolverState&
state, CSSValue* value) | 695 LengthPoint StyleBuilderConverter::convertPerspectiveOrigin(StyleResolverState&
state, CSSValue value) |
696 { | 696 { |
697 CSSValueList* list = toCSSValueList(value); | 697 CSSValueList& list = toCSSValueList(value); |
698 ASSERT(list->length() == 2); | 698 ASSERT(list.length() == 2); |
699 | 699 |
700 CSSPrimitiveValue* primitiveValueX = toCSSPrimitiveValue(list->item(0)); | 700 CSSPrimitiveValue& primitiveValueX = toCSSPrimitiveValue(list.item(0)); |
701 CSSPrimitiveValue* primitiveValueY = toCSSPrimitiveValue(list->item(1)); | 701 CSSPrimitiveValue& primitiveValueY = toCSSPrimitiveValue(list.item(1)); |
702 | 702 |
703 return LengthPoint( | 703 return LengthPoint( |
704 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX)
, | 704 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX)
, |
705 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) | 705 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) |
706 ); | 706 ); |
707 } | 707 } |
708 | 708 |
709 EPaintOrder StyleBuilderConverter::convertPaintOrder(StyleResolverState&, CSSVal
ue* cssPaintOrder) | 709 EPaintOrder StyleBuilderConverter::convertPaintOrder(StyleResolverState&, CSSVal
ue cssPaintOrder) |
710 { | 710 { |
711 if (cssPaintOrder->isValueList()) { | 711 if (cssPaintOrder.isValueList()) { |
712 int paintOrder = 0; | 712 int paintOrder = 0; |
713 const CSSValueList& list = *toCSSValueList(cssPaintOrder); | 713 const CSSValueList& list = toCSSValueList(cssPaintOrder); |
714 for (size_t i = 0; i < list.length(); ++i) { | 714 for (size_t i = 0; i < list.length(); ++i) { |
715 EPaintOrderType paintOrderType = PT_NONE; | 715 EPaintOrderType paintOrderType = PT_NONE; |
716 switch (toCSSPrimitiveValue(list.item(i))->getValueID()) { | 716 switch (toCSSPrimitiveValue(list.item(i)).getValueID()) { |
717 case CSSValueFill: | 717 case CSSValueFill: |
718 paintOrderType = PT_FILL; | 718 paintOrderType = PT_FILL; |
719 break; | 719 break; |
720 case CSSValueStroke: | 720 case CSSValueStroke: |
721 paintOrderType = PT_STROKE; | 721 paintOrderType = PT_STROKE; |
722 break; | 722 break; |
723 case CSSValueMarkers: | 723 case CSSValueMarkers: |
724 paintOrderType = PT_MARKERS; | 724 paintOrderType = PT_MARKERS; |
725 break; | 725 break; |
726 default: | 726 default: |
727 ASSERT_NOT_REACHED(); | 727 ASSERT_NOT_REACHED(); |
728 break; | 728 break; |
729 } | 729 } |
730 | 730 |
731 paintOrder |= (paintOrderType << kPaintOrderBitwidth*i); | 731 paintOrder |= (paintOrderType << kPaintOrderBitwidth*i); |
732 } | 732 } |
733 return (EPaintOrder)paintOrder; | 733 return (EPaintOrder)paintOrder; |
734 } | 734 } |
735 | 735 |
736 return PO_NORMAL; | 736 return PO_NORMAL; |
737 } | 737 } |
738 | 738 |
739 Length StyleBuilderConverter::convertQuirkyLength(StyleResolverState& state, CSS
Value* value) | 739 Length StyleBuilderConverter::convertQuirkyLength(StyleResolverState& state, CSS
Value value) |
740 { | 740 { |
741 Length length = convertLengthOrAuto(state, value); | 741 Length length = convertLengthOrAuto(state, value); |
742 // This is only for margins which use __qem | 742 // This is only for margins which use __qem |
743 length.setQuirk(toCSSPrimitiveValue(value)->isQuirkValue()); | 743 length.setQuirk(toCSSPrimitiveValue(value).isQuirkValue()); |
744 return length; | 744 return length; |
745 } | 745 } |
746 | 746 |
747 PassRefPtr<QuotesData> StyleBuilderConverter::convertQuotes(StyleResolverState&,
CSSValue* value) | 747 PassRefPtr<QuotesData> StyleBuilderConverter::convertQuotes(StyleResolverState&,
CSSValue value) |
748 { | 748 { |
749 if (value->isValueList()) { | 749 if (value.isValueList()) { |
750 CSSValueList* list = toCSSValueList(value); | 750 CSSValueList& list = toCSSValueList(value); |
751 RefPtr<QuotesData> quotes = QuotesData::create(); | 751 RefPtr<QuotesData> quotes = QuotesData::create(); |
752 for (size_t i = 0; i < list->length(); i += 2) { | 752 for (size_t i = 0; i < list.length(); i += 2) { |
753 CSSValue* first = list->item(i); | 753 CSSValue first = list.item(i); |
754 CSSValue* second = list->item(i + 1); | 754 CSSValue second = list.item(i + 1); |
755 String startQuote = toCSSPrimitiveValue(first)->getStringValue(); | 755 String startQuote = toCSSPrimitiveValue(first).getStringValue(); |
756 String endQuote = toCSSPrimitiveValue(second)->getStringValue(); | 756 String endQuote = toCSSPrimitiveValue(second).getStringValue(); |
757 quotes->addPair(std::make_pair(startQuote, endQuote)); | 757 quotes->addPair(std::make_pair(startQuote, endQuote)); |
758 } | 758 } |
759 return quotes.release(); | 759 return quotes.release(); |
760 } | 760 } |
761 // FIXME: We should assert we're a primitive value with valueID = CSSValueNo
ne | 761 // FIXME: We should assert we're a primitive value with valueID = CSSValueNo
ne |
762 return QuotesData::create(); | 762 return QuotesData::create(); |
763 } | 763 } |
764 | 764 |
765 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, CSSVa
lue* value) | 765 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, CSSVa
lue value) |
766 { | 766 { |
767 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 767 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
768 Pair* pair = primitiveValue->getPairValue(); | 768 Pair* pair = primitiveValue.getPairValue(); |
769 Length radiusWidth = pair->first()->convertToLength(state.cssToLengthConvers
ionData()); | 769 Length radiusWidth = pair->first()->convertToLength(state.cssToLengthConvers
ionData()); |
770 Length radiusHeight = pair->second()->convertToLength(state.cssToLengthConve
rsionData()); | 770 Length radiusHeight = pair->second()->convertToLength(state.cssToLengthConve
rsionData()); |
771 float width = radiusWidth.value(); | 771 float width = radiusWidth.value(); |
772 float height = radiusHeight.value(); | 772 float height = radiusHeight.value(); |
773 ASSERT(width >= 0 && height >= 0); | 773 ASSERT(width >= 0 && height >= 0); |
774 if (width <= 0 || height <= 0) | 774 if (width <= 0 || height <= 0) |
775 return LengthSize(Length(0, Fixed), Length(0, Fixed)); | 775 return LengthSize(Length(0, Fixed), Length(0, Fixed)); |
776 return LengthSize(radiusWidth, radiusHeight); | 776 return LengthSize(radiusWidth, radiusHeight); |
777 } | 777 } |
778 | 778 |
779 PassRefPtr<ShadowList> StyleBuilderConverter::convertShadow(StyleResolverState&
state, CSSValue* value) | 779 PassRefPtr<ShadowList> StyleBuilderConverter::convertShadow(StyleResolverState&
state, CSSValue value) |
780 { | 780 { |
781 if (value->isPrimitiveValue()) { | 781 if (value.isPrimitiveValue()) { |
782 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); | 782 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); |
783 return PassRefPtr<ShadowList>(); | 783 return PassRefPtr<ShadowList>(); |
784 } | 784 } |
785 | 785 |
786 const CSSValueList* valueList = toCSSValueList(value); | 786 const CSSValueList& valueList = toCSSValueList(value); |
787 size_t shadowCount = valueList->length(); | 787 size_t shadowCount = valueList.length(); |
788 ShadowDataVector shadows; | 788 ShadowDataVector shadows; |
789 for (size_t i = 0; i < shadowCount; ++i) { | 789 for (size_t i = 0; i < shadowCount; ++i) { |
790 const CSSShadowValue* item = toCSSShadowValue(valueList->item(i)); | 790 const CSSShadowValue& item = toCSSShadowValue(valueList.item(i)); |
791 float x = item->x->computeLength<float>(state.cssToLengthConversionData(
)); | 791 float x = item.x->computeLength<float>(state.cssToLengthConversionData()
); |
792 float y = item->y->computeLength<float>(state.cssToLengthConversionData(
)); | 792 float y = item.y->computeLength<float>(state.cssToLengthConversionData()
); |
793 float blur = item->blur ? item->blur->computeLength<float>(state.cssToLe
ngthConversionData()) : 0; | 793 float blur = item.blur ? item.blur->computeLength<float>(state.cssToLeng
thConversionData()) : 0; |
794 float spread = item->spread ? item->spread->computeLength<float>(state.c
ssToLengthConversionData()) : 0; | 794 float spread = item.spread ? item.spread->computeLength<float>(state.css
ToLengthConversionData()) : 0; |
795 ShadowStyle shadowStyle = item->style && item->style->getValueID() == CS
SValueInset ? Inset : Normal; | 795 ShadowStyle shadowStyle = item.style && item.style->getValueID() == CSSV
alueInset ? Inset : Normal; |
796 StyleColor color = StyleColor::currentColor(); | 796 StyleColor color = StyleColor::currentColor(); |
797 if (item->color) | 797 if (item.color) |
798 color = convertStyleColor(state, item->color.get()); | 798 color = convertStyleColor(state, CSSValue(*item.color)); |
799 shadows.append(ShadowData(FloatPoint(x, y), blur, spread, shadowStyle, c
olor)); | 799 shadows.append(ShadowData(FloatPoint(x, y), blur, spread, shadowStyle, c
olor)); |
800 } | 800 } |
801 return ShadowList::adopt(shadows); | 801 return ShadowList::adopt(shadows); |
802 } | 802 } |
803 | 803 |
804 PassRefPtr<ShapeValue> StyleBuilderConverter::convertShapeValue(StyleResolverSta
te& state, CSSValue* value) | 804 PassRefPtr<ShapeValue> StyleBuilderConverter::convertShapeValue(StyleResolverSta
te& state, CSSValue value) |
805 { | 805 { |
806 if (value->isPrimitiveValue()) { | 806 if (value.isPrimitiveValue()) { |
807 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); | 807 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); |
808 return nullptr; | 808 return nullptr; |
809 } | 809 } |
810 | 810 |
811 if (value->isImageValue() || value->isImageGeneratorValue() || value->isImag
eSetValue()) | 811 if (value.isImageValue() || value.isImageGeneratorValue() || value.isImageSe
tValue()) |
812 return ShapeValue::createImageValue(state.styleImage(CSSPropertyShapeOut
side, value)); | 812 return ShapeValue::createImageValue(state.styleImage(CSSPropertyShapeOut
side, value)); |
813 | 813 |
814 RefPtr<BasicShape> shape; | 814 RefPtr<BasicShape> shape; |
815 CSSBoxType cssBox = BoxMissing; | 815 CSSBoxType cssBox = BoxMissing; |
816 CSSValueList* valueList = toCSSValueList(value); | 816 CSSValueList& valueList = toCSSValueList(value); |
817 for (unsigned i = 0; i < valueList->length(); ++i) { | 817 for (unsigned i = 0; i < valueList.length(); ++i) { |
818 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(valueList->item(
i)); | 818 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(valueList.item(i
)); |
819 if (primitiveValue->isShape()) | 819 if (primitiveValue.isShape()) |
820 shape = basicShapeForValue(state, primitiveValue->getShapeValue()); | 820 shape = basicShapeForValue(state, primitiveValue.getShapeValue()); |
821 else | 821 else |
822 cssBox = CSSBoxType(*primitiveValue); | 822 cssBox = CSSBoxType(primitiveValue); |
823 } | 823 } |
824 | 824 |
825 if (shape) | 825 if (shape) |
826 return ShapeValue::createShapeValue(shape.release(), cssBox); | 826 return ShapeValue::createShapeValue(shape.release(), cssBox); |
827 | 827 |
828 ASSERT(cssBox != BoxMissing); | 828 ASSERT(cssBox != BoxMissing); |
829 return ShapeValue::createBoxShapeValue(cssBox); | 829 return ShapeValue::createBoxShapeValue(cssBox); |
830 } | 830 } |
831 | 831 |
832 float StyleBuilderConverter::convertSpacing(StyleResolverState& state, CSSValue*
value) | 832 float StyleBuilderConverter::convertSpacing(StyleResolverState& state, CSSValue
value) |
833 { | 833 { |
834 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 834 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
835 if (primitiveValue->getValueID() == CSSValueNormal) | 835 if (primitiveValue.getValueID() == CSSValueNormal) |
836 return 0; | 836 return 0; |
837 return primitiveValue->computeLength<float>(state.cssToLengthConversionData(
)); | 837 return primitiveValue.computeLength<float>(state.cssToLengthConversionData()
); |
838 } | 838 } |
839 | 839 |
840 PassRefPtr<SVGDashArray> StyleBuilderConverter::convertStrokeDasharray(StyleReso
lverState& state, CSSValue* value) | 840 PassRefPtr<SVGDashArray> StyleBuilderConverter::convertStrokeDasharray(StyleReso
lverState& state, CSSValue value) |
841 { | 841 { |
842 if (!value->isValueList()) | 842 if (!value.isValueList()) |
843 return SVGComputedStyle::initialStrokeDashArray(); | 843 return SVGComputedStyle::initialStrokeDashArray(); |
844 | 844 |
845 CSSValueList* dashes = toCSSValueList(value); | 845 CSSValueList& dashes = toCSSValueList(value); |
846 | 846 |
847 RefPtr<SVGDashArray> array = SVGDashArray::create(); | 847 RefPtr<SVGDashArray> array = SVGDashArray::create(); |
848 size_t length = dashes->length(); | 848 size_t length = dashes.length(); |
849 for (size_t i = 0; i < length; ++i) { | 849 for (size_t i = 0; i < length; ++i) { |
850 CSSValue* currValue = dashes->item(i); | 850 CSSValue currValue = dashes.item(i); |
851 if (!currValue->isPrimitiveValue()) | 851 if (!currValue.isPrimitiveValue()) |
852 continue; | 852 continue; |
853 | 853 |
854 CSSPrimitiveValue* dash = toCSSPrimitiveValue(dashes->item(i)); | 854 array->append(convertLength(state, currValue)); |
855 array->append(convertLength(state, dash)); | |
856 } | 855 } |
857 | 856 |
858 return array.release(); | 857 return array.release(); |
859 } | 858 } |
860 | 859 |
861 StyleColor StyleBuilderConverter::convertStyleColor(StyleResolverState& state, C
SSValue* value, bool forVisitedLink) | 860 StyleColor StyleBuilderConverter::convertStyleColor(StyleResolverState& state, C
SSValue value, bool forVisitedLink) |
862 { | 861 { |
863 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 862 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
864 if (primitiveValue->getValueID() == CSSValueCurrentcolor) | 863 if (primitiveValue.getValueID() == CSSValueCurrentcolor) |
865 return StyleColor::currentColor(); | 864 return StyleColor::currentColor(); |
866 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa
lue, Color(), forVisitedLink); | 865 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa
lue, Color(), forVisitedLink); |
867 } | 866 } |
868 | 867 |
869 Color StyleBuilderConverter::convertSVGColor(StyleResolverState& state, CSSValue
* value) | 868 Color StyleBuilderConverter::convertSVGColor(StyleResolverState& state, CSSValue
value) |
870 { | 869 { |
871 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 870 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
872 if (primitiveValue->isRGBColor()) | 871 if (primitiveValue.isRGBColor()) |
873 return primitiveValue->getRGBA32Value(); | 872 return primitiveValue.getRGBA32Value(); |
874 ASSERT(primitiveValue->getValueID() == CSSValueCurrentcolor); | 873 ASSERT(primitiveValue.getValueID() == CSSValueCurrentcolor); |
875 return state.style()->color(); | 874 return state.style()->color(); |
876 } | 875 } |
877 | 876 |
878 float StyleBuilderConverter::convertTextStrokeWidth(StyleResolverState& state, C
SSValue* value) | 877 float StyleBuilderConverter::convertTextStrokeWidth(StyleResolverState& state, C
SSValue value) |
879 { | 878 { |
880 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 879 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
881 if (primitiveValue->getValueID()) { | 880 if (primitiveValue.getValueID()) { |
882 float multiplier = convertLineWidth<float>(state, value); | 881 float multiplier = convertLineWidth<float>(state, value); |
883 return CSSPrimitiveValue::create(multiplier / 48, CSSPrimitiveValue::CSS
_EMS)->computeLength<float>(state.cssToLengthConversionData()); | 882 return CSSPrimitiveValue::create(multiplier / 48, CSSPrimitiveValue::CSS
_EMS)->computeLength<float>(state.cssToLengthConversionData()); |
884 } | 883 } |
885 return primitiveValue->computeLength<float>(state.cssToLengthConversionData(
)); | 884 return primitiveValue.computeLength<float>(state.cssToLengthConversionData()
); |
886 } | 885 } |
887 | 886 |
888 TransformOrigin StyleBuilderConverter::convertTransformOrigin(StyleResolverState
& state, CSSValue* value) | 887 TransformOrigin StyleBuilderConverter::convertTransformOrigin(StyleResolverState
& state, CSSValue value) |
889 { | 888 { |
890 CSSValueList* list = toCSSValueList(value); | 889 CSSValueList& list = toCSSValueList(value); |
891 ASSERT(list->length() == 3); | 890 ASSERT(list.length() == 3); |
892 | 891 |
893 CSSPrimitiveValue* primitiveValueX = toCSSPrimitiveValue(list->item(0)); | 892 CSSPrimitiveValue& primitiveValueX = toCSSPrimitiveValue(list.item(0)); |
894 CSSPrimitiveValue* primitiveValueY = toCSSPrimitiveValue(list->item(1)); | 893 CSSPrimitiveValue& primitiveValueY = toCSSPrimitiveValue(list.item(1)); |
895 CSSPrimitiveValue* primitiveValueZ = toCSSPrimitiveValue(list->item(2)); | |
896 | 894 |
897 return TransformOrigin( | 895 return TransformOrigin( |
898 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX)
, | 896 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX)
, |
899 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY)
, | 897 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY)
, |
900 StyleBuilderConverter::convertComputedLength<float>(state, primitiveValu
eZ) | 898 StyleBuilderConverter::convertComputedLength<float>(state, list.item(2)) |
901 ); | 899 ); |
902 } | 900 } |
903 | 901 |
904 ScrollSnapPoints StyleBuilderConverter::convertSnapPoints(StyleResolverState& st
ate, CSSValue* value) | 902 ScrollSnapPoints StyleBuilderConverter::convertSnapPoints(StyleResolverState& st
ate, CSSValue value) |
905 { | 903 { |
906 // Handles: none | repeat(<length>) | 904 // Handles: none | repeat(<length>) |
907 ScrollSnapPoints points; | 905 ScrollSnapPoints points; |
908 points.hasRepeat = false; | 906 points.hasRepeat = false; |
909 | 907 |
910 if (!value->isFunctionValue()) | 908 if (!value.isFunctionValue()) |
911 return points; | 909 return points; |
912 | 910 |
913 CSSFunctionValue* repeatFunction = toCSSFunctionValue(value); | 911 CSSFunctionValue& repeatFunction = toCSSFunctionValue(value); |
914 ASSERT_WITH_SECURITY_IMPLICATION(repeatFunction->length() == 1); | 912 ASSERT_WITH_SECURITY_IMPLICATION(repeatFunction.length() == 1); |
915 points.repeatOffset = convertLength(state, toCSSPrimitiveValue(repeatFunctio
n->item(0))); | 913 points.repeatOffset = convertLength(state, repeatFunction.item(0)); |
916 points.hasRepeat = true; | 914 points.hasRepeat = true; |
917 | 915 |
918 return points; | 916 return points; |
919 } | 917 } |
920 | 918 |
921 Vector<LengthPoint> StyleBuilderConverter::convertSnapCoordinates(StyleResolverS
tate& state, CSSValue* value) | 919 Vector<LengthPoint> StyleBuilderConverter::convertSnapCoordinates(StyleResolverS
tate& state, CSSValue value) |
922 { | 920 { |
923 // Handles: none | <position># | 921 // Handles: none | <position># |
924 Vector<LengthPoint> coordinates; | 922 Vector<LengthPoint> coordinates; |
925 | 923 |
926 if (!value->isValueList()) | 924 if (!value.isValueList()) |
927 return coordinates; | 925 return coordinates; |
928 | 926 |
929 CSSValueList* valueList = toCSSValueList(value); | 927 CSSValueList& valueList = toCSSValueList(value); |
930 coordinates.reserveInitialCapacity(valueList->length()); | 928 coordinates.reserveInitialCapacity(valueList.length()); |
931 for (auto& snapCoordinate : *valueList) { | 929 for (auto& snapCoordinate : valueList) { |
932 coordinates.uncheckedAppend(convertPosition(state, snapCoordinate.get())
); | 930 coordinates.uncheckedAppend(convertPosition(state, snapCoordinate)); |
933 } | 931 } |
934 | 932 |
935 return coordinates; | 933 return coordinates; |
936 } | 934 } |
937 | 935 |
938 } // namespace blink | 936 } // namespace blink |
OLD | NEW |