Index: Source/core/css/resolver/CSSToStyleMap.cpp |
diff --git a/Source/core/css/resolver/CSSToStyleMap.cpp b/Source/core/css/resolver/CSSToStyleMap.cpp |
index 4deb70fa9ff3d6958f801066e831349600c99322..b0f7864d72ac445fab15307bf1597d544ddcf0ae 100644 |
--- a/Source/core/css/resolver/CSSToStyleMap.cpp |
+++ b/Source/core/css/resolver/CSSToStyleMap.cpp |
@@ -35,7 +35,7 @@ |
#include "core/css/CSSPrimitiveValueMappings.h" |
#include "core/css/CSSQuadValue.h" |
#include "core/css/CSSTimingFunctionValue.h" |
-#include "core/css/Pair.h" |
+#include "core/css/CSSValuePair.h" |
#include "core/css/resolver/StyleBuilderConverter.h" |
#include "core/css/resolver/StyleResolverState.h" |
#include "core/style/BorderImageLengthBox.h" |
@@ -173,20 +173,19 @@ void CSSToStyleMap::mapFillSize(StyleResolverState& state, FillLayer* layer, CSS |
return; |
} |
- if (!value->isPrimitiveValue()) |
+ if (!value->isPrimitiveValue() && !value->isValuePair()) |
return; |
- CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); |
- if (primitiveValue->getValueID() == CSSValueContain) |
+ if (value->isPrimitiveValue() && toCSSPrimitiveValue(value)->getValueID() == CSSValueContain) |
layer->setSizeType(Contain); |
- else if (primitiveValue->getValueID() == CSSValueCover) |
+ else if (value->isPrimitiveValue() && toCSSPrimitiveValue(value)->getValueID() == CSSValueCover) |
layer->setSizeType(Cover); |
else |
layer->setSizeType(SizeLength); |
LengthSize b = FillLayer::initialFillSizeLength(layer->type()); |
- if (primitiveValue->getValueID() == CSSValueContain || primitiveValue->getValueID() == CSSValueCover) { |
+ if (value->isPrimitiveValue() && (toCSSPrimitiveValue(value)->getValueID() == CSSValueContain || toCSSPrimitiveValue(value)->getValueID() == CSSValueCover)) { |
layer->setSizeLength(b); |
return; |
} |
@@ -194,11 +193,13 @@ void CSSToStyleMap::mapFillSize(StyleResolverState& state, FillLayer* layer, CSS |
Length firstLength; |
Length secondLength; |
- if (Pair* pair = primitiveValue->getPairValue()) { |
+ if (value->isValuePair()) { |
+ const CSSValuePair* pair = toCSSValuePair(value); |
firstLength = StyleBuilderConverter::convertLengthOrAuto(state, pair->first()); |
secondLength = StyleBuilderConverter::convertLengthOrAuto(state, pair->second()); |
} else { |
- firstLength = StyleBuilderConverter::convertLengthOrAuto(state, primitiveValue); |
+ ASSERT(value->isPrimitiveValue()); |
+ firstLength = StyleBuilderConverter::convertLengthOrAuto(state, value); |
secondLength = Length(); |
} |
@@ -214,19 +215,20 @@ void CSSToStyleMap::mapFillXPosition(StyleResolverState& state, FillLayer* layer |
return; |
} |
- if (!value->isPrimitiveValue()) |
+ if (!value->isPrimitiveValue() && !value->isValuePair()) |
return; |
- CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); |
- Pair* pair = primitiveValue->getPairValue(); |
- if (pair) |
- primitiveValue = pair->second(); |
+ CSSPrimitiveValue* primitiveValue; |
+ if (value->isValuePair()) |
+ primitiveValue = toCSSPrimitiveValue(toCSSValuePair(value)->second()); |
+ else |
+ primitiveValue = toCSSPrimitiveValue(value); |
Length length = primitiveValue->convertToLength(state.cssToLengthConversionData()); |
layer->setXPosition(length); |
- if (pair) |
- layer->setBackgroundXOrigin(*(pair->first())); |
+ if (value->isValuePair()) |
+ layer->setBackgroundXOrigin(*toCSSPrimitiveValue(toCSSValuePair(value)->first())); |
} |
void CSSToStyleMap::mapFillYPosition(StyleResolverState& state, FillLayer* layer, CSSValue* value) |
@@ -236,19 +238,20 @@ void CSSToStyleMap::mapFillYPosition(StyleResolverState& state, FillLayer* layer |
return; |
} |
- if (!value->isPrimitiveValue()) |
+ if (!value->isPrimitiveValue() && !value->isValuePair()) |
return; |
- CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); |
- Pair* pair = primitiveValue->getPairValue(); |
- if (pair) |
- primitiveValue = pair->second(); |
+ CSSPrimitiveValue* primitiveValue; |
+ if (value->isValuePair()) |
+ primitiveValue = toCSSPrimitiveValue(toCSSValuePair(value)->second()); |
+ else |
+ primitiveValue = toCSSPrimitiveValue(value); |
Length length = primitiveValue->convertToLength(state.cssToLengthConversionData()); |
layer->setYPosition(length); |
- if (pair) |
- layer->setBackgroundYOrigin(*(pair->first())); |
+ if (value->isValuePair()) |
+ layer->setBackgroundYOrigin(*toCSSPrimitiveValue(toCSSValuePair(value)->first())); |
} |
void CSSToStyleMap::mapFillMaskSourceType(StyleResolverState&, FillLayer* layer, CSSValue* value) |
@@ -461,7 +464,7 @@ void CSSToStyleMap::mapNinePieceImage(StyleResolverState& state, CSSPropertyID p |
// Map in the outset. |
if (length > 2) |
image.setOutset(mapNinePieceImageQuad(state, slashList->item(2))); |
- } else if (current->isPrimitiveValue()) { |
+ } else if (current->isPrimitiveValue() || current->isValuePair()) { |
// Set the appropriate rules for stretch/round/repeat of the slices. |
mapNinePieceImageRepeat(state, current, image); |
} |
@@ -543,16 +546,15 @@ BorderImageLengthBox CSSToStyleMap::mapNinePieceImageQuad(StyleResolverState& st |
void CSSToStyleMap::mapNinePieceImageRepeat(StyleResolverState&, CSSValue* value, NinePieceImage& image) |
{ |
- if (!value || !value->isPrimitiveValue()) |
+ if (!value || !value->isValuePair()) |
return; |
- CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); |
- Pair* pair = primitiveValue->getPairValue(); |
+ const CSSValuePair* pair = toCSSValuePair(value); |
if (!pair || !pair->first() || !pair->second()) |
return; |
- CSSValueID firstIdentifier = pair->first()->getValueID(); |
- CSSValueID secondIdentifier = pair->second()->getValueID(); |
+ CSSValueID firstIdentifier = toCSSPrimitiveValue(pair->first())->getValueID(); |
+ CSSValueID secondIdentifier = toCSSPrimitiveValue(pair->second())->getValueID(); |
ENinePieceImageRule horizontalRule; |
switch (firstIdentifier) { |