| 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->isCustomIdent()) { | 133 if (primitiveValue.isCustomIdent()) { |
| 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->isCustomIdent()) { | 404 if (primitiveValue.isCustomIdent()) { |
| 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->isCustomIdent()) { | 435 if (currentValue && currentValue->isCustomIdent()) { |
| 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 CSSValueMinContent: | 560 case CSSValueMinContent: |
| 561 case CSSValueWebkitMinContent: | 561 case CSSValueWebkitMinContent: |
| 562 return Length(MinContent); | 562 return Length(MinContent); |
| 563 case CSSValueMaxContent: | 563 case CSSValueMaxContent: |
| 564 case CSSValueWebkitMaxContent: | 564 case CSSValueWebkitMaxContent: |
| 565 return Length(MaxContent); | 565 return Length(MaxContent); |
| 566 case CSSValueWebkitFillAvailable: | 566 case CSSValueWebkitFillAvailable: |
| 567 return Length(FillAvailable); | 567 return Length(FillAvailable); |
| 568 case CSSValueWebkitFitContent: | 568 case CSSValueWebkitFitContent: |
| 569 return Length(FitContent); | 569 return Length(FitContent); |
| 570 case CSSValueAuto: | 570 case CSSValueAuto: |
| 571 return Length(Auto); | 571 return Length(Auto); |
| 572 default: | 572 default: |
| 573 ASSERT_NOT_REACHED(); | 573 ASSERT_NOT_REACHED(); |
| 574 return Length(); | 574 return Length(); |
| 575 } | 575 } |
| 576 } | 576 } |
| 577 | 577 |
| 578 Length StyleBuilderConverter::convertLengthMaxSizing(StyleResolverState& state,
CSSValue* value) | 578 Length StyleBuilderConverter::convertLengthMaxSizing(StyleResolverState& state,
CSSValue value) |
| 579 { | 579 { |
| 580 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 580 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 581 if (primitiveValue->getValueID() == CSSValueNone) | 581 if (primitiveValue.getValueID() == CSSValueNone) |
| 582 return Length(MaxSizeNone); | 582 return Length(MaxSizeNone); |
| 583 return convertLengthSizing(state, value); | 583 return convertLengthSizing(state, value); |
| 584 } | 584 } |
| 585 | 585 |
| 586 TabSize StyleBuilderConverter::convertLengthOrTabSpaces(StyleResolverState& stat
e, CSSValue* value) | 586 TabSize StyleBuilderConverter::convertLengthOrTabSpaces(StyleResolverState& stat
e, CSSValue value) |
| 587 { | 587 { |
| 588 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 588 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 589 if (primitiveValue->isNumber()) | 589 if (primitiveValue.isNumber()) |
| 590 return TabSize(primitiveValue->getIntValue()); | 590 return TabSize(primitiveValue.getIntValue()); |
| 591 return TabSize(primitiveValue->computeLength<float>(state.cssToLengthConvers
ionData())); | 591 return TabSize(primitiveValue.computeLength<float>(state.cssToLengthConversi
onData())); |
| 592 } | 592 } |
| 593 | 593 |
| 594 LineBoxContain StyleBuilderConverter::convertLineBoxContain(StyleResolverState&,
CSSValue* value) | 594 LineBoxContain StyleBuilderConverter::convertLineBoxContain(StyleResolverState&,
CSSValue value) |
| 595 { | 595 { |
| 596 if (value->isPrimitiveValue()) { | 596 if (value.isPrimitiveValue()) { |
| 597 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); | 597 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); |
| 598 return LineBoxContainNone; | 598 return LineBoxContainNone; |
| 599 } | 599 } |
| 600 | 600 |
| 601 return toCSSLineBoxContainValue(value)->value(); | 601 return toCSSLineBoxContainValue(value).value(); |
| 602 } | 602 } |
| 603 | 603 |
| 604 static CSSToLengthConversionData lineHeightToLengthConversionData(StyleResolverS
tate& state) | 604 static CSSToLengthConversionData lineHeightToLengthConversionData(StyleResolverS
tate& state) |
| 605 { | 605 { |
| 606 float multiplier = state.style()->effectiveZoom(); | 606 float multiplier = state.style()->effectiveZoom(); |
| 607 if (LocalFrame* frame = state.document().frame()) | 607 if (LocalFrame* frame = state.document().frame()) |
| 608 multiplier *= frame->textZoomFactor(); | 608 multiplier *= frame->textZoomFactor(); |
| 609 return state.cssToLengthConversionData().copyWithAdjustedZoom(multiplier); | 609 return state.cssToLengthConversionData().copyWithAdjustedZoom(multiplier); |
| 610 } | 610 } |
| 611 | 611 |
| 612 Length StyleBuilderConverter::convertLineHeight(StyleResolverState& state, CSSVa
lue* value) | 612 Length StyleBuilderConverter::convertLineHeight(StyleResolverState& state, CSSVa
lue value) |
| 613 { | 613 { |
| 614 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 614 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 615 | 615 |
| 616 if (primitiveValue->isLength()) | 616 if (primitiveValue.isLength()) |
| 617 return primitiveValue->computeLength<Length>(lineHeightToLengthConversio
nData(state)); | 617 return primitiveValue.computeLength<Length>(lineHeightToLengthConversion
Data(state)); |
| 618 if (primitiveValue->isPercentage()) | 618 if (primitiveValue.isPercentage()) |
| 619 return Length((state.style()->computedFontSize() * primitiveValue->getIn
tValue()) / 100.0, Fixed); | 619 return Length((state.style()->computedFontSize() * primitiveValue.getInt
Value()) / 100.0, Fixed); |
| 620 if (primitiveValue->isNumber()) | 620 if (primitiveValue.isNumber()) |
| 621 return Length(primitiveValue->getDoubleValue() * 100.0, Percent); | 621 return Length(primitiveValue.getDoubleValue() * 100.0, Percent); |
| 622 if (primitiveValue->isCalculated()) { | 622 if (primitiveValue.isCalculated()) { |
| 623 Length zoomedLength = Length(primitiveValue->cssCalcValue()->toCalcValue
(lineHeightToLengthConversionData(state))); | 623 Length zoomedLength = Length(primitiveValue.cssCalcValue()->toCalcValue(
lineHeightToLengthConversionData(state))); |
| 624 return Length(valueForLength(zoomedLength, state.style()->fontSize()), F
ixed); | 624 return Length(valueForLength(zoomedLength, state.style()->fontSize()), F
ixed); |
| 625 } | 625 } |
| 626 | 626 |
| 627 ASSERT(primitiveValue->getValueID() == CSSValueNormal); | 627 ASSERT(primitiveValue.getValueID() == CSSValueNormal); |
| 628 return ComputedStyle::initialLineHeight(); | 628 return ComputedStyle::initialLineHeight(); |
| 629 } | 629 } |
| 630 | 630 |
| 631 float StyleBuilderConverter::convertNumberOrPercentage(StyleResolverState& state
, CSSValue* value) | 631 float StyleBuilderConverter::convertNumberOrPercentage(StyleResolverState& state
, CSSValue value) |
| 632 { | 632 { |
| 633 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 633 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 634 ASSERT(primitiveValue->isNumber() || primitiveValue->isPercentage()); | 634 ASSERT(primitiveValue.isNumber() || primitiveValue.isPercentage()); |
| 635 if (primitiveValue->isNumber()) | 635 if (primitiveValue.isNumber()) |
| 636 return primitiveValue->getFloatValue(); | 636 return primitiveValue.getFloatValue(); |
| 637 return primitiveValue->getFloatValue() / 100.0f; | 637 return primitiveValue.getFloatValue() / 100.0f; |
| 638 } | 638 } |
| 639 | 639 |
| 640 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> | 640 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> |
| 641 static Length convertPositionLength(StyleResolverState& state, CSSPrimitiveValue
* primitiveValue) | 641 static Length convertPositionLength(StyleResolverState& state, CSSPrimitiveValue
* primitiveValue) |
| 642 { | 642 { |
| 643 if (Pair* pair = primitiveValue->getPairValue()) { | 643 if (Pair* pair = primitiveValue->getPairValue()) { |
| 644 Length length = StyleBuilderConverter::convertLength(state, pair->second
()); | 644 Length length = StyleBuilderConverter::convertLength(state, CSSValue(*pa
ir->second())); |
| 645 if (pair->first()->getValueID() == cssValueFor0) | 645 if (pair->first()->getValueID() == cssValueFor0) |
| 646 return length; | 646 return length; |
| 647 ASSERT(pair->first()->getValueID() == cssValueFor100); | 647 ASSERT(pair->first()->getValueID() == cssValueFor100); |
| 648 return length.subtractFromOneHundredPercent(); | 648 return length.subtractFromOneHundredPercent(); |
| 649 } | 649 } |
| 650 | 650 |
| 651 return StyleBuilderConverter::convertLength(state, primitiveValue); | 651 return StyleBuilderConverter::convertLength(state, CSSValue(*primitiveValue)
); |
| 652 } | 652 } |
| 653 | 653 |
| 654 LengthPoint StyleBuilderConverter::convertPosition(StyleResolverState& state, CS
SValue* value) | 654 LengthPoint StyleBuilderConverter::convertPosition(StyleResolverState& state, CS
SValue value) |
| 655 { | 655 { |
| 656 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 656 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 657 Pair* pair = primitiveValue->getPairValue(); | 657 Pair* pair = primitiveValue.getPairValue(); |
| 658 return LengthPoint( | 658 return LengthPoint( |
| 659 convertPositionLength<CSSValueLeft, CSSValueRight>(state, pair->first())
, | 659 convertPositionLength<CSSValueLeft, CSSValueRight>(state, pair->first())
, |
| 660 convertPositionLength<CSSValueTop, CSSValueBottom>(state, pair->second()
) | 660 convertPositionLength<CSSValueTop, CSSValueBottom>(state, pair->second()
) |
| 661 ); | 661 ); |
| 662 } | 662 } |
| 663 | 663 |
| 664 static float convertPerspectiveLength(StyleResolverState& state, CSSPrimitiveVal
ue* primitiveValue) | 664 static float convertPerspectiveLength(StyleResolverState& state, CSSPrimitiveVal
ue& primitiveValue) |
| 665 { | 665 { |
| 666 return std::max(primitiveValue->computeLength<float>(state.cssToLengthConver
sionData()), 0.0f); | 666 return std::max(primitiveValue.computeLength<float>(state.cssToLengthConvers
ionData()), 0.0f); |
| 667 } | 667 } |
| 668 | 668 |
| 669 float StyleBuilderConverter::convertPerspective(StyleResolverState& state, CSSVa
lue* value) | 669 float StyleBuilderConverter::convertPerspective(StyleResolverState& state, CSSVa
lue value) |
| 670 { | 670 { |
| 671 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 671 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 672 | 672 |
| 673 if (primitiveValue->getValueID() == CSSValueNone) | 673 if (primitiveValue.getValueID() == CSSValueNone) |
| 674 return ComputedStyle::initialPerspective(); | 674 return ComputedStyle::initialPerspective(); |
| 675 return convertPerspectiveLength(state, primitiveValue); | 675 return convertPerspectiveLength(state, primitiveValue); |
| 676 } | 676 } |
| 677 | 677 |
| 678 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> | 678 template <CSSValueID cssValueFor0, CSSValueID cssValueFor100> |
| 679 static Length convertOriginLength(StyleResolverState& state, CSSPrimitiveValue*
primitiveValue) | 679 static Length convertOriginLength(StyleResolverState& state, CSSPrimitiveValue&
primitiveValue) |
| 680 { | 680 { |
| 681 if (primitiveValue->isValueID()) { | 681 if (primitiveValue.isValueID()) { |
| 682 switch (primitiveValue->getValueID()) { | 682 switch (primitiveValue.getValueID()) { |
| 683 case cssValueFor0: | 683 case cssValueFor0: |
| 684 return Length(0, Percent); | 684 return Length(0, Percent); |
| 685 case cssValueFor100: | 685 case cssValueFor100: |
| 686 return Length(100, Percent); | 686 return Length(100, Percent); |
| 687 case CSSValueCenter: | 687 case CSSValueCenter: |
| 688 return Length(50, Percent); | 688 return Length(50, Percent); |
| 689 default: | 689 default: |
| 690 ASSERT_NOT_REACHED(); | 690 ASSERT_NOT_REACHED(); |
| 691 } | 691 } |
| 692 } | 692 } |
| 693 | 693 |
| 694 return StyleBuilderConverter::convertLength(state, primitiveValue); | 694 return StyleBuilderConverter::convertLength(state, CSSValue(primitiveValue))
; |
| 695 } | 695 } |
| 696 | 696 |
| 697 LengthPoint StyleBuilderConverter::convertPerspectiveOrigin(StyleResolverState&
state, CSSValue* value) | 697 LengthPoint StyleBuilderConverter::convertPerspectiveOrigin(StyleResolverState&
state, CSSValue value) |
| 698 { | 698 { |
| 699 CSSValueList* list = toCSSValueList(value); | 699 CSSValueList& list = toCSSValueList(value); |
| 700 ASSERT(list->length() == 2); | 700 ASSERT(list.length() == 2); |
| 701 | 701 |
| 702 CSSPrimitiveValue* primitiveValueX = toCSSPrimitiveValue(list->item(0)); | 702 CSSPrimitiveValue& primitiveValueX = toCSSPrimitiveValue(list.item(0)); |
| 703 CSSPrimitiveValue* primitiveValueY = toCSSPrimitiveValue(list->item(1)); | 703 CSSPrimitiveValue& primitiveValueY = toCSSPrimitiveValue(list.item(1)); |
| 704 | 704 |
| 705 return LengthPoint( | 705 return LengthPoint( |
| 706 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX)
, | 706 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX)
, |
| 707 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) | 707 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY) |
| 708 ); | 708 ); |
| 709 } | 709 } |
| 710 | 710 |
| 711 EPaintOrder StyleBuilderConverter::convertPaintOrder(StyleResolverState&, CSSVal
ue* cssPaintOrder) | 711 EPaintOrder StyleBuilderConverter::convertPaintOrder(StyleResolverState&, CSSVal
ue cssPaintOrder) |
| 712 { | 712 { |
| 713 if (cssPaintOrder->isValueList()) { | 713 if (cssPaintOrder.isValueList()) { |
| 714 int paintOrder = 0; | 714 int paintOrder = 0; |
| 715 const CSSValueList& list = *toCSSValueList(cssPaintOrder); | 715 const CSSValueList& list = toCSSValueList(cssPaintOrder); |
| 716 for (size_t i = 0; i < list.length(); ++i) { | 716 for (size_t i = 0; i < list.length(); ++i) { |
| 717 EPaintOrderType paintOrderType = PT_NONE; | 717 EPaintOrderType paintOrderType = PT_NONE; |
| 718 switch (toCSSPrimitiveValue(list.item(i))->getValueID()) { | 718 switch (toCSSPrimitiveValue(list.item(i)).getValueID()) { |
| 719 case CSSValueFill: | 719 case CSSValueFill: |
| 720 paintOrderType = PT_FILL; | 720 paintOrderType = PT_FILL; |
| 721 break; | 721 break; |
| 722 case CSSValueStroke: | 722 case CSSValueStroke: |
| 723 paintOrderType = PT_STROKE; | 723 paintOrderType = PT_STROKE; |
| 724 break; | 724 break; |
| 725 case CSSValueMarkers: | 725 case CSSValueMarkers: |
| 726 paintOrderType = PT_MARKERS; | 726 paintOrderType = PT_MARKERS; |
| 727 break; | 727 break; |
| 728 default: | 728 default: |
| 729 ASSERT_NOT_REACHED(); | 729 ASSERT_NOT_REACHED(); |
| 730 break; | 730 break; |
| 731 } | 731 } |
| 732 | 732 |
| 733 paintOrder |= (paintOrderType << kPaintOrderBitwidth*i); | 733 paintOrder |= (paintOrderType << kPaintOrderBitwidth*i); |
| 734 } | 734 } |
| 735 return (EPaintOrder)paintOrder; | 735 return (EPaintOrder)paintOrder; |
| 736 } | 736 } |
| 737 | 737 |
| 738 return PO_NORMAL; | 738 return PO_NORMAL; |
| 739 } | 739 } |
| 740 | 740 |
| 741 Length StyleBuilderConverter::convertQuirkyLength(StyleResolverState& state, CSS
Value* value) | 741 Length StyleBuilderConverter::convertQuirkyLength(StyleResolverState& state, CSS
Value value) |
| 742 { | 742 { |
| 743 Length length = convertLengthOrAuto(state, value); | 743 Length length = convertLengthOrAuto(state, value); |
| 744 // This is only for margins which use __qem | 744 // This is only for margins which use __qem |
| 745 length.setQuirk(toCSSPrimitiveValue(value)->isQuirkValue()); | 745 length.setQuirk(toCSSPrimitiveValue(value).isQuirkValue()); |
| 746 return length; | 746 return length; |
| 747 } | 747 } |
| 748 | 748 |
| 749 PassRefPtr<QuotesData> StyleBuilderConverter::convertQuotes(StyleResolverState&,
CSSValue* value) | 749 PassRefPtr<QuotesData> StyleBuilderConverter::convertQuotes(StyleResolverState&,
CSSValue value) |
| 750 { | 750 { |
| 751 if (value->isValueList()) { | 751 if (value.isValueList()) { |
| 752 CSSValueList* list = toCSSValueList(value); | 752 CSSValueList& list = toCSSValueList(value); |
| 753 RefPtr<QuotesData> quotes = QuotesData::create(); | 753 RefPtr<QuotesData> quotes = QuotesData::create(); |
| 754 for (size_t i = 0; i < list->length(); i += 2) { | 754 for (size_t i = 0; i < list.length(); i += 2) { |
| 755 CSSValue* first = list->item(i); | 755 CSSValue first = list.item(i); |
| 756 CSSValue* second = list->item(i + 1); | 756 CSSValue second = list.item(i + 1); |
| 757 String startQuote = toCSSPrimitiveValue(first)->getStringValue(); | 757 String startQuote = toCSSPrimitiveValue(first).getStringValue(); |
| 758 String endQuote = toCSSPrimitiveValue(second)->getStringValue(); | 758 String endQuote = toCSSPrimitiveValue(second).getStringValue(); |
| 759 quotes->addPair(std::make_pair(startQuote, endQuote)); | 759 quotes->addPair(std::make_pair(startQuote, endQuote)); |
| 760 } | 760 } |
| 761 return quotes.release(); | 761 return quotes.release(); |
| 762 } | 762 } |
| 763 // FIXME: We should assert we're a primitive value with valueID = CSSValueNo
ne | 763 // FIXME: We should assert we're a primitive value with valueID = CSSValueNo
ne |
| 764 return QuotesData::create(); | 764 return QuotesData::create(); |
| 765 } | 765 } |
| 766 | 766 |
| 767 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, CSSVa
lue* value) | 767 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, CSSVa
lue value) |
| 768 { | 768 { |
| 769 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 769 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 770 Pair* pair = primitiveValue->getPairValue(); | 770 Pair* pair = primitiveValue.getPairValue(); |
| 771 Length radiusWidth = pair->first()->convertToLength(state.cssToLengthConvers
ionData()); | 771 Length radiusWidth = pair->first()->convertToLength(state.cssToLengthConvers
ionData()); |
| 772 Length radiusHeight = pair->second()->convertToLength(state.cssToLengthConve
rsionData()); | 772 Length radiusHeight = pair->second()->convertToLength(state.cssToLengthConve
rsionData()); |
| 773 float width = radiusWidth.value(); | 773 float width = radiusWidth.value(); |
| 774 float height = radiusHeight.value(); | 774 float height = radiusHeight.value(); |
| 775 ASSERT(width >= 0 && height >= 0); | 775 ASSERT(width >= 0 && height >= 0); |
| 776 if (width <= 0 || height <= 0) | 776 if (width <= 0 || height <= 0) |
| 777 return LengthSize(Length(0, Fixed), Length(0, Fixed)); | 777 return LengthSize(Length(0, Fixed), Length(0, Fixed)); |
| 778 return LengthSize(radiusWidth, radiusHeight); | 778 return LengthSize(radiusWidth, radiusHeight); |
| 779 } | 779 } |
| 780 | 780 |
| 781 PassRefPtr<ShadowList> StyleBuilderConverter::convertShadow(StyleResolverState&
state, CSSValue* value) | 781 PassRefPtr<ShadowList> StyleBuilderConverter::convertShadow(StyleResolverState&
state, CSSValue value) |
| 782 { | 782 { |
| 783 if (value->isPrimitiveValue()) { | 783 if (value.isPrimitiveValue()) { |
| 784 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); | 784 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); |
| 785 return PassRefPtr<ShadowList>(); | 785 return PassRefPtr<ShadowList>(); |
| 786 } | 786 } |
| 787 | 787 |
| 788 const CSSValueList* valueList = toCSSValueList(value); | 788 const CSSValueList& valueList = toCSSValueList(value); |
| 789 size_t shadowCount = valueList->length(); | 789 size_t shadowCount = valueList.length(); |
| 790 ShadowDataVector shadows; | 790 ShadowDataVector shadows; |
| 791 for (size_t i = 0; i < shadowCount; ++i) { | 791 for (size_t i = 0; i < shadowCount; ++i) { |
| 792 const CSSShadowValue* item = toCSSShadowValue(valueList->item(i)); | 792 const CSSShadowValue& item = toCSSShadowValue(valueList.item(i)); |
| 793 float x = item->x->computeLength<float>(state.cssToLengthConversionData(
)); | 793 float x = item.x->computeLength<float>(state.cssToLengthConversionData()
); |
| 794 float y = item->y->computeLength<float>(state.cssToLengthConversionData(
)); | 794 float y = item.y->computeLength<float>(state.cssToLengthConversionData()
); |
| 795 float blur = item->blur ? item->blur->computeLength<float>(state.cssToLe
ngthConversionData()) : 0; | 795 float blur = item.blur ? item.blur->computeLength<float>(state.cssToLeng
thConversionData()) : 0; |
| 796 float spread = item->spread ? item->spread->computeLength<float>(state.c
ssToLengthConversionData()) : 0; | 796 float spread = item.spread ? item.spread->computeLength<float>(state.css
ToLengthConversionData()) : 0; |
| 797 ShadowStyle shadowStyle = item->style && item->style->getValueID() == CS
SValueInset ? Inset : Normal; | 797 ShadowStyle shadowStyle = item.style && item.style->getValueID() == CSSV
alueInset ? Inset : Normal; |
| 798 StyleColor color = StyleColor::currentColor(); | 798 StyleColor color = StyleColor::currentColor(); |
| 799 if (item->color) | 799 if (item.color) |
| 800 color = convertStyleColor(state, item->color.get()); | 800 color = convertStyleColor(state, CSSValue(*item.color)); |
| 801 shadows.append(ShadowData(FloatPoint(x, y), blur, spread, shadowStyle, c
olor)); | 801 shadows.append(ShadowData(FloatPoint(x, y), blur, spread, shadowStyle, c
olor)); |
| 802 } | 802 } |
| 803 return ShadowList::adopt(shadows); | 803 return ShadowList::adopt(shadows); |
| 804 } | 804 } |
| 805 | 805 |
| 806 PassRefPtr<ShapeValue> StyleBuilderConverter::convertShapeValue(StyleResolverSta
te& state, CSSValue* value) | 806 PassRefPtr<ShapeValue> StyleBuilderConverter::convertShapeValue(StyleResolverSta
te& state, CSSValue value) |
| 807 { | 807 { |
| 808 if (value->isPrimitiveValue()) { | 808 if (value.isPrimitiveValue()) { |
| 809 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); | 809 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); |
| 810 return nullptr; | 810 return nullptr; |
| 811 } | 811 } |
| 812 | 812 |
| 813 if (value->isImageValue() || value->isImageGeneratorValue() || value->isImag
eSetValue()) | 813 if (value.isImageValue() || value.isImageGeneratorValue() || value.isImageSe
tValue()) |
| 814 return ShapeValue::createImageValue(state.styleImage(CSSPropertyShapeOut
side, value)); | 814 return ShapeValue::createImageValue(state.styleImage(CSSPropertyShapeOut
side, value)); |
| 815 | 815 |
| 816 RefPtr<BasicShape> shape; | 816 RefPtr<BasicShape> shape; |
| 817 CSSBoxType cssBox = BoxMissing; | 817 CSSBoxType cssBox = BoxMissing; |
| 818 CSSValueList* valueList = toCSSValueList(value); | 818 CSSValueList& valueList = toCSSValueList(value); |
| 819 for (unsigned i = 0; i < valueList->length(); ++i) { | 819 for (unsigned i = 0; i < valueList.length(); ++i) { |
| 820 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(valueList->item(
i)); | 820 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(valueList.item(i
)); |
| 821 if (primitiveValue->isShape()) | 821 if (primitiveValue.isShape()) |
| 822 shape = basicShapeForValue(state, primitiveValue->getShapeValue()); | 822 shape = basicShapeForValue(state, primitiveValue.getShapeValue()); |
| 823 else | 823 else |
| 824 cssBox = CSSBoxType(*primitiveValue); | 824 cssBox = CSSBoxType(primitiveValue); |
| 825 } | 825 } |
| 826 | 826 |
| 827 if (shape) | 827 if (shape) |
| 828 return ShapeValue::createShapeValue(shape.release(), cssBox); | 828 return ShapeValue::createShapeValue(shape.release(), cssBox); |
| 829 | 829 |
| 830 ASSERT(cssBox != BoxMissing); | 830 ASSERT(cssBox != BoxMissing); |
| 831 return ShapeValue::createBoxShapeValue(cssBox); | 831 return ShapeValue::createBoxShapeValue(cssBox); |
| 832 } | 832 } |
| 833 | 833 |
| 834 float StyleBuilderConverter::convertSpacing(StyleResolverState& state, CSSValue*
value) | 834 float StyleBuilderConverter::convertSpacing(StyleResolverState& state, CSSValue
value) |
| 835 { | 835 { |
| 836 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 836 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 837 if (primitiveValue->getValueID() == CSSValueNormal) | 837 if (primitiveValue.getValueID() == CSSValueNormal) |
| 838 return 0; | 838 return 0; |
| 839 return primitiveValue->computeLength<float>(state.cssToLengthConversionData(
)); | 839 return primitiveValue.computeLength<float>(state.cssToLengthConversionData()
); |
| 840 } | 840 } |
| 841 | 841 |
| 842 PassRefPtr<SVGDashArray> StyleBuilderConverter::convertStrokeDasharray(StyleReso
lverState& state, CSSValue* value) | 842 PassRefPtr<SVGDashArray> StyleBuilderConverter::convertStrokeDasharray(StyleReso
lverState& state, CSSValue value) |
| 843 { | 843 { |
| 844 if (!value->isValueList()) | 844 if (!value.isValueList()) |
| 845 return SVGComputedStyle::initialStrokeDashArray(); | 845 return SVGComputedStyle::initialStrokeDashArray(); |
| 846 | 846 |
| 847 CSSValueList* dashes = toCSSValueList(value); | 847 CSSValueList& dashes = toCSSValueList(value); |
| 848 | 848 |
| 849 RefPtr<SVGDashArray> array = SVGDashArray::create(); | 849 RefPtr<SVGDashArray> array = SVGDashArray::create(); |
| 850 size_t length = dashes->length(); | 850 size_t length = dashes.length(); |
| 851 for (size_t i = 0; i < length; ++i) { | 851 for (size_t i = 0; i < length; ++i) { |
| 852 CSSValue* currValue = dashes->item(i); | 852 CSSValue currValue = dashes.item(i); |
| 853 if (!currValue->isPrimitiveValue()) | 853 if (!currValue.isPrimitiveValue()) |
| 854 continue; | 854 continue; |
| 855 | 855 |
| 856 CSSPrimitiveValue* dash = toCSSPrimitiveValue(dashes->item(i)); | 856 array->append(convertLength(state, currValue)); |
| 857 array->append(convertLength(state, dash)); | |
| 858 } | 857 } |
| 859 | 858 |
| 860 return array.release(); | 859 return array.release(); |
| 861 } | 860 } |
| 862 | 861 |
| 863 StyleColor StyleBuilderConverter::convertStyleColor(StyleResolverState& state, C
SSValue* value, bool forVisitedLink) | 862 StyleColor StyleBuilderConverter::convertStyleColor(StyleResolverState& state, C
SSValue value, bool forVisitedLink) |
| 864 { | 863 { |
| 865 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 864 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 866 if (primitiveValue->getValueID() == CSSValueCurrentcolor) | 865 if (primitiveValue.getValueID() == CSSValueCurrentcolor) |
| 867 return StyleColor::currentColor(); | 866 return StyleColor::currentColor(); |
| 868 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa
lue, Color(), forVisitedLink); | 867 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa
lue, Color(), forVisitedLink); |
| 869 } | 868 } |
| 870 | 869 |
| 871 Color StyleBuilderConverter::convertSVGColor(StyleResolverState& state, CSSValue
* value) | 870 Color StyleBuilderConverter::convertSVGColor(StyleResolverState& state, CSSValue
value) |
| 872 { | 871 { |
| 873 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 872 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 874 if (primitiveValue->isRGBColor()) | 873 if (primitiveValue.isRGBColor()) |
| 875 return primitiveValue->getRGBA32Value(); | 874 return primitiveValue.getRGBA32Value(); |
| 876 ASSERT(primitiveValue->getValueID() == CSSValueCurrentcolor); | 875 ASSERT(primitiveValue.getValueID() == CSSValueCurrentcolor); |
| 877 return state.style()->color(); | 876 return state.style()->color(); |
| 878 } | 877 } |
| 879 | 878 |
| 880 float StyleBuilderConverter::convertTextStrokeWidth(StyleResolverState& state, C
SSValue* value) | 879 float StyleBuilderConverter::convertTextStrokeWidth(StyleResolverState& state, C
SSValue value) |
| 881 { | 880 { |
| 882 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 881 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 883 if (primitiveValue->getValueID()) { | 882 if (primitiveValue.getValueID()) { |
| 884 float multiplier = convertLineWidth<float>(state, value); | 883 float multiplier = convertLineWidth<float>(state, value); |
| 885 return CSSPrimitiveValue::create(multiplier / 48, CSSPrimitiveValue::CSS
_EMS)->computeLength<float>(state.cssToLengthConversionData()); | 884 return CSSPrimitiveValue::create(multiplier / 48, CSSPrimitiveValue::CSS
_EMS)->computeLength<float>(state.cssToLengthConversionData()); |
| 886 } | 885 } |
| 887 return primitiveValue->computeLength<float>(state.cssToLengthConversionData(
)); | 886 return primitiveValue.computeLength<float>(state.cssToLengthConversionData()
); |
| 888 } | 887 } |
| 889 | 888 |
| 890 TransformOrigin StyleBuilderConverter::convertTransformOrigin(StyleResolverState
& state, CSSValue* value) | 889 TransformOrigin StyleBuilderConverter::convertTransformOrigin(StyleResolverState
& state, CSSValue value) |
| 891 { | 890 { |
| 892 CSSValueList* list = toCSSValueList(value); | 891 CSSValueList& list = toCSSValueList(value); |
| 893 ASSERT(list->length() == 3); | 892 ASSERT(list.length() == 3); |
| 894 | 893 |
| 895 CSSPrimitiveValue* primitiveValueX = toCSSPrimitiveValue(list->item(0)); | 894 CSSPrimitiveValue& primitiveValueX = toCSSPrimitiveValue(list.item(0)); |
| 896 CSSPrimitiveValue* primitiveValueY = toCSSPrimitiveValue(list->item(1)); | 895 CSSPrimitiveValue& primitiveValueY = toCSSPrimitiveValue(list.item(1)); |
| 897 CSSPrimitiveValue* primitiveValueZ = toCSSPrimitiveValue(list->item(2)); | |
| 898 | 896 |
| 899 return TransformOrigin( | 897 return TransformOrigin( |
| 900 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX)
, | 898 convertOriginLength<CSSValueLeft, CSSValueRight>(state, primitiveValueX)
, |
| 901 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY)
, | 899 convertOriginLength<CSSValueTop, CSSValueBottom>(state, primitiveValueY)
, |
| 902 StyleBuilderConverter::convertComputedLength<float>(state, primitiveValu
eZ) | 900 StyleBuilderConverter::convertComputedLength<float>(state, list.item(2)) |
| 903 ); | 901 ); |
| 904 } | 902 } |
| 905 | 903 |
| 906 ScrollSnapPoints StyleBuilderConverter::convertSnapPoints(StyleResolverState& st
ate, CSSValue* value) | 904 ScrollSnapPoints StyleBuilderConverter::convertSnapPoints(StyleResolverState& st
ate, CSSValue value) |
| 907 { | 905 { |
| 908 // Handles: none | repeat(<length>) | 906 // Handles: none | repeat(<length>) |
| 909 ScrollSnapPoints points; | 907 ScrollSnapPoints points; |
| 910 points.hasRepeat = false; | 908 points.hasRepeat = false; |
| 911 | 909 |
| 912 if (!value->isFunctionValue()) | 910 if (!value.isFunctionValue()) |
| 913 return points; | 911 return points; |
| 914 | 912 |
| 915 CSSFunctionValue* repeatFunction = toCSSFunctionValue(value); | 913 CSSFunctionValue& repeatFunction = toCSSFunctionValue(value); |
| 916 ASSERT_WITH_SECURITY_IMPLICATION(repeatFunction->length() == 1); | 914 ASSERT_WITH_SECURITY_IMPLICATION(repeatFunction.length() == 1); |
| 917 points.repeatOffset = convertLength(state, toCSSPrimitiveValue(repeatFunctio
n->item(0))); | 915 points.repeatOffset = convertLength(state, repeatFunction.item(0)); |
| 918 points.hasRepeat = true; | 916 points.hasRepeat = true; |
| 919 | 917 |
| 920 return points; | 918 return points; |
| 921 } | 919 } |
| 922 | 920 |
| 923 Vector<LengthPoint> StyleBuilderConverter::convertSnapCoordinates(StyleResolverS
tate& state, CSSValue* value) | 921 Vector<LengthPoint> StyleBuilderConverter::convertSnapCoordinates(StyleResolverS
tate& state, CSSValue value) |
| 924 { | 922 { |
| 925 // Handles: none | <position># | 923 // Handles: none | <position># |
| 926 Vector<LengthPoint> coordinates; | 924 Vector<LengthPoint> coordinates; |
| 927 | 925 |
| 928 if (!value->isValueList()) | 926 if (!value.isValueList()) |
| 929 return coordinates; | 927 return coordinates; |
| 930 | 928 |
| 931 CSSValueList* valueList = toCSSValueList(value); | 929 CSSValueList& valueList = toCSSValueList(value); |
| 932 coordinates.reserveInitialCapacity(valueList->length()); | 930 coordinates.reserveInitialCapacity(valueList.length()); |
| 933 for (auto& snapCoordinate : *valueList) { | 931 for (auto& snapCoordinate : valueList) { |
| 934 coordinates.uncheckedAppend(convertPosition(state, snapCoordinate.get())
); | 932 coordinates.uncheckedAppend(convertPosition(state, snapCoordinate)); |
| 935 } | 933 } |
| 936 | 934 |
| 937 return coordinates; | 935 return coordinates; |
| 938 } | 936 } |
| 939 | 937 |
| 940 } // namespace blink | 938 } // namespace blink |
| OLD | NEW |