| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) |
| 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) | 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) |
| 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r
ights reserved. | 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r
ights reserved. |
| 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
| 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> |
| 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
| 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. | 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. |
| 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 #include "core/css/CSSTimingFunctionValue.h" | 36 #include "core/css/CSSTimingFunctionValue.h" |
| 37 #include "core/css/Pair.h" | 37 #include "core/css/Pair.h" |
| 38 #include "core/css/Rect.h" | 38 #include "core/css/Rect.h" |
| 39 #include "core/css/resolver/StyleBuilderConverter.h" | 39 #include "core/css/resolver/StyleBuilderConverter.h" |
| 40 #include "core/css/resolver/StyleResolverState.h" | 40 #include "core/css/resolver/StyleResolverState.h" |
| 41 #include "core/style/BorderImageLengthBox.h" | 41 #include "core/style/BorderImageLengthBox.h" |
| 42 #include "core/style/FillLayer.h" | 42 #include "core/style/FillLayer.h" |
| 43 | 43 |
| 44 namespace blink { | 44 namespace blink { |
| 45 | 45 |
| 46 void CSSToStyleMap::mapFillAttachment(StyleResolverState&, FillLayer* layer, CSS
Value* value) | 46 void CSSToStyleMap::mapFillAttachment(StyleResolverState&, FillLayer* layer, CSS
Value value) |
| 47 { | 47 { |
| 48 if (value->isInitialValue()) { | 48 if (value.isInitialValue()) { |
| 49 layer->setAttachment(FillLayer::initialFillAttachment(layer->type())); | 49 layer->setAttachment(FillLayer::initialFillAttachment(layer->type())); |
| 50 return; | 50 return; |
| 51 } | 51 } |
| 52 | 52 |
| 53 if (!value->isPrimitiveValue()) | 53 if (!value.isPrimitiveValue()) |
| 54 return; | 54 return; |
| 55 | 55 |
| 56 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 56 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 57 switch (primitiveValue->getValueID()) { | 57 switch (primitiveValue.getValueID()) { |
| 58 case CSSValueFixed: | 58 case CSSValueFixed: |
| 59 layer->setAttachment(FixedBackgroundAttachment); | 59 layer->setAttachment(FixedBackgroundAttachment); |
| 60 break; | 60 break; |
| 61 case CSSValueScroll: | 61 case CSSValueScroll: |
| 62 layer->setAttachment(ScrollBackgroundAttachment); | 62 layer->setAttachment(ScrollBackgroundAttachment); |
| 63 break; | 63 break; |
| 64 case CSSValueLocal: | 64 case CSSValueLocal: |
| 65 layer->setAttachment(LocalBackgroundAttachment); | 65 layer->setAttachment(LocalBackgroundAttachment); |
| 66 break; | 66 break; |
| 67 default: | 67 default: |
| 68 return; | 68 return; |
| 69 } | 69 } |
| 70 } | 70 } |
| 71 | 71 |
| 72 void CSSToStyleMap::mapFillClip(StyleResolverState&, FillLayer* layer, CSSValue*
value) | 72 void CSSToStyleMap::mapFillClip(StyleResolverState&, FillLayer* layer, CSSValue
value) |
| 73 { | 73 { |
| 74 if (value->isInitialValue()) { | 74 if (value.isInitialValue()) { |
| 75 layer->setClip(FillLayer::initialFillClip(layer->type())); | 75 layer->setClip(FillLayer::initialFillClip(layer->type())); |
| 76 return; | 76 return; |
| 77 } | 77 } |
| 78 | 78 |
| 79 if (!value->isPrimitiveValue()) | 79 if (!value.isPrimitiveValue()) |
| 80 return; | 80 return; |
| 81 | 81 |
| 82 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 82 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 83 layer->setClip(*primitiveValue); | 83 layer->setClip(primitiveValue); |
| 84 } | 84 } |
| 85 | 85 |
| 86 void CSSToStyleMap::mapFillComposite(StyleResolverState&, FillLayer* layer, CSSV
alue* value) | 86 void CSSToStyleMap::mapFillComposite(StyleResolverState&, FillLayer* layer, CSSV
alue value) |
| 87 { | 87 { |
| 88 if (value->isInitialValue()) { | 88 if (value.isInitialValue()) { |
| 89 layer->setComposite(FillLayer::initialFillComposite(layer->type())); | 89 layer->setComposite(FillLayer::initialFillComposite(layer->type())); |
| 90 return; | 90 return; |
| 91 } | 91 } |
| 92 | 92 |
| 93 if (!value->isPrimitiveValue()) | 93 if (!value.isPrimitiveValue()) |
| 94 return; | 94 return; |
| 95 | 95 |
| 96 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 96 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 97 layer->setComposite(*primitiveValue); | 97 layer->setComposite(primitiveValue); |
| 98 } | 98 } |
| 99 | 99 |
| 100 void CSSToStyleMap::mapFillBlendMode(StyleResolverState&, FillLayer* layer, CSSV
alue* value) | 100 void CSSToStyleMap::mapFillBlendMode(StyleResolverState&, FillLayer* layer, CSSV
alue value) |
| 101 { | 101 { |
| 102 if (value->isInitialValue()) { | 102 if (value.isInitialValue()) { |
| 103 layer->setBlendMode(FillLayer::initialFillBlendMode(layer->type())); | 103 layer->setBlendMode(FillLayer::initialFillBlendMode(layer->type())); |
| 104 return; | 104 return; |
| 105 } | 105 } |
| 106 | 106 |
| 107 if (!value->isPrimitiveValue()) | 107 if (!value.isPrimitiveValue()) |
| 108 return; | 108 return; |
| 109 | 109 |
| 110 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 110 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 111 layer->setBlendMode(*primitiveValue); | 111 layer->setBlendMode(primitiveValue); |
| 112 } | 112 } |
| 113 | 113 |
| 114 void CSSToStyleMap::mapFillOrigin(StyleResolverState&, FillLayer* layer, CSSValu
e* value) | 114 void CSSToStyleMap::mapFillOrigin(StyleResolverState&, FillLayer* layer, CSSValu
e value) |
| 115 { | 115 { |
| 116 if (value->isInitialValue()) { | 116 if (value.isInitialValue()) { |
| 117 layer->setOrigin(FillLayer::initialFillOrigin(layer->type())); | 117 layer->setOrigin(FillLayer::initialFillOrigin(layer->type())); |
| 118 return; | 118 return; |
| 119 } | 119 } |
| 120 | 120 |
| 121 if (!value->isPrimitiveValue()) | 121 if (!value.isPrimitiveValue()) |
| 122 return; | 122 return; |
| 123 | 123 |
| 124 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 124 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 125 layer->setOrigin(*primitiveValue); | 125 layer->setOrigin(primitiveValue); |
| 126 } | 126 } |
| 127 | 127 |
| 128 | 128 |
| 129 void CSSToStyleMap::mapFillImage(StyleResolverState& state, FillLayer* layer, CS
SValue* value) | 129 void CSSToStyleMap::mapFillImage(StyleResolverState& state, FillLayer* layer, CS
SValue value) |
| 130 { | 130 { |
| 131 if (value->isInitialValue()) { | 131 if (value.isInitialValue()) { |
| 132 layer->setImage(FillLayer::initialFillImage(layer->type())); | 132 layer->setImage(FillLayer::initialFillImage(layer->type())); |
| 133 return; | 133 return; |
| 134 } | 134 } |
| 135 | 135 |
| 136 CSSPropertyID property = layer->type() == BackgroundFillLayer ? CSSPropertyB
ackgroundImage : CSSPropertyWebkitMaskImage; | 136 CSSPropertyID property = layer->type() == BackgroundFillLayer ? CSSPropertyB
ackgroundImage : CSSPropertyWebkitMaskImage; |
| 137 layer->setImage(state.styleImage(property, value)); | 137 layer->setImage(state.styleImage(property, value)); |
| 138 } | 138 } |
| 139 | 139 |
| 140 void CSSToStyleMap::mapFillRepeatX(StyleResolverState&, FillLayer* layer, CSSVal
ue* value) | 140 void CSSToStyleMap::mapFillRepeatX(StyleResolverState&, FillLayer* layer, CSSVal
ue value) |
| 141 { | 141 { |
| 142 if (value->isInitialValue()) { | 142 if (value.isInitialValue()) { |
| 143 layer->setRepeatX(FillLayer::initialFillRepeatX(layer->type())); | 143 layer->setRepeatX(FillLayer::initialFillRepeatX(layer->type())); |
| 144 return; | 144 return; |
| 145 } | 145 } |
| 146 | 146 |
| 147 if (!value->isPrimitiveValue()) | 147 if (!value.isPrimitiveValue()) |
| 148 return; | 148 return; |
| 149 | 149 |
| 150 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 150 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 151 layer->setRepeatX(*primitiveValue); | 151 layer->setRepeatX(primitiveValue); |
| 152 } | 152 } |
| 153 | 153 |
| 154 void CSSToStyleMap::mapFillRepeatY(StyleResolverState&, FillLayer* layer, CSSVal
ue* value) | 154 void CSSToStyleMap::mapFillRepeatY(StyleResolverState&, FillLayer* layer, CSSVal
ue value) |
| 155 { | 155 { |
| 156 if (value->isInitialValue()) { | 156 if (value.isInitialValue()) { |
| 157 layer->setRepeatY(FillLayer::initialFillRepeatY(layer->type())); | 157 layer->setRepeatY(FillLayer::initialFillRepeatY(layer->type())); |
| 158 return; | 158 return; |
| 159 } | 159 } |
| 160 | 160 |
| 161 if (!value->isPrimitiveValue()) | 161 if (!value.isPrimitiveValue()) |
| 162 return; | 162 return; |
| 163 | 163 |
| 164 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 164 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 165 layer->setRepeatY(*primitiveValue); | 165 layer->setRepeatY(primitiveValue); |
| 166 } | 166 } |
| 167 | 167 |
| 168 void CSSToStyleMap::mapFillSize(StyleResolverState& state, FillLayer* layer, CSS
Value* value) | 168 void CSSToStyleMap::mapFillSize(StyleResolverState& state, FillLayer* layer, CSS
Value value) |
| 169 { | 169 { |
| 170 if (value->isInitialValue()) { | 170 if (value.isInitialValue()) { |
| 171 layer->setSizeType(FillLayer::initialFillSizeType(layer->type())); | 171 layer->setSizeType(FillLayer::initialFillSizeType(layer->type())); |
| 172 layer->setSizeLength(FillLayer::initialFillSizeLength(layer->type())); | 172 layer->setSizeLength(FillLayer::initialFillSizeLength(layer->type())); |
| 173 return; | 173 return; |
| 174 } | 174 } |
| 175 | 175 |
| 176 if (!value->isPrimitiveValue()) | 176 if (!value.isPrimitiveValue()) |
| 177 return; | 177 return; |
| 178 | 178 |
| 179 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 179 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 180 if (primitiveValue->getValueID() == CSSValueContain) | 180 if (primitiveValue.getValueID() == CSSValueContain) |
| 181 layer->setSizeType(Contain); | 181 layer->setSizeType(Contain); |
| 182 else if (primitiveValue->getValueID() == CSSValueCover) | 182 else if (primitiveValue.getValueID() == CSSValueCover) |
| 183 layer->setSizeType(Cover); | 183 layer->setSizeType(Cover); |
| 184 else | 184 else |
| 185 layer->setSizeType(SizeLength); | 185 layer->setSizeType(SizeLength); |
| 186 | 186 |
| 187 LengthSize b = FillLayer::initialFillSizeLength(layer->type()); | 187 LengthSize b = FillLayer::initialFillSizeLength(layer->type()); |
| 188 | 188 |
| 189 if (primitiveValue->getValueID() == CSSValueContain || primitiveValue->getVa
lueID() == CSSValueCover) { | 189 if (primitiveValue.getValueID() == CSSValueContain || primitiveValue.getValu
eID() == CSSValueCover) { |
| 190 layer->setSizeLength(b); | 190 layer->setSizeLength(b); |
| 191 return; | 191 return; |
| 192 } | 192 } |
| 193 | 193 |
| 194 Length firstLength; | 194 Length firstLength; |
| 195 Length secondLength; | 195 Length secondLength; |
| 196 | 196 |
| 197 if (Pair* pair = primitiveValue->getPairValue()) { | 197 if (Pair* pair = primitiveValue.getPairValue()) { |
| 198 firstLength = StyleBuilderConverter::convertLengthOrAuto(state, pair->fi
rst()); | 198 firstLength = StyleBuilderConverter::convertLengthOrAuto(state, CSSValue
(*pair->first())); |
| 199 secondLength = StyleBuilderConverter::convertLengthOrAuto(state, pair->s
econd()); | 199 secondLength = StyleBuilderConverter::convertLengthOrAuto(state, CSSValu
e(*pair->second())); |
| 200 } else { | 200 } else { |
| 201 firstLength = StyleBuilderConverter::convertLengthOrAuto(state, primitiv
eValue); | 201 firstLength = StyleBuilderConverter::convertLengthOrAuto(state, value); |
| 202 secondLength = Length(); | 202 secondLength = Length(); |
| 203 } | 203 } |
| 204 | 204 |
| 205 b.setWidth(firstLength); | 205 b.setWidth(firstLength); |
| 206 b.setHeight(secondLength); | 206 b.setHeight(secondLength); |
| 207 layer->setSizeLength(b); | 207 layer->setSizeLength(b); |
| 208 } | 208 } |
| 209 | 209 |
| 210 void CSSToStyleMap::mapFillXPosition(StyleResolverState& state, FillLayer* layer
, CSSValue* value) | 210 void CSSToStyleMap::mapFillXPosition(StyleResolverState& state, FillLayer* layer
, CSSValue value) |
| 211 { | 211 { |
| 212 if (value->isInitialValue()) { | 212 if (value.isInitialValue()) { |
| 213 layer->setXPosition(FillLayer::initialFillXPosition(layer->type())); | 213 layer->setXPosition(FillLayer::initialFillXPosition(layer->type())); |
| 214 return; | 214 return; |
| 215 } | 215 } |
| 216 | 216 |
| 217 if (!value->isPrimitiveValue()) | 217 if (!value.isPrimitiveValue()) |
| 218 return; | 218 return; |
| 219 | 219 |
| 220 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 220 CSSPrimitiveValue* primitiveValue = &toCSSPrimitiveValue(value); |
| 221 Pair* pair = primitiveValue->getPairValue(); | 221 Pair* pair = primitiveValue->getPairValue(); |
| 222 if (pair) | 222 if (pair) |
| 223 primitiveValue = pair->second(); | 223 primitiveValue = pair->second(); |
| 224 | 224 |
| 225 Length length = primitiveValue->convertToLength(state.cssToLengthConversionD
ata()); | 225 Length length = primitiveValue->convertToLength(state.cssToLengthConversionD
ata()); |
| 226 | 226 |
| 227 layer->setXPosition(length); | 227 layer->setXPosition(length); |
| 228 if (pair) | 228 if (pair) |
| 229 layer->setBackgroundXOrigin(*(pair->first())); | 229 layer->setBackgroundXOrigin(*(pair->first())); |
| 230 } | 230 } |
| 231 | 231 |
| 232 void CSSToStyleMap::mapFillYPosition(StyleResolverState& state, FillLayer* layer
, CSSValue* value) | 232 void CSSToStyleMap::mapFillYPosition(StyleResolverState& state, FillLayer* layer
, CSSValue value) |
| 233 { | 233 { |
| 234 if (value->isInitialValue()) { | 234 if (value.isInitialValue()) { |
| 235 layer->setYPosition(FillLayer::initialFillYPosition(layer->type())); | 235 layer->setYPosition(FillLayer::initialFillYPosition(layer->type())); |
| 236 return; | 236 return; |
| 237 } | 237 } |
| 238 | 238 |
| 239 if (!value->isPrimitiveValue()) | 239 if (!value.isPrimitiveValue()) |
| 240 return; | 240 return; |
| 241 | 241 |
| 242 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 242 CSSPrimitiveValue* primitiveValue = &toCSSPrimitiveValue(value); |
| 243 Pair* pair = primitiveValue->getPairValue(); | 243 Pair* pair = primitiveValue->getPairValue(); |
| 244 if (pair) | 244 if (pair) |
| 245 primitiveValue = pair->second(); | 245 primitiveValue = pair->second(); |
| 246 | 246 |
| 247 Length length = primitiveValue->convertToLength(state.cssToLengthConversionD
ata()); | 247 Length length = primitiveValue->convertToLength(state.cssToLengthConversionD
ata()); |
| 248 | 248 |
| 249 layer->setYPosition(length); | 249 layer->setYPosition(length); |
| 250 if (pair) | 250 if (pair) |
| 251 layer->setBackgroundYOrigin(*(pair->first())); | 251 layer->setBackgroundYOrigin(*(pair->first())); |
| 252 } | 252 } |
| 253 | 253 |
| 254 void CSSToStyleMap::mapFillMaskSourceType(StyleResolverState&, FillLayer* layer,
CSSValue* value) | 254 void CSSToStyleMap::mapFillMaskSourceType(StyleResolverState&, FillLayer* layer,
CSSValue value) |
| 255 { | 255 { |
| 256 EMaskSourceType type = FillLayer::initialFillMaskSourceType(layer->type()); | 256 EMaskSourceType type = FillLayer::initialFillMaskSourceType(layer->type()); |
| 257 if (value->isInitialValue()) { | 257 if (value.isInitialValue()) { |
| 258 layer->setMaskSourceType(type); | 258 layer->setMaskSourceType(type); |
| 259 return; | 259 return; |
| 260 } | 260 } |
| 261 | 261 |
| 262 if (!value->isPrimitiveValue()) | 262 if (!value.isPrimitiveValue()) |
| 263 return; | 263 return; |
| 264 | 264 |
| 265 switch (toCSSPrimitiveValue(value)->getValueID()) { | 265 switch (toCSSPrimitiveValue(value).getValueID()) { |
| 266 case CSSValueAlpha: | 266 case CSSValueAlpha: |
| 267 type = MaskAlpha; | 267 type = MaskAlpha; |
| 268 break; | 268 break; |
| 269 case CSSValueLuminance: | 269 case CSSValueLuminance: |
| 270 type = MaskLuminance; | 270 type = MaskLuminance; |
| 271 break; | 271 break; |
| 272 case CSSValueAuto: | 272 case CSSValueAuto: |
| 273 break; | 273 break; |
| 274 default: | 274 default: |
| 275 ASSERT_NOT_REACHED(); | 275 ASSERT_NOT_REACHED(); |
| 276 } | 276 } |
| 277 | 277 |
| 278 layer->setMaskSourceType(type); | 278 layer->setMaskSourceType(type); |
| 279 } | 279 } |
| 280 | 280 |
| 281 double CSSToStyleMap::mapAnimationDelay(CSSValue* value) | 281 double CSSToStyleMap::mapAnimationDelay(CSSValue value) |
| 282 { | 282 { |
| 283 if (value->isInitialValue()) | 283 if (value.isInitialValue()) |
| 284 return CSSTimingData::initialDelay(); | 284 return CSSTimingData::initialDelay(); |
| 285 return toCSSPrimitiveValue(value)->computeSeconds(); | 285 return toCSSPrimitiveValue(value).computeSeconds(); |
| 286 } | 286 } |
| 287 | 287 |
| 288 Timing::PlaybackDirection CSSToStyleMap::mapAnimationDirection(CSSValue* value) | 288 Timing::PlaybackDirection CSSToStyleMap::mapAnimationDirection(CSSValue value) |
| 289 { | 289 { |
| 290 if (value->isInitialValue()) | 290 if (value.isInitialValue()) |
| 291 return CSSAnimationData::initialDirection(); | 291 return CSSAnimationData::initialDirection(); |
| 292 | 292 |
| 293 switch (toCSSPrimitiveValue(value)->getValueID()) { | 293 switch (toCSSPrimitiveValue(value).getValueID()) { |
| 294 case CSSValueNormal: | 294 case CSSValueNormal: |
| 295 return Timing::PlaybackDirectionNormal; | 295 return Timing::PlaybackDirectionNormal; |
| 296 case CSSValueAlternate: | 296 case CSSValueAlternate: |
| 297 return Timing::PlaybackDirectionAlternate; | 297 return Timing::PlaybackDirectionAlternate; |
| 298 case CSSValueReverse: | 298 case CSSValueReverse: |
| 299 return Timing::PlaybackDirectionReverse; | 299 return Timing::PlaybackDirectionReverse; |
| 300 case CSSValueAlternateReverse: | 300 case CSSValueAlternateReverse: |
| 301 return Timing::PlaybackDirectionAlternateReverse; | 301 return Timing::PlaybackDirectionAlternateReverse; |
| 302 default: | 302 default: |
| 303 ASSERT_NOT_REACHED(); | 303 ASSERT_NOT_REACHED(); |
| 304 return CSSAnimationData::initialDirection(); | 304 return CSSAnimationData::initialDirection(); |
| 305 } | 305 } |
| 306 } | 306 } |
| 307 | 307 |
| 308 double CSSToStyleMap::mapAnimationDuration(CSSValue* value) | 308 double CSSToStyleMap::mapAnimationDuration(CSSValue value) |
| 309 { | 309 { |
| 310 if (value->isInitialValue()) | 310 if (value.isInitialValue()) |
| 311 return CSSTimingData::initialDuration(); | 311 return CSSTimingData::initialDuration(); |
| 312 return toCSSPrimitiveValue(value)->computeSeconds(); | 312 return toCSSPrimitiveValue(value).computeSeconds(); |
| 313 } | 313 } |
| 314 | 314 |
| 315 Timing::FillMode CSSToStyleMap::mapAnimationFillMode(CSSValue* value) | 315 Timing::FillMode CSSToStyleMap::mapAnimationFillMode(CSSValue value) |
| 316 { | 316 { |
| 317 if (value->isInitialValue()) | 317 if (value.isInitialValue()) |
| 318 return CSSAnimationData::initialFillMode(); | 318 return CSSAnimationData::initialFillMode(); |
| 319 | 319 |
| 320 switch (toCSSPrimitiveValue(value)->getValueID()) { | 320 switch (toCSSPrimitiveValue(value).getValueID()) { |
| 321 case CSSValueNone: | 321 case CSSValueNone: |
| 322 return Timing::FillModeNone; | 322 return Timing::FillModeNone; |
| 323 case CSSValueForwards: | 323 case CSSValueForwards: |
| 324 return Timing::FillModeForwards; | 324 return Timing::FillModeForwards; |
| 325 case CSSValueBackwards: | 325 case CSSValueBackwards: |
| 326 return Timing::FillModeBackwards; | 326 return Timing::FillModeBackwards; |
| 327 case CSSValueBoth: | 327 case CSSValueBoth: |
| 328 return Timing::FillModeBoth; | 328 return Timing::FillModeBoth; |
| 329 default: | 329 default: |
| 330 ASSERT_NOT_REACHED(); | 330 ASSERT_NOT_REACHED(); |
| 331 return CSSAnimationData::initialFillMode(); | 331 return CSSAnimationData::initialFillMode(); |
| 332 } | 332 } |
| 333 } | 333 } |
| 334 | 334 |
| 335 double CSSToStyleMap::mapAnimationIterationCount(CSSValue* value) | 335 double CSSToStyleMap::mapAnimationIterationCount(CSSValue value) |
| 336 { | 336 { |
| 337 if (value->isInitialValue()) | 337 if (value.isInitialValue()) |
| 338 return CSSAnimationData::initialIterationCount(); | 338 return CSSAnimationData::initialIterationCount(); |
| 339 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 339 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 340 if (primitiveValue->getValueID() == CSSValueInfinite) | 340 if (primitiveValue.getValueID() == CSSValueInfinite) |
| 341 return std::numeric_limits<double>::infinity(); | 341 return std::numeric_limits<double>::infinity(); |
| 342 return primitiveValue->getFloatValue(); | 342 return primitiveValue.getFloatValue(); |
| 343 } | 343 } |
| 344 | 344 |
| 345 AtomicString CSSToStyleMap::mapAnimationName(CSSValue* value) | 345 AtomicString CSSToStyleMap::mapAnimationName(CSSValue value) |
| 346 { | 346 { |
| 347 if (value->isInitialValue()) | 347 if (value.isInitialValue()) |
| 348 return CSSAnimationData::initialName(); | 348 return CSSAnimationData::initialName(); |
| 349 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 349 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 350 if (primitiveValue->getValueID() == CSSValueNone) | 350 if (primitiveValue.getValueID() == CSSValueNone) |
| 351 return CSSAnimationData::initialName(); | 351 return CSSAnimationData::initialName(); |
| 352 return AtomicString(primitiveValue->getStringValue()); | 352 return AtomicString(primitiveValue.getStringValue()); |
| 353 } | 353 } |
| 354 | 354 |
| 355 EAnimPlayState CSSToStyleMap::mapAnimationPlayState(CSSValue* value) | 355 EAnimPlayState CSSToStyleMap::mapAnimationPlayState(CSSValue value) |
| 356 { | 356 { |
| 357 if (value->isInitialValue()) | 357 if (value.isInitialValue()) |
| 358 return CSSAnimationData::initialPlayState(); | 358 return CSSAnimationData::initialPlayState(); |
| 359 if (toCSSPrimitiveValue(value)->getValueID() == CSSValuePaused) | 359 if (toCSSPrimitiveValue(value).getValueID() == CSSValuePaused) |
| 360 return AnimPlayStatePaused; | 360 return AnimPlayStatePaused; |
| 361 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueRunning); | 361 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueRunning); |
| 362 return AnimPlayStatePlaying; | 362 return AnimPlayStatePlaying; |
| 363 } | 363 } |
| 364 | 364 |
| 365 CSSTransitionData::TransitionProperty CSSToStyleMap::mapAnimationProperty(CSSVal
ue* value) | 365 CSSTransitionData::TransitionProperty CSSToStyleMap::mapAnimationProperty(CSSVal
ue value) |
| 366 { | 366 { |
| 367 if (value->isInitialValue()) | 367 if (value.isInitialValue()) |
| 368 return CSSTransitionData::initialProperty(); | 368 return CSSTransitionData::initialProperty(); |
| 369 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 369 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 370 if (primitiveValue->isCustomIdent()) | 370 if (primitiveValue.isCustomIdent()) |
| 371 return CSSTransitionData::TransitionProperty(primitiveValue->getStringVa
lue()); | 371 return CSSTransitionData::TransitionProperty(primitiveValue.getStringVal
ue()); |
| 372 if (primitiveValue->getValueID() == CSSValueAll) | 372 if (primitiveValue.getValueID() == CSSValueAll) |
| 373 return CSSTransitionData::TransitionProperty(CSSTransitionData::Transiti
onAll); | 373 return CSSTransitionData::TransitionProperty(CSSTransitionData::Transiti
onAll); |
| 374 if (primitiveValue->getValueID() == CSSValueNone) | 374 if (primitiveValue.getValueID() == CSSValueNone) |
| 375 return CSSTransitionData::TransitionProperty(CSSTransitionData::Transiti
onNone); | 375 return CSSTransitionData::TransitionProperty(CSSTransitionData::Transiti
onNone); |
| 376 return CSSTransitionData::TransitionProperty(primitiveValue->getPropertyID()
); | 376 return CSSTransitionData::TransitionProperty(primitiveValue.getPropertyID())
; |
| 377 } | 377 } |
| 378 | 378 |
| 379 PassRefPtr<TimingFunction> CSSToStyleMap::mapAnimationTimingFunction(CSSValue* v
alue, bool allowStepMiddle) | 379 PassRefPtr<TimingFunction> CSSToStyleMap::mapAnimationTimingFunction(CSSValue va
lue, bool allowStepMiddle) |
| 380 { | 380 { |
| 381 // FIXME: We should probably only call into this function with a valid | 381 // FIXME: We should probably only call into this function with a valid |
| 382 // single timing function value which isn't initial or inherit. We can | 382 // single timing function value which isn't initial or inherit. We can |
| 383 // currently get into here with initial since the parser expands unset | 383 // currently get into here with initial since the parser expands unset |
| 384 // properties in shorthands to initial. | 384 // properties in shorthands to initial. |
| 385 | 385 |
| 386 if (value->isPrimitiveValue()) { | 386 if (value.isPrimitiveValue()) { |
| 387 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 387 CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 388 switch (primitiveValue->getValueID()) { | 388 switch (primitiveValue.getValueID()) { |
| 389 case CSSValueLinear: | 389 case CSSValueLinear: |
| 390 return LinearTimingFunction::shared(); | 390 return LinearTimingFunction::shared(); |
| 391 case CSSValueEase: | 391 case CSSValueEase: |
| 392 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction::
Ease); | 392 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction::
Ease); |
| 393 case CSSValueEaseIn: | 393 case CSSValueEaseIn: |
| 394 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction::
EaseIn); | 394 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction::
EaseIn); |
| 395 case CSSValueEaseOut: | 395 case CSSValueEaseOut: |
| 396 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction::
EaseOut); | 396 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction::
EaseOut); |
| 397 case CSSValueEaseInOut: | 397 case CSSValueEaseInOut: |
| 398 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction::
EaseInOut); | 398 return CubicBezierTimingFunction::preset(CubicBezierTimingFunction::
EaseInOut); |
| 399 case CSSValueStepStart: | 399 case CSSValueStepStart: |
| 400 return StepsTimingFunction::preset(StepsTimingFunction::Start); | 400 return StepsTimingFunction::preset(StepsTimingFunction::Start); |
| 401 case CSSValueStepMiddle: | 401 case CSSValueStepMiddle: |
| 402 if (allowStepMiddle) | 402 if (allowStepMiddle) |
| 403 return StepsTimingFunction::preset(StepsTimingFunction::Middle); | 403 return StepsTimingFunction::preset(StepsTimingFunction::Middle); |
| 404 return CSSTimingData::initialTimingFunction(); | 404 return CSSTimingData::initialTimingFunction(); |
| 405 case CSSValueStepEnd: | 405 case CSSValueStepEnd: |
| 406 return StepsTimingFunction::preset(StepsTimingFunction::End); | 406 return StepsTimingFunction::preset(StepsTimingFunction::End); |
| 407 default: | 407 default: |
| 408 ASSERT_NOT_REACHED(); | 408 ASSERT_NOT_REACHED(); |
| 409 return CSSTimingData::initialTimingFunction(); | 409 return CSSTimingData::initialTimingFunction(); |
| 410 } | 410 } |
| 411 } | 411 } |
| 412 | 412 |
| 413 if (value->isCubicBezierTimingFunctionValue()) { | 413 if (value.isCubicBezierTimingFunctionValue()) { |
| 414 CSSCubicBezierTimingFunctionValue* cubicTimingFunction = toCSSCubicBezie
rTimingFunctionValue(value); | 414 CSSCubicBezierTimingFunctionValue& cubicTimingFunction = toCSSCubicBezie
rTimingFunctionValue(value); |
| 415 return CubicBezierTimingFunction::create(cubicTimingFunction->x1(), cubi
cTimingFunction->y1(), cubicTimingFunction->x2(), cubicTimingFunction->y2()); | 415 return CubicBezierTimingFunction::create(cubicTimingFunction.x1(), cubic
TimingFunction.y1(), cubicTimingFunction.x2(), cubicTimingFunction.y2()); |
| 416 } | 416 } |
| 417 | 417 |
| 418 if (value->isInitialValue()) | 418 if (value.isInitialValue()) |
| 419 return CSSTimingData::initialTimingFunction(); | 419 return CSSTimingData::initialTimingFunction(); |
| 420 | 420 |
| 421 CSSStepsTimingFunctionValue* stepsTimingFunction = toCSSStepsTimingFunctionV
alue(value); | 421 CSSStepsTimingFunctionValue& stepsTimingFunction = toCSSStepsTimingFunctionV
alue(value); |
| 422 if (stepsTimingFunction->stepAtPosition() == StepsTimingFunction::Middle &&
!allowStepMiddle) | 422 if (stepsTimingFunction.stepAtPosition() == StepsTimingFunction::Middle && !
allowStepMiddle) |
| 423 return CSSTimingData::initialTimingFunction(); | 423 return CSSTimingData::initialTimingFunction(); |
| 424 return StepsTimingFunction::create(stepsTimingFunction->numberOfSteps(), ste
psTimingFunction->stepAtPosition()); | 424 return StepsTimingFunction::create(stepsTimingFunction.numberOfSteps(), step
sTimingFunction.stepAtPosition()); |
| 425 } | 425 } |
| 426 | 426 |
| 427 void CSSToStyleMap::mapNinePieceImage(StyleResolverState& state, CSSPropertyID p
roperty, CSSValue* value, NinePieceImage& image) | 427 void CSSToStyleMap::mapNinePieceImage(StyleResolverState& state, CSSPropertyID p
roperty, NullableCSSValue value, NinePieceImage& image) |
| 428 { | 428 { |
| 429 // If we're not a value list, then we are "none" and don't need to alter the
empty image at all. | 429 // If we're not a value list, then we are "none" and don't need to alter the
empty image at all. |
| 430 if (!value || !value->isValueList()) | 430 if (!value || !value->isValueList()) |
| 431 return; | 431 return; |
| 432 | 432 |
| 433 // Retrieve the border image value. | 433 // Retrieve the border image value. |
| 434 CSSValueList* borderImage = toCSSValueList(value); | 434 CSSValueList* borderImage = toCSSValueList(value); |
| 435 | 435 |
| 436 // Set the image (this kicks off the load). | 436 // Set the image (this kicks off the load). |
| 437 CSSPropertyID imageProperty; | 437 CSSPropertyID imageProperty; |
| 438 if (property == CSSPropertyWebkitBorderImage) | 438 if (property == CSSPropertyWebkitBorderImage) |
| 439 imageProperty = CSSPropertyBorderImageSource; | 439 imageProperty = CSSPropertyBorderImageSource; |
| 440 else if (property == CSSPropertyWebkitMaskBoxImage) | 440 else if (property == CSSPropertyWebkitMaskBoxImage) |
| 441 imageProperty = CSSPropertyWebkitMaskBoxImageSource; | 441 imageProperty = CSSPropertyWebkitMaskBoxImageSource; |
| 442 else | 442 else |
| 443 imageProperty = property; | 443 imageProperty = property; |
| 444 | 444 |
| 445 for (unsigned i = 0 ; i < borderImage->length() ; ++i) { | 445 for (unsigned i = 0 ; i < borderImage->length() ; ++i) { |
| 446 CSSValue* current = borderImage->item(i); | 446 CSSValue current = borderImage->item(i); |
| 447 | 447 |
| 448 if (current->isImageValue() || current->isImageGeneratorValue() || curre
nt->isImageSetValue()) | 448 if (current.isImageValue() || current.isImageGeneratorValue() || current
.isImageSetValue()) { |
| 449 image.setImage(state.styleImage(imageProperty, current)); | 449 image.setImage(state.styleImage(imageProperty, current)); |
| 450 else if (current->isBorderImageSliceValue()) | 450 } else if (current.isBorderImageSliceValue()) { |
| 451 mapNinePieceImageSlice(state, current, image); | 451 mapNinePieceImageSlice(state, current, image); |
| 452 else if (current->isValueList()) { | 452 } else if (current.isValueList()) { |
| 453 CSSValueList* slashList = toCSSValueList(current); | 453 CSSValueList& slashList = toCSSValueList(current); |
| 454 size_t length = slashList->length(); | 454 size_t length = slashList.length(); |
| 455 // Map in the image slices. | 455 // Map in the image slices. |
| 456 if (length && slashList->item(0)->isBorderImageSliceValue()) | 456 if (length && slashList.item(0).isBorderImageSliceValue()) |
| 457 mapNinePieceImageSlice(state, slashList->item(0), image); | 457 mapNinePieceImageSlice(state, slashList.item(0), image); |
| 458 | 458 |
| 459 // Map in the border slices. | 459 // Map in the border slices. |
| 460 if (length > 1) | 460 if (length > 1) |
| 461 image.setBorderSlices(mapNinePieceImageQuad(state, slashList->it
em(1))); | 461 image.setBorderSlices(mapNinePieceImageQuad(state, slashList.ite
m(1))); |
| 462 | 462 |
| 463 // Map in the outset. | 463 // Map in the outset. |
| 464 if (length > 2) | 464 if (length > 2) |
| 465 image.setOutset(mapNinePieceImageQuad(state, slashList->item(2))
); | 465 image.setOutset(mapNinePieceImageQuad(state, slashList.item(2)))
; |
| 466 } else if (current->isPrimitiveValue()) { | 466 } else if (current.isPrimitiveValue()) { |
| 467 // Set the appropriate rules for stretch/round/repeat of the slices. | 467 // Set the appropriate rules for stretch/round/repeat of the slices. |
| 468 mapNinePieceImageRepeat(state, current, image); | 468 mapNinePieceImageRepeat(state, current, image); |
| 469 } | 469 } |
| 470 } | 470 } |
| 471 | 471 |
| 472 if (property == CSSPropertyWebkitBorderImage) { | 472 if (property == CSSPropertyWebkitBorderImage) { |
| 473 // We have to preserve the legacy behavior of -webkit-border-image and m
ake the border slices | 473 // We have to preserve the legacy behavior of -webkit-border-image and m
ake the border slices |
| 474 // also set the border widths. We don't need to worry about percentages,
since we don't even support | 474 // also set the border widths. We don't need to worry about percentages,
since we don't even support |
| 475 // those on real borders yet. | 475 // those on real borders yet. |
| 476 if (image.borderSlices().top().isLength() && image.borderSlices().top().
length().isFixed()) | 476 if (image.borderSlices().top().isLength() && image.borderSlices().top().
length().isFixed()) |
| 477 state.style()->setBorderTopWidth(image.borderSlices().top().length()
.value()); | 477 state.style()->setBorderTopWidth(image.borderSlices().top().length()
.value()); |
| 478 if (image.borderSlices().right().isLength() && image.borderSlices().righ
t().length().isFixed()) | 478 if (image.borderSlices().right().isLength() && image.borderSlices().righ
t().length().isFixed()) |
| 479 state.style()->setBorderRightWidth(image.borderSlices().right().leng
th().value()); | 479 state.style()->setBorderRightWidth(image.borderSlices().right().leng
th().value()); |
| 480 if (image.borderSlices().bottom().isLength() && image.borderSlices().bot
tom().length().isFixed()) | 480 if (image.borderSlices().bottom().isLength() && image.borderSlices().bot
tom().length().isFixed()) |
| 481 state.style()->setBorderBottomWidth(image.borderSlices().bottom().le
ngth().value()); | 481 state.style()->setBorderBottomWidth(image.borderSlices().bottom().le
ngth().value()); |
| 482 if (image.borderSlices().left().isLength() && image.borderSlices().left(
).length().isFixed()) | 482 if (image.borderSlices().left().isLength() && image.borderSlices().left(
).length().isFixed()) |
| 483 state.style()->setBorderLeftWidth(image.borderSlices().left().length
().value()); | 483 state.style()->setBorderLeftWidth(image.borderSlices().left().length
().value()); |
| 484 } | 484 } |
| 485 } | 485 } |
| 486 | 486 |
| 487 void CSSToStyleMap::mapNinePieceImageSlice(StyleResolverState&, CSSValue* value,
NinePieceImage& image) | 487 void CSSToStyleMap::mapNinePieceImageSlice(StyleResolverState&, NullableCSSValue
value, NinePieceImage& image) |
| 488 { | 488 { |
| 489 if (!value || !value->isBorderImageSliceValue()) | 489 if (!value || !value->isBorderImageSliceValue()) |
| 490 return; | 490 return; |
| 491 | 491 |
| 492 // Retrieve the border image value. | 492 // Retrieve the border image value. |
| 493 CSSBorderImageSliceValue* borderImageSlice = toCSSBorderImageSliceValue(valu
e); | 493 CSSBorderImageSliceValue* borderImageSlice = toCSSBorderImageSliceValue(valu
e); |
| 494 | 494 |
| 495 // Set up a length box to represent our image slices. | 495 // Set up a length box to represent our image slices. |
| 496 LengthBox box; | 496 LengthBox box; |
| 497 Quad* slices = borderImageSlice->slices(); | 497 Quad* slices = borderImageSlice->slices(); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 521 { | 521 { |
| 522 if (value.isNumber()) | 522 if (value.isNumber()) |
| 523 return value.getDoubleValue(); | 523 return value.getDoubleValue(); |
| 524 if (value.isPercentage()) | 524 if (value.isPercentage()) |
| 525 return Length(value.getDoubleValue(), Percent); | 525 return Length(value.getDoubleValue(), Percent); |
| 526 if (value.getValueID() != CSSValueAuto) | 526 if (value.getValueID() != CSSValueAuto) |
| 527 return value.computeLength<Length>(conversionData); | 527 return value.computeLength<Length>(conversionData); |
| 528 return Length(Auto); | 528 return Length(Auto); |
| 529 } | 529 } |
| 530 | 530 |
| 531 BorderImageLengthBox CSSToStyleMap::mapNinePieceImageQuad(StyleResolverState& st
ate, CSSValue* value) | 531 BorderImageLengthBox CSSToStyleMap::mapNinePieceImageQuad(StyleResolverState& st
ate, NullableCSSValue value) |
| 532 { | 532 { |
| 533 if (!value || !value->isPrimitiveValue()) | 533 if (!value || !value->isPrimitiveValue()) |
| 534 return BorderImageLengthBox(Length(Auto)); | 534 return BorderImageLengthBox(Length(Auto)); |
| 535 | 535 |
| 536 Quad* slices = toCSSPrimitiveValue(value)->getQuadValue(); | 536 Quad* slices = toCSSPrimitiveValue(value)->getQuadValue(); |
| 537 | 537 |
| 538 // Set up a border image length box to represent our image slices. | 538 // Set up a border image length box to represent our image slices. |
| 539 return BorderImageLengthBox( | 539 return BorderImageLengthBox( |
| 540 toBorderImageLength(*slices->top(), state.cssToLengthConversionData()), | 540 toBorderImageLength(*slices->top(), state.cssToLengthConversionData()), |
| 541 toBorderImageLength(*slices->right(), state.cssToLengthConversionData())
, | 541 toBorderImageLength(*slices->right(), state.cssToLengthConversionData())
, |
| 542 toBorderImageLength(*slices->bottom(), state.cssToLengthConversionData()
), | 542 toBorderImageLength(*slices->bottom(), state.cssToLengthConversionData()
), |
| 543 toBorderImageLength(*slices->left(), state.cssToLengthConversionData()))
; | 543 toBorderImageLength(*slices->left(), state.cssToLengthConversionData()))
; |
| 544 } | 544 } |
| 545 | 545 |
| 546 void CSSToStyleMap::mapNinePieceImageRepeat(StyleResolverState&, CSSValue* value
, NinePieceImage& image) | 546 void CSSToStyleMap::mapNinePieceImageRepeat(StyleResolverState&, NullableCSSValu
e value, NinePieceImage& image) |
| 547 { | 547 { |
| 548 if (!value || !value->isPrimitiveValue()) | 548 if (!value || !value->isPrimitiveValue()) |
| 549 return; | 549 return; |
| 550 | 550 |
| 551 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 551 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); |
| 552 Pair* pair = primitiveValue->getPairValue(); | 552 Pair* pair = primitiveValue->getPairValue(); |
| 553 if (!pair || !pair->first() || !pair->second()) | 553 if (!pair || !pair->first() || !pair->second()) |
| 554 return; | 554 return; |
| 555 | 555 |
| 556 CSSValueID firstIdentifier = pair->first()->getValueID(); | 556 CSSValueID firstIdentifier = pair->first()->getValueID(); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 585 verticalRule = SpaceImageRule; | 585 verticalRule = SpaceImageRule; |
| 586 break; | 586 break; |
| 587 default: // CSSValueRepeat | 587 default: // CSSValueRepeat |
| 588 verticalRule = RepeatImageRule; | 588 verticalRule = RepeatImageRule; |
| 589 break; | 589 break; |
| 590 } | 590 } |
| 591 image.setVerticalRule(verticalRule); | 591 image.setVerticalRule(verticalRule); |
| 592 } | 592 } |
| 593 | 593 |
| 594 }; | 594 }; |
| OLD | NEW |