| 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 namespace blink { | 44 namespace blink { |
| 45 | 45 |
| 46 void CSSToStyleMap::mapFillAttachment(StyleResolverState&, | 46 void CSSToStyleMap::mapFillAttachment(StyleResolverState&, |
| 47 FillLayer* layer, | 47 FillLayer* layer, |
| 48 const CSSValue& value) { | 48 const CSSValue& value) { |
| 49 if (value.isInitialValue()) { | 49 if (value.isInitialValue()) { |
| 50 layer->setAttachment(FillLayer::initialFillAttachment(layer->type())); | 50 layer->setAttachment(FillLayer::initialFillAttachment(layer->type())); |
| 51 return; | 51 return; |
| 52 } | 52 } |
| 53 | 53 |
| 54 if (!value.isPrimitiveValue()) | 54 if (!value.isIdentifierValue()) |
| 55 return; | 55 return; |
| 56 | 56 |
| 57 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 57 const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(value); |
| 58 switch (primitiveValue.getValueID()) { | 58 switch (identifierValue.getValueID()) { |
| 59 case CSSValueFixed: | 59 case CSSValueFixed: |
| 60 layer->setAttachment(FixedBackgroundAttachment); | 60 layer->setAttachment(FixedBackgroundAttachment); |
| 61 break; | 61 break; |
| 62 case CSSValueScroll: | 62 case CSSValueScroll: |
| 63 layer->setAttachment(ScrollBackgroundAttachment); | 63 layer->setAttachment(ScrollBackgroundAttachment); |
| 64 break; | 64 break; |
| 65 case CSSValueLocal: | 65 case CSSValueLocal: |
| 66 layer->setAttachment(LocalBackgroundAttachment); | 66 layer->setAttachment(LocalBackgroundAttachment); |
| 67 break; | 67 break; |
| 68 default: | 68 default: |
| 69 return; | 69 return; |
| 70 } | 70 } |
| 71 } | 71 } |
| 72 | 72 |
| 73 void CSSToStyleMap::mapFillClip(StyleResolverState&, | 73 void CSSToStyleMap::mapFillClip(StyleResolverState&, |
| 74 FillLayer* layer, | 74 FillLayer* layer, |
| 75 const CSSValue& value) { | 75 const CSSValue& value) { |
| 76 if (value.isInitialValue()) { | 76 if (value.isInitialValue()) { |
| 77 layer->setClip(FillLayer::initialFillClip(layer->type())); | 77 layer->setClip(FillLayer::initialFillClip(layer->type())); |
| 78 return; | 78 return; |
| 79 } | 79 } |
| 80 | 80 |
| 81 if (!value.isPrimitiveValue()) | 81 if (!value.isIdentifierValue()) |
| 82 return; | 82 return; |
| 83 | 83 |
| 84 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 84 const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(value); |
| 85 layer->setClip(primitiveValue.convertTo<EFillBox>()); | 85 layer->setClip(identifierValue.convertTo<EFillBox>()); |
| 86 } | 86 } |
| 87 | 87 |
| 88 void CSSToStyleMap::mapFillComposite(StyleResolverState&, | 88 void CSSToStyleMap::mapFillComposite(StyleResolverState&, |
| 89 FillLayer* layer, | 89 FillLayer* layer, |
| 90 const CSSValue& value) { | 90 const CSSValue& value) { |
| 91 if (value.isInitialValue()) { | 91 if (value.isInitialValue()) { |
| 92 layer->setComposite(FillLayer::initialFillComposite(layer->type())); | 92 layer->setComposite(FillLayer::initialFillComposite(layer->type())); |
| 93 return; | 93 return; |
| 94 } | 94 } |
| 95 | 95 |
| 96 if (!value.isPrimitiveValue()) | 96 if (!value.isIdentifierValue()) |
| 97 return; | 97 return; |
| 98 | 98 |
| 99 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 99 const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(value); |
| 100 layer->setComposite(primitiveValue.convertTo<CompositeOperator>()); | 100 layer->setComposite(identifierValue.convertTo<CompositeOperator>()); |
| 101 } | 101 } |
| 102 | 102 |
| 103 void CSSToStyleMap::mapFillBlendMode(StyleResolverState&, | 103 void CSSToStyleMap::mapFillBlendMode(StyleResolverState&, |
| 104 FillLayer* layer, | 104 FillLayer* layer, |
| 105 const CSSValue& value) { | 105 const CSSValue& value) { |
| 106 if (value.isInitialValue()) { | 106 if (value.isInitialValue()) { |
| 107 layer->setBlendMode(FillLayer::initialFillBlendMode(layer->type())); | 107 layer->setBlendMode(FillLayer::initialFillBlendMode(layer->type())); |
| 108 return; | 108 return; |
| 109 } | 109 } |
| 110 | 110 |
| 111 if (!value.isPrimitiveValue()) | 111 if (!value.isIdentifierValue()) |
| 112 return; | 112 return; |
| 113 | 113 |
| 114 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 114 const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(value); |
| 115 layer->setBlendMode(primitiveValue.convertTo<WebBlendMode>()); | 115 layer->setBlendMode(identifierValue.convertTo<WebBlendMode>()); |
| 116 } | 116 } |
| 117 | 117 |
| 118 void CSSToStyleMap::mapFillOrigin(StyleResolverState&, | 118 void CSSToStyleMap::mapFillOrigin(StyleResolverState&, |
| 119 FillLayer* layer, | 119 FillLayer* layer, |
| 120 const CSSValue& value) { | 120 const CSSValue& value) { |
| 121 if (value.isInitialValue()) { | 121 if (value.isInitialValue()) { |
| 122 layer->setOrigin(FillLayer::initialFillOrigin(layer->type())); | 122 layer->setOrigin(FillLayer::initialFillOrigin(layer->type())); |
| 123 return; | 123 return; |
| 124 } | 124 } |
| 125 | 125 |
| 126 if (!value.isPrimitiveValue()) | 126 if (!value.isIdentifierValue()) |
| 127 return; | 127 return; |
| 128 | 128 |
| 129 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 129 const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(value); |
| 130 layer->setOrigin(primitiveValue.convertTo<EFillBox>()); | 130 layer->setOrigin(identifierValue.convertTo<EFillBox>()); |
| 131 } | 131 } |
| 132 | 132 |
| 133 void CSSToStyleMap::mapFillImage(StyleResolverState& state, | 133 void CSSToStyleMap::mapFillImage(StyleResolverState& state, |
| 134 FillLayer* layer, | 134 FillLayer* layer, |
| 135 const CSSValue& value) { | 135 const CSSValue& value) { |
| 136 if (value.isInitialValue()) { | 136 if (value.isInitialValue()) { |
| 137 layer->setImage(FillLayer::initialFillImage(layer->type())); | 137 layer->setImage(FillLayer::initialFillImage(layer->type())); |
| 138 return; | 138 return; |
| 139 } | 139 } |
| 140 | 140 |
| 141 CSSPropertyID property = layer->type() == BackgroundFillLayer | 141 CSSPropertyID property = layer->type() == BackgroundFillLayer |
| 142 ? CSSPropertyBackgroundImage | 142 ? CSSPropertyBackgroundImage |
| 143 : CSSPropertyWebkitMaskImage; | 143 : CSSPropertyWebkitMaskImage; |
| 144 layer->setImage(state.styleImage(property, value)); | 144 layer->setImage(state.styleImage(property, value)); |
| 145 } | 145 } |
| 146 | 146 |
| 147 void CSSToStyleMap::mapFillRepeatX(StyleResolverState&, | 147 void CSSToStyleMap::mapFillRepeatX(StyleResolverState&, |
| 148 FillLayer* layer, | 148 FillLayer* layer, |
| 149 const CSSValue& value) { | 149 const CSSValue& value) { |
| 150 if (value.isInitialValue()) { | 150 if (value.isInitialValue()) { |
| 151 layer->setRepeatX(FillLayer::initialFillRepeatX(layer->type())); | 151 layer->setRepeatX(FillLayer::initialFillRepeatX(layer->type())); |
| 152 return; | 152 return; |
| 153 } | 153 } |
| 154 | 154 |
| 155 if (!value.isPrimitiveValue()) | 155 if (!value.isIdentifierValue()) |
| 156 return; | 156 return; |
| 157 | 157 |
| 158 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 158 const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(value); |
| 159 layer->setRepeatX(primitiveValue.convertTo<EFillRepeat>()); | 159 layer->setRepeatX(identifierValue.convertTo<EFillRepeat>()); |
| 160 } | 160 } |
| 161 | 161 |
| 162 void CSSToStyleMap::mapFillRepeatY(StyleResolverState&, | 162 void CSSToStyleMap::mapFillRepeatY(StyleResolverState&, |
| 163 FillLayer* layer, | 163 FillLayer* layer, |
| 164 const CSSValue& value) { | 164 const CSSValue& value) { |
| 165 if (value.isInitialValue()) { | 165 if (value.isInitialValue()) { |
| 166 layer->setRepeatY(FillLayer::initialFillRepeatY(layer->type())); | 166 layer->setRepeatY(FillLayer::initialFillRepeatY(layer->type())); |
| 167 return; | 167 return; |
| 168 } | 168 } |
| 169 | 169 |
| 170 if (!value.isPrimitiveValue()) | 170 if (!value.isIdentifierValue()) |
| 171 return; | 171 return; |
| 172 | 172 |
| 173 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 173 const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(value); |
| 174 layer->setRepeatY(primitiveValue.convertTo<EFillRepeat>()); | 174 layer->setRepeatY(identifierValue.convertTo<EFillRepeat>()); |
| 175 } | 175 } |
| 176 | 176 |
| 177 void CSSToStyleMap::mapFillSize(StyleResolverState& state, | 177 void CSSToStyleMap::mapFillSize(StyleResolverState& state, |
| 178 FillLayer* layer, | 178 FillLayer* layer, |
| 179 const CSSValue& value) { | 179 const CSSValue& value) { |
| 180 if (value.isInitialValue()) { | 180 if (value.isInitialValue()) { |
| 181 layer->setSizeType(FillLayer::initialFillSizeType(layer->type())); | 181 layer->setSizeType(FillLayer::initialFillSizeType(layer->type())); |
| 182 layer->setSizeLength(FillLayer::initialFillSizeLength(layer->type())); | 182 layer->setSizeLength(FillLayer::initialFillSizeLength(layer->type())); |
| 183 return; | 183 return; |
| 184 } | 184 } |
| 185 | 185 |
| 186 if (!value.isPrimitiveValue() && !value.isValuePair()) | 186 if (!value.isIdentifierValue() && !value.isPrimitiveValue() && |
| 187 !value.isValuePair()) |
| 187 return; | 188 return; |
| 188 | 189 |
| 189 if (value.isPrimitiveValue() && | 190 if (value.isIdentifierValue() && |
| 190 toCSSPrimitiveValue(value).getValueID() == CSSValueContain) | 191 toCSSIdentifierValue(value).getValueID() == CSSValueContain) |
| 191 layer->setSizeType(Contain); | 192 layer->setSizeType(Contain); |
| 192 else if (value.isPrimitiveValue() && | 193 else if (value.isIdentifierValue() && |
| 193 toCSSPrimitiveValue(value).getValueID() == CSSValueCover) | 194 toCSSIdentifierValue(value).getValueID() == CSSValueCover) |
| 194 layer->setSizeType(Cover); | 195 layer->setSizeType(Cover); |
| 195 else | 196 else |
| 196 layer->setSizeType(SizeLength); | 197 layer->setSizeType(SizeLength); |
| 197 | 198 |
| 198 LengthSize b = FillLayer::initialFillSizeLength(layer->type()); | 199 LengthSize b = FillLayer::initialFillSizeLength(layer->type()); |
| 199 | 200 |
| 200 if (value.isPrimitiveValue() && | 201 if (value.isIdentifierValue() && |
| 201 (toCSSPrimitiveValue(value).getValueID() == CSSValueContain || | 202 (toCSSIdentifierValue(value).getValueID() == CSSValueContain || |
| 202 toCSSPrimitiveValue(value).getValueID() == CSSValueCover)) { | 203 toCSSIdentifierValue(value).getValueID() == CSSValueCover)) { |
| 203 layer->setSizeLength(b); | 204 layer->setSizeLength(b); |
| 204 return; | 205 return; |
| 205 } | 206 } |
| 206 | 207 |
| 207 Length firstLength; | 208 Length firstLength; |
| 208 Length secondLength; | 209 Length secondLength; |
| 209 | 210 |
| 210 if (value.isValuePair()) { | 211 if (value.isValuePair()) { |
| 211 const CSSValuePair& pair = toCSSValuePair(value); | 212 const CSSValuePair& pair = toCSSValuePair(value); |
| 212 firstLength = | 213 firstLength = |
| 213 StyleBuilderConverter::convertLengthOrAuto(state, pair.first()); | 214 StyleBuilderConverter::convertLengthOrAuto(state, pair.first()); |
| 214 secondLength = | 215 secondLength = |
| 215 StyleBuilderConverter::convertLengthOrAuto(state, pair.second()); | 216 StyleBuilderConverter::convertLengthOrAuto(state, pair.second()); |
| 216 } else { | 217 } else { |
| 217 ASSERT(value.isPrimitiveValue()); | 218 DCHECK(value.isPrimitiveValue() || value.isIdentifierValue()); |
| 218 firstLength = StyleBuilderConverter::convertLengthOrAuto(state, value); | 219 firstLength = StyleBuilderConverter::convertLengthOrAuto(state, value); |
| 219 secondLength = Length(); | 220 secondLength = Length(); |
| 220 } | 221 } |
| 221 | 222 |
| 222 b.setWidth(firstLength); | 223 b.setWidth(firstLength); |
| 223 b.setHeight(secondLength); | 224 b.setHeight(secondLength); |
| 224 layer->setSizeLength(b); | 225 layer->setSizeLength(b); |
| 225 } | 226 } |
| 226 | 227 |
| 227 void CSSToStyleMap::mapFillXPosition(StyleResolverState& state, | 228 void CSSToStyleMap::mapFillXPosition(StyleResolverState& state, |
| 228 FillLayer* layer, | 229 FillLayer* layer, |
| 229 const CSSValue& value) { | 230 const CSSValue& value) { |
| 230 if (value.isInitialValue()) { | 231 if (value.isInitialValue()) { |
| 231 layer->setXPosition(FillLayer::initialFillXPosition(layer->type())); | 232 layer->setXPosition(FillLayer::initialFillXPosition(layer->type())); |
| 232 return; | 233 return; |
| 233 } | 234 } |
| 234 | 235 |
| 235 if (!value.isPrimitiveValue() && !value.isValuePair()) | 236 if (!value.isIdentifierValue() && !value.isPrimitiveValue() && |
| 237 !value.isValuePair()) |
| 236 return; | 238 return; |
| 237 | 239 |
| 238 Length length; | 240 Length length; |
| 239 if (value.isValuePair()) | 241 if (value.isValuePair()) |
| 240 length = toCSSPrimitiveValue(toCSSValuePair(value).second()) | 242 length = toCSSPrimitiveValue(toCSSValuePair(value).second()) |
| 241 .convertToLength(state.cssToLengthConversionData()); | 243 .convertToLength(state.cssToLengthConversionData()); |
| 242 else | 244 else |
| 243 length = StyleBuilderConverter::convertPositionLength<CSSValueLeft, | 245 length = StyleBuilderConverter::convertPositionLength<CSSValueLeft, |
| 244 CSSValueRight>( | 246 CSSValueRight>(state, |
| 245 state, toCSSPrimitiveValue(value)); | 247 value); |
| 246 | 248 |
| 247 layer->setXPosition(length); | 249 layer->setXPosition(length); |
| 248 if (value.isValuePair()) | 250 if (value.isValuePair()) |
| 249 layer->setBackgroundXOrigin( | 251 layer->setBackgroundXOrigin( |
| 250 toCSSPrimitiveValue(toCSSValuePair(value).first()) | 252 toCSSIdentifierValue(toCSSValuePair(value).first()) |
| 251 .convertTo<BackgroundEdgeOrigin>()); | 253 .convertTo<BackgroundEdgeOrigin>()); |
| 252 } | 254 } |
| 253 | 255 |
| 254 void CSSToStyleMap::mapFillYPosition(StyleResolverState& state, | 256 void CSSToStyleMap::mapFillYPosition(StyleResolverState& state, |
| 255 FillLayer* layer, | 257 FillLayer* layer, |
| 256 const CSSValue& value) { | 258 const CSSValue& value) { |
| 257 if (value.isInitialValue()) { | 259 if (value.isInitialValue()) { |
| 258 layer->setYPosition(FillLayer::initialFillYPosition(layer->type())); | 260 layer->setYPosition(FillLayer::initialFillYPosition(layer->type())); |
| 259 return; | 261 return; |
| 260 } | 262 } |
| 261 | 263 |
| 262 if (!value.isPrimitiveValue() && !value.isValuePair()) | 264 if (!value.isIdentifierValue() && !value.isPrimitiveValue() && |
| 265 !value.isValuePair()) |
| 263 return; | 266 return; |
| 264 | 267 |
| 265 Length length; | 268 Length length; |
| 266 if (value.isValuePair()) | 269 if (value.isValuePair()) |
| 267 length = toCSSPrimitiveValue(toCSSValuePair(value).second()) | 270 length = toCSSPrimitiveValue(toCSSValuePair(value).second()) |
| 268 .convertToLength(state.cssToLengthConversionData()); | 271 .convertToLength(state.cssToLengthConversionData()); |
| 269 else | 272 else |
| 270 length = StyleBuilderConverter::convertPositionLength<CSSValueTop, | 273 length = StyleBuilderConverter::convertPositionLength<CSSValueTop, |
| 271 CSSValueBottom>( | 274 CSSValueBottom>( |
| 272 state, toCSSPrimitiveValue(value)); | 275 state, value); |
| 273 | 276 |
| 274 layer->setYPosition(length); | 277 layer->setYPosition(length); |
| 275 if (value.isValuePair()) | 278 if (value.isValuePair()) |
| 276 layer->setBackgroundYOrigin( | 279 layer->setBackgroundYOrigin( |
| 277 toCSSPrimitiveValue(toCSSValuePair(value).first()) | 280 toCSSIdentifierValue(toCSSValuePair(value).first()) |
| 278 .convertTo<BackgroundEdgeOrigin>()); | 281 .convertTo<BackgroundEdgeOrigin>()); |
| 279 } | 282 } |
| 280 | 283 |
| 281 void CSSToStyleMap::mapFillMaskSourceType(StyleResolverState&, | 284 void CSSToStyleMap::mapFillMaskSourceType(StyleResolverState&, |
| 282 FillLayer* layer, | 285 FillLayer* layer, |
| 283 const CSSValue& value) { | 286 const CSSValue& value) { |
| 284 EMaskSourceType type = FillLayer::initialFillMaskSourceType(layer->type()); | 287 EMaskSourceType type = FillLayer::initialFillMaskSourceType(layer->type()); |
| 285 if (value.isInitialValue()) { | 288 if (value.isInitialValue()) { |
| 286 layer->setMaskSourceType(type); | 289 layer->setMaskSourceType(type); |
| 287 return; | 290 return; |
| 288 } | 291 } |
| 289 | 292 |
| 290 if (!value.isPrimitiveValue()) | 293 if (!value.isIdentifierValue()) |
| 291 return; | 294 return; |
| 292 | 295 |
| 293 switch (toCSSPrimitiveValue(value).getValueID()) { | 296 switch (toCSSIdentifierValue(value).getValueID()) { |
| 294 case CSSValueAlpha: | 297 case CSSValueAlpha: |
| 295 type = MaskAlpha; | 298 type = MaskAlpha; |
| 296 break; | 299 break; |
| 297 case CSSValueLuminance: | 300 case CSSValueLuminance: |
| 298 type = MaskLuminance; | 301 type = MaskLuminance; |
| 299 break; | 302 break; |
| 300 case CSSValueAuto: | 303 case CSSValueAuto: |
| 301 break; | 304 break; |
| 302 default: | 305 default: |
| 303 ASSERT_NOT_REACHED(); | 306 ASSERT_NOT_REACHED(); |
| 304 } | 307 } |
| 305 | 308 |
| 306 layer->setMaskSourceType(type); | 309 layer->setMaskSourceType(type); |
| 307 } | 310 } |
| 308 | 311 |
| 309 double CSSToStyleMap::mapAnimationDelay(const CSSValue& value) { | 312 double CSSToStyleMap::mapAnimationDelay(const CSSValue& value) { |
| 310 if (value.isInitialValue()) | 313 if (value.isInitialValue()) |
| 311 return CSSTimingData::initialDelay(); | 314 return CSSTimingData::initialDelay(); |
| 312 return toCSSPrimitiveValue(value).computeSeconds(); | 315 return toCSSPrimitiveValue(value).computeSeconds(); |
| 313 } | 316 } |
| 314 | 317 |
| 315 Timing::PlaybackDirection CSSToStyleMap::mapAnimationDirection( | 318 Timing::PlaybackDirection CSSToStyleMap::mapAnimationDirection( |
| 316 const CSSValue& value) { | 319 const CSSValue& value) { |
| 317 if (value.isInitialValue()) | 320 if (value.isInitialValue()) |
| 318 return CSSAnimationData::initialDirection(); | 321 return CSSAnimationData::initialDirection(); |
| 319 | 322 |
| 320 switch (toCSSPrimitiveValue(value).getValueID()) { | 323 switch (toCSSIdentifierValue(value).getValueID()) { |
| 321 case CSSValueNormal: | 324 case CSSValueNormal: |
| 322 return Timing::PlaybackDirection::NORMAL; | 325 return Timing::PlaybackDirection::NORMAL; |
| 323 case CSSValueAlternate: | 326 case CSSValueAlternate: |
| 324 return Timing::PlaybackDirection::ALTERNATE_NORMAL; | 327 return Timing::PlaybackDirection::ALTERNATE_NORMAL; |
| 325 case CSSValueReverse: | 328 case CSSValueReverse: |
| 326 return Timing::PlaybackDirection::REVERSE; | 329 return Timing::PlaybackDirection::REVERSE; |
| 327 case CSSValueAlternateReverse: | 330 case CSSValueAlternateReverse: |
| 328 return Timing::PlaybackDirection::ALTERNATE_REVERSE; | 331 return Timing::PlaybackDirection::ALTERNATE_REVERSE; |
| 329 default: | 332 default: |
| 330 ASSERT_NOT_REACHED(); | 333 ASSERT_NOT_REACHED(); |
| 331 return CSSAnimationData::initialDirection(); | 334 return CSSAnimationData::initialDirection(); |
| 332 } | 335 } |
| 333 } | 336 } |
| 334 | 337 |
| 335 double CSSToStyleMap::mapAnimationDuration(const CSSValue& value) { | 338 double CSSToStyleMap::mapAnimationDuration(const CSSValue& value) { |
| 336 if (value.isInitialValue()) | 339 if (value.isInitialValue()) |
| 337 return CSSTimingData::initialDuration(); | 340 return CSSTimingData::initialDuration(); |
| 338 return toCSSPrimitiveValue(value).computeSeconds(); | 341 return toCSSPrimitiveValue(value).computeSeconds(); |
| 339 } | 342 } |
| 340 | 343 |
| 341 Timing::FillMode CSSToStyleMap::mapAnimationFillMode(const CSSValue& value) { | 344 Timing::FillMode CSSToStyleMap::mapAnimationFillMode(const CSSValue& value) { |
| 342 if (value.isInitialValue()) | 345 if (value.isInitialValue()) |
| 343 return CSSAnimationData::initialFillMode(); | 346 return CSSAnimationData::initialFillMode(); |
| 344 | 347 |
| 345 switch (toCSSPrimitiveValue(value).getValueID()) { | 348 switch (toCSSIdentifierValue(value).getValueID()) { |
| 346 case CSSValueNone: | 349 case CSSValueNone: |
| 347 return Timing::FillMode::NONE; | 350 return Timing::FillMode::NONE; |
| 348 case CSSValueForwards: | 351 case CSSValueForwards: |
| 349 return Timing::FillMode::FORWARDS; | 352 return Timing::FillMode::FORWARDS; |
| 350 case CSSValueBackwards: | 353 case CSSValueBackwards: |
| 351 return Timing::FillMode::BACKWARDS; | 354 return Timing::FillMode::BACKWARDS; |
| 352 case CSSValueBoth: | 355 case CSSValueBoth: |
| 353 return Timing::FillMode::BOTH; | 356 return Timing::FillMode::BOTH; |
| 354 default: | 357 default: |
| 355 ASSERT_NOT_REACHED(); | 358 ASSERT_NOT_REACHED(); |
| 356 return CSSAnimationData::initialFillMode(); | 359 return CSSAnimationData::initialFillMode(); |
| 357 } | 360 } |
| 358 } | 361 } |
| 359 | 362 |
| 360 double CSSToStyleMap::mapAnimationIterationCount(const CSSValue& value) { | 363 double CSSToStyleMap::mapAnimationIterationCount(const CSSValue& value) { |
| 361 if (value.isInitialValue()) | 364 if (value.isInitialValue()) |
| 362 return CSSAnimationData::initialIterationCount(); | 365 return CSSAnimationData::initialIterationCount(); |
| 363 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 366 if (value.isIdentifierValue() && |
| 364 if (primitiveValue.getValueID() == CSSValueInfinite) | 367 toCSSIdentifierValue(value).getValueID() == CSSValueInfinite) |
| 365 return std::numeric_limits<double>::infinity(); | 368 return std::numeric_limits<double>::infinity(); |
| 366 return primitiveValue.getFloatValue(); | 369 return toCSSPrimitiveValue(value).getFloatValue(); |
| 367 } | 370 } |
| 368 | 371 |
| 369 AtomicString CSSToStyleMap::mapAnimationName(const CSSValue& value) { | 372 AtomicString CSSToStyleMap::mapAnimationName(const CSSValue& value) { |
| 370 if (value.isInitialValue()) | 373 if (value.isInitialValue()) |
| 371 return CSSAnimationData::initialName(); | 374 return CSSAnimationData::initialName(); |
| 372 if (value.isCustomIdentValue()) | 375 if (value.isCustomIdentValue()) |
| 373 return AtomicString(toCSSCustomIdentValue(value).value()); | 376 return AtomicString(toCSSCustomIdentValue(value).value()); |
| 374 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); | 377 DCHECK_EQ(toCSSIdentifierValue(value).getValueID(), CSSValueNone); |
| 375 return CSSAnimationData::initialName(); | 378 return CSSAnimationData::initialName(); |
| 376 } | 379 } |
| 377 | 380 |
| 378 EAnimPlayState CSSToStyleMap::mapAnimationPlayState(const CSSValue& value) { | 381 EAnimPlayState CSSToStyleMap::mapAnimationPlayState(const CSSValue& value) { |
| 379 if (value.isInitialValue()) | 382 if (value.isInitialValue()) |
| 380 return CSSAnimationData::initialPlayState(); | 383 return CSSAnimationData::initialPlayState(); |
| 381 if (toCSSPrimitiveValue(value).getValueID() == CSSValuePaused) | 384 if (toCSSIdentifierValue(value).getValueID() == CSSValuePaused) |
| 382 return AnimPlayStatePaused; | 385 return AnimPlayStatePaused; |
| 383 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueRunning); | 386 DCHECK_EQ(toCSSIdentifierValue(value).getValueID(), CSSValueRunning); |
| 384 return AnimPlayStatePlaying; | 387 return AnimPlayStatePlaying; |
| 385 } | 388 } |
| 386 | 389 |
| 387 CSSTransitionData::TransitionProperty CSSToStyleMap::mapAnimationProperty( | 390 CSSTransitionData::TransitionProperty CSSToStyleMap::mapAnimationProperty( |
| 388 const CSSValue& value) { | 391 const CSSValue& value) { |
| 389 if (value.isInitialValue()) | 392 if (value.isInitialValue()) |
| 390 return CSSTransitionData::initialProperty(); | 393 return CSSTransitionData::initialProperty(); |
| 391 if (value.isCustomIdentValue()) { | 394 if (value.isCustomIdentValue()) { |
| 392 const CSSCustomIdentValue& customIdentValue = toCSSCustomIdentValue(value); | 395 const CSSCustomIdentValue& customIdentValue = toCSSCustomIdentValue(value); |
| 393 if (customIdentValue.isKnownPropertyID()) | 396 if (customIdentValue.isKnownPropertyID()) |
| 394 return CSSTransitionData::TransitionProperty( | 397 return CSSTransitionData::TransitionProperty( |
| 395 customIdentValue.valueAsPropertyID()); | 398 customIdentValue.valueAsPropertyID()); |
| 396 return CSSTransitionData::TransitionProperty(customIdentValue.value()); | 399 return CSSTransitionData::TransitionProperty(customIdentValue.value()); |
| 397 } | 400 } |
| 398 ASSERT(toCSSPrimitiveValue(value).getValueID() == CSSValueNone); | 401 DCHECK_EQ(toCSSIdentifierValue(value).getValueID(), CSSValueNone); |
| 399 return CSSTransitionData::TransitionProperty( | 402 return CSSTransitionData::TransitionProperty( |
| 400 CSSTransitionData::TransitionNone); | 403 CSSTransitionData::TransitionNone); |
| 401 } | 404 } |
| 402 | 405 |
| 403 PassRefPtr<TimingFunction> CSSToStyleMap::mapAnimationTimingFunction( | 406 PassRefPtr<TimingFunction> CSSToStyleMap::mapAnimationTimingFunction( |
| 404 const CSSValue& value, | 407 const CSSValue& value, |
| 405 bool allowStepMiddle) { | 408 bool allowStepMiddle) { |
| 406 // FIXME: We should probably only call into this function with a valid | 409 // FIXME: We should probably only call into this function with a valid |
| 407 // single timing function value which isn't initial or inherit. We can | 410 // single timing function value which isn't initial or inherit. We can |
| 408 // currently get into here with initial since the parser expands unset | 411 // currently get into here with initial since the parser expands unset |
| 409 // properties in shorthands to initial. | 412 // properties in shorthands to initial. |
| 410 | 413 |
| 411 if (value.isPrimitiveValue()) { | 414 if (value.isIdentifierValue()) { |
| 412 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); | 415 const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(value); |
| 413 switch (primitiveValue.getValueID()) { | 416 switch (identifierValue.getValueID()) { |
| 414 case CSSValueLinear: | 417 case CSSValueLinear: |
| 415 return LinearTimingFunction::shared(); | 418 return LinearTimingFunction::shared(); |
| 416 case CSSValueEase: | 419 case CSSValueEase: |
| 417 return CubicBezierTimingFunction::preset( | 420 return CubicBezierTimingFunction::preset( |
| 418 CubicBezierTimingFunction::EaseType::EASE); | 421 CubicBezierTimingFunction::EaseType::EASE); |
| 419 case CSSValueEaseIn: | 422 case CSSValueEaseIn: |
| 420 return CubicBezierTimingFunction::preset( | 423 return CubicBezierTimingFunction::preset( |
| 421 CubicBezierTimingFunction::EaseType::EASE_IN); | 424 CubicBezierTimingFunction::EaseType::EASE_IN); |
| 422 case CSSValueEaseOut: | 425 case CSSValueEaseOut: |
| 423 return CubicBezierTimingFunction::preset( | 426 return CubicBezierTimingFunction::preset( |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 if (!value.isBorderImageSliceValue()) | 549 if (!value.isBorderImageSliceValue()) |
| 547 return; | 550 return; |
| 548 | 551 |
| 549 // Retrieve the border image value. | 552 // Retrieve the border image value. |
| 550 const CSSBorderImageSliceValue& borderImageSlice = | 553 const CSSBorderImageSliceValue& borderImageSlice = |
| 551 toCSSBorderImageSliceValue(value); | 554 toCSSBorderImageSliceValue(value); |
| 552 | 555 |
| 553 // Set up a length box to represent our image slices. | 556 // Set up a length box to represent our image slices. |
| 554 LengthBox box; | 557 LengthBox box; |
| 555 const CSSQuadValue& slices = borderImageSlice.slices(); | 558 const CSSQuadValue& slices = borderImageSlice.slices(); |
| 556 box.m_top = convertBorderImageSliceSide(*slices.top()); | 559 box.m_top = convertBorderImageSliceSide(toCSSPrimitiveValue(*slices.top())); |
| 557 box.m_bottom = convertBorderImageSliceSide(*slices.bottom()); | 560 box.m_bottom = |
| 558 box.m_left = convertBorderImageSliceSide(*slices.left()); | 561 convertBorderImageSliceSide(toCSSPrimitiveValue(*slices.bottom())); |
| 559 box.m_right = convertBorderImageSliceSide(*slices.right()); | 562 box.m_left = convertBorderImageSliceSide(toCSSPrimitiveValue(*slices.left())); |
| 563 box.m_right = |
| 564 convertBorderImageSliceSide(toCSSPrimitiveValue(*slices.right())); |
| 560 image.setImageSlices(box); | 565 image.setImageSlices(box); |
| 561 | 566 |
| 562 // Set our fill mode. | 567 // Set our fill mode. |
| 563 image.setFill(borderImageSlice.fill()); | 568 image.setFill(borderImageSlice.fill()); |
| 564 } | 569 } |
| 565 | 570 |
| 566 static BorderImageLength toBorderImageLength( | 571 static BorderImageLength toBorderImageLength( |
| 567 CSSPrimitiveValue& value, | 572 CSSValue& value, |
| 568 const CSSToLengthConversionData& conversionData) { | 573 const CSSToLengthConversionData& conversionData) { |
| 569 if (value.isNumber()) | 574 if (value.isPrimitiveValue()) { |
| 570 return value.getDoubleValue(); | 575 const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
| 571 if (value.isPercentage()) | 576 if (primitiveValue.isNumber()) |
| 572 return Length(value.getDoubleValue(), Percent); | 577 return primitiveValue.getDoubleValue(); |
| 573 if (value.getValueID() != CSSValueAuto) | 578 if (primitiveValue.isPercentage()) |
| 574 return value.computeLength<Length>(conversionData); | 579 return Length(primitiveValue.getDoubleValue(), Percent); |
| 580 return primitiveValue.computeLength<Length>(conversionData); |
| 581 } |
| 582 DCHECK_EQ(toCSSIdentifierValue(value).getValueID(), CSSValueAuto); |
| 575 return Length(Auto); | 583 return Length(Auto); |
| 576 } | 584 } |
| 577 | 585 |
| 578 BorderImageLengthBox CSSToStyleMap::mapNinePieceImageQuad( | 586 BorderImageLengthBox CSSToStyleMap::mapNinePieceImageQuad( |
| 579 StyleResolverState& state, | 587 StyleResolverState& state, |
| 580 const CSSValue& value) { | 588 const CSSValue& value) { |
| 581 if (!value.isQuadValue()) | 589 if (!value.isQuadValue()) |
| 582 return BorderImageLengthBox(Length(Auto)); | 590 return BorderImageLengthBox(Length(Auto)); |
| 583 | 591 |
| 584 const CSSQuadValue& slices = toCSSQuadValue(value); | 592 const CSSQuadValue& slices = toCSSQuadValue(value); |
| 585 | 593 |
| 586 // Set up a border image length box to represent our image slices. | 594 // Set up a border image length box to represent our image slices. |
| 587 return BorderImageLengthBox( | 595 return BorderImageLengthBox( |
| 588 toBorderImageLength(*slices.top(), state.cssToLengthConversionData()), | 596 toBorderImageLength(*slices.top(), state.cssToLengthConversionData()), |
| 589 toBorderImageLength(*slices.right(), state.cssToLengthConversionData()), | 597 toBorderImageLength(*slices.right(), state.cssToLengthConversionData()), |
| 590 toBorderImageLength(*slices.bottom(), state.cssToLengthConversionData()), | 598 toBorderImageLength(*slices.bottom(), state.cssToLengthConversionData()), |
| 591 toBorderImageLength(*slices.left(), state.cssToLengthConversionData())); | 599 toBorderImageLength(*slices.left(), state.cssToLengthConversionData())); |
| 592 } | 600 } |
| 593 | 601 |
| 594 void CSSToStyleMap::mapNinePieceImageRepeat(StyleResolverState&, | 602 void CSSToStyleMap::mapNinePieceImageRepeat(StyleResolverState&, |
| 595 const CSSValue& value, | 603 const CSSValue& value, |
| 596 NinePieceImage& image) { | 604 NinePieceImage& image) { |
| 597 if (!value.isValuePair()) | 605 if (!value.isValuePair()) |
| 598 return; | 606 return; |
| 599 | 607 |
| 600 const CSSValuePair& pair = toCSSValuePair(value); | 608 const CSSValuePair& pair = toCSSValuePair(value); |
| 601 CSSValueID firstIdentifier = toCSSPrimitiveValue(pair.first()).getValueID(); | 609 CSSValueID firstIdentifier = toCSSIdentifierValue(pair.first()).getValueID(); |
| 602 CSSValueID secondIdentifier = toCSSPrimitiveValue(pair.second()).getValueID(); | 610 CSSValueID secondIdentifier = |
| 611 toCSSIdentifierValue(pair.second()).getValueID(); |
| 603 | 612 |
| 604 ENinePieceImageRule horizontalRule; | 613 ENinePieceImageRule horizontalRule; |
| 605 switch (firstIdentifier) { | 614 switch (firstIdentifier) { |
| 606 case CSSValueStretch: | 615 case CSSValueStretch: |
| 607 horizontalRule = StretchImageRule; | 616 horizontalRule = StretchImageRule; |
| 608 break; | 617 break; |
| 609 case CSSValueRound: | 618 case CSSValueRound: |
| 610 horizontalRule = RoundImageRule; | 619 horizontalRule = RoundImageRule; |
| 611 break; | 620 break; |
| 612 case CSSValueSpace: | 621 case CSSValueSpace: |
| (...skipping 17 matching lines...) Expand all Loading... |
| 630 verticalRule = SpaceImageRule; | 639 verticalRule = SpaceImageRule; |
| 631 break; | 640 break; |
| 632 default: // CSSValueRepeat | 641 default: // CSSValueRepeat |
| 633 verticalRule = RepeatImageRule; | 642 verticalRule = RepeatImageRule; |
| 634 break; | 643 break; |
| 635 } | 644 } |
| 636 image.setVerticalRule(verticalRule); | 645 image.setVerticalRule(verticalRule); |
| 637 } | 646 } |
| 638 | 647 |
| 639 } // namespace blink | 648 } // namespace blink |
| OLD | NEW |