| 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 |