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