| 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 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 #include "core/animation/animatable/AnimatableShadow.h" | 49 #include "core/animation/animatable/AnimatableShadow.h" |
| 50 #include "core/animation/animatable/AnimatableShapeValue.h" | 50 #include "core/animation/animatable/AnimatableShapeValue.h" |
| 51 #include "core/animation/animatable/AnimatableStrokeDasharrayList.h" | 51 #include "core/animation/animatable/AnimatableStrokeDasharrayList.h" |
| 52 #include "core/animation/animatable/AnimatableTransform.h" | 52 #include "core/animation/animatable/AnimatableTransform.h" |
| 53 #include "core/animation/animatable/AnimatableUnknown.h" | 53 #include "core/animation/animatable/AnimatableUnknown.h" |
| 54 #include "core/animation/animatable/AnimatableVisibility.h" | 54 #include "core/animation/animatable/AnimatableVisibility.h" |
| 55 #include "core/css/CSSCalculationValue.h" | 55 #include "core/css/CSSCalculationValue.h" |
| 56 #include "core/css/CSSPrimitiveValue.h" | 56 #include "core/css/CSSPrimitiveValue.h" |
| 57 #include "core/css/CSSPrimitiveValueMappings.h" | 57 #include "core/css/CSSPrimitiveValueMappings.h" |
| 58 #include "core/css/CSSPropertyMetadata.h" | 58 #include "core/css/CSSPropertyMetadata.h" |
| 59 #include "core/layout/style/LayoutStyle.h" | 59 #include "core/layout/style/ComputedStyle.h" |
| 60 #include "platform/Length.h" | 60 #include "platform/Length.h" |
| 61 #include "platform/LengthBox.h" | 61 #include "platform/LengthBox.h" |
| 62 | 62 |
| 63 namespace blink { | 63 namespace blink { |
| 64 | 64 |
| 65 static PassRefPtrWillBeRawPtr<AnimatableValue> createFromLengthWithZoom(const Le
ngth& length, float zoom) | 65 static PassRefPtrWillBeRawPtr<AnimatableValue> createFromLengthWithZoom(const Le
ngth& length, float zoom) |
| 66 { | 66 { |
| 67 switch (length.type()) { | 67 switch (length.type()) { |
| 68 case Fixed: | 68 case Fixed: |
| 69 case Percent: | 69 case Percent: |
| (...skipping 12 matching lines...) Expand all Loading... |
| 82 case ExtendToZoom: // Does not apply to elements. | 82 case ExtendToZoom: // Does not apply to elements. |
| 83 case DeviceWidth: | 83 case DeviceWidth: |
| 84 case DeviceHeight: | 84 case DeviceHeight: |
| 85 ASSERT_NOT_REACHED(); | 85 ASSERT_NOT_REACHED(); |
| 86 return nullptr; | 86 return nullptr; |
| 87 } | 87 } |
| 88 ASSERT_NOT_REACHED(); | 88 ASSERT_NOT_REACHED(); |
| 89 return nullptr; | 89 return nullptr; |
| 90 } | 90 } |
| 91 | 91 |
| 92 static PassRefPtrWillBeRawPtr<AnimatableValue> createFromLength(const Length& le
ngth, const LayoutStyle& style) | 92 static PassRefPtrWillBeRawPtr<AnimatableValue> createFromLength(const Length& le
ngth, const ComputedStyle& style) |
| 93 { | 93 { |
| 94 return createFromLengthWithZoom(length, style.effectiveZoom()); | 94 return createFromLengthWithZoom(length, style.effectiveZoom()); |
| 95 } | 95 } |
| 96 | 96 |
| 97 static PassRefPtrWillBeRawPtr<AnimatableValue> createFromUnzoomedLength(const Un
zoomedLength& unzoomedLength) | 97 static PassRefPtrWillBeRawPtr<AnimatableValue> createFromUnzoomedLength(const Un
zoomedLength& unzoomedLength) |
| 98 { | 98 { |
| 99 return createFromLengthWithZoom(unzoomedLength.length(), 1); | 99 return createFromLengthWithZoom(unzoomedLength.length(), 1); |
| 100 } | 100 } |
| 101 | 101 |
| 102 static PassRefPtrWillBeRawPtr<AnimatableValue> createFromLineHeight(const Length
& length, const LayoutStyle& style) | 102 static PassRefPtrWillBeRawPtr<AnimatableValue> createFromLineHeight(const Length
& length, const ComputedStyle& style) |
| 103 { | 103 { |
| 104 if (length.type() == Percent) { | 104 if (length.type() == Percent) { |
| 105 double value = length.value(); | 105 double value = length.value(); |
| 106 // -100% is used to represent "normal" line height. | 106 // -100% is used to represent "normal" line height. |
| 107 if (value == -100) | 107 if (value == -100) |
| 108 return AnimatableUnknown::create(CSSValueNormal); | 108 return AnimatableUnknown::create(CSSValueNormal); |
| 109 return AnimatableDouble::create(value); | 109 return AnimatableDouble::create(value); |
| 110 } | 110 } |
| 111 return createFromLength(length, style); | 111 return createFromLength(length, style); |
| 112 } | 112 } |
| 113 | 113 |
| 114 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromDouble(double va
lue, AnimatableDouble::Constraint constraint = AnimatableDouble::Unconstrained) | 114 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromDouble(double va
lue, AnimatableDouble::Constraint constraint = AnimatableDouble::Unconstrained) |
| 115 { | 115 { |
| 116 return AnimatableDouble::create(value, constraint); | 116 return AnimatableDouble::create(value, constraint); |
| 117 } | 117 } |
| 118 | 118 |
| 119 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromLengthBox(const
LengthBox& lengthBox, const LayoutStyle& style) | 119 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromLengthBox(const
LengthBox& lengthBox, const ComputedStyle& style) |
| 120 { | 120 { |
| 121 return AnimatableLengthBox::create( | 121 return AnimatableLengthBox::create( |
| 122 createFromLength(lengthBox.left(), style), | 122 createFromLength(lengthBox.left(), style), |
| 123 createFromLength(lengthBox.right(), style), | 123 createFromLength(lengthBox.right(), style), |
| 124 createFromLength(lengthBox.top(), style), | 124 createFromLength(lengthBox.top(), style), |
| 125 createFromLength(lengthBox.bottom(), style)); | 125 createFromLength(lengthBox.bottom(), style)); |
| 126 } | 126 } |
| 127 | 127 |
| 128 static PassRefPtrWillBeRawPtr<AnimatableValue> createFromBorderImageLength(const
BorderImageLength& borderImageLength, const LayoutStyle& style) | 128 static PassRefPtrWillBeRawPtr<AnimatableValue> createFromBorderImageLength(const
BorderImageLength& borderImageLength, const ComputedStyle& style) |
| 129 { | 129 { |
| 130 if (borderImageLength.isNumber()) | 130 if (borderImageLength.isNumber()) |
| 131 return createFromDouble(borderImageLength.number()); | 131 return createFromDouble(borderImageLength.number()); |
| 132 return createFromLength(borderImageLength.length(), style); | 132 return createFromLength(borderImageLength.length(), style); |
| 133 } | 133 } |
| 134 | 134 |
| 135 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromBorderImageLengt
hBox(const BorderImageLengthBox& borderImageLengthBox, const LayoutStyle& style) | 135 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromBorderImageLengt
hBox(const BorderImageLengthBox& borderImageLengthBox, const ComputedStyle& styl
e) |
| 136 { | 136 { |
| 137 return AnimatableLengthBox::create( | 137 return AnimatableLengthBox::create( |
| 138 createFromBorderImageLength(borderImageLengthBox.left(), style), | 138 createFromBorderImageLength(borderImageLengthBox.left(), style), |
| 139 createFromBorderImageLength(borderImageLengthBox.right(), style), | 139 createFromBorderImageLength(borderImageLengthBox.right(), style), |
| 140 createFromBorderImageLength(borderImageLengthBox.top(), style), | 140 createFromBorderImageLength(borderImageLengthBox.top(), style), |
| 141 createFromBorderImageLength(borderImageLengthBox.bottom(), style)); | 141 createFromBorderImageLength(borderImageLengthBox.bottom(), style)); |
| 142 } | 142 } |
| 143 | 143 |
| 144 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromLengthBoxAndBool
(const LengthBox lengthBox, const bool flag, const LayoutStyle& style) | 144 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromLengthBoxAndBool
(const LengthBox lengthBox, const bool flag, const ComputedStyle& style) |
| 145 { | 145 { |
| 146 return AnimatableLengthBoxAndBool::create( | 146 return AnimatableLengthBoxAndBool::create( |
| 147 createFromLengthBox(lengthBox, style), | 147 createFromLengthBox(lengthBox, style), |
| 148 flag); | 148 flag); |
| 149 } | 149 } |
| 150 | 150 |
| 151 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromDoubleAndBool(do
uble number, const bool flag, const LayoutStyle& style) | 151 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromDoubleAndBool(do
uble number, const bool flag, const ComputedStyle& style) |
| 152 { | 152 { |
| 153 return AnimatableDoubleAndBool::create(number, flag); | 153 return AnimatableDoubleAndBool::create(number, flag); |
| 154 } | 154 } |
| 155 | 155 |
| 156 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromLengthPoint(cons
t LengthPoint& lengthPoint, const LayoutStyle& style) | 156 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromLengthPoint(cons
t LengthPoint& lengthPoint, const ComputedStyle& style) |
| 157 { | 157 { |
| 158 return AnimatableLengthPoint::create( | 158 return AnimatableLengthPoint::create( |
| 159 createFromLength(lengthPoint.x(), style), | 159 createFromLength(lengthPoint.x(), style), |
| 160 createFromLength(lengthPoint.y(), style)); | 160 createFromLength(lengthPoint.y(), style)); |
| 161 } | 161 } |
| 162 | 162 |
| 163 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromTransformOrigin(
const TransformOrigin& transformOrigin, const LayoutStyle& style) | 163 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromTransformOrigin(
const TransformOrigin& transformOrigin, const ComputedStyle& style) |
| 164 { | 164 { |
| 165 return AnimatableLengthPoint3D::create( | 165 return AnimatableLengthPoint3D::create( |
| 166 createFromLength(transformOrigin.x(), style), | 166 createFromLength(transformOrigin.x(), style), |
| 167 createFromLength(transformOrigin.y(), style), | 167 createFromLength(transformOrigin.y(), style), |
| 168 createFromDouble(transformOrigin.z())); | 168 createFromDouble(transformOrigin.z())); |
| 169 } | 169 } |
| 170 | 170 |
| 171 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromLengthSize(const
LengthSize& lengthSize, const LayoutStyle& style) | 171 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromLengthSize(const
LengthSize& lengthSize, const ComputedStyle& style) |
| 172 { | 172 { |
| 173 return AnimatableLengthSize::create( | 173 return AnimatableLengthSize::create( |
| 174 createFromLength(lengthSize.width(), style), | 174 createFromLength(lengthSize.width(), style), |
| 175 createFromLength(lengthSize.height(), style)); | 175 createFromLength(lengthSize.height(), style)); |
| 176 } | 176 } |
| 177 | 177 |
| 178 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromStyleImage(Style
Image* image) | 178 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromStyleImage(Style
Image* image) |
| 179 { | 179 { |
| 180 if (image) { | 180 if (image) { |
| 181 if (RefPtrWillBeRawPtr<CSSValue> cssValue = image->cssValue()) | 181 if (RefPtrWillBeRawPtr<CSSValue> cssValue = image->cssValue()) |
| 182 return AnimatableImage::create(cssValue.release()); | 182 return AnimatableImage::create(cssValue.release()); |
| 183 } | 183 } |
| 184 return AnimatableUnknown::create(CSSValueNone); | 184 return AnimatableUnknown::create(CSSValueNone); |
| 185 } | 185 } |
| 186 | 186 |
| 187 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromFillSize(const F
illSize& fillSize, const LayoutStyle& style) | 187 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromFillSize(const F
illSize& fillSize, const ComputedStyle& style) |
| 188 { | 188 { |
| 189 switch (fillSize.type) { | 189 switch (fillSize.type) { |
| 190 case SizeLength: | 190 case SizeLength: |
| 191 return createFromLengthSize(fillSize.size, style); | 191 return createFromLengthSize(fillSize.size, style); |
| 192 case Contain: | 192 case Contain: |
| 193 case Cover: | 193 case Cover: |
| 194 case SizeNone: | 194 case SizeNone: |
| 195 return AnimatableUnknown::create(CSSPrimitiveValue::create(fillSize.type
)); | 195 return AnimatableUnknown::create(CSSPrimitiveValue::create(fillSize.type
)); |
| 196 default: | 196 default: |
| 197 ASSERT_NOT_REACHED(); | 197 ASSERT_NOT_REACHED(); |
| 198 return nullptr; | 198 return nullptr; |
| 199 } | 199 } |
| 200 } | 200 } |
| 201 | 201 |
| 202 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromBackgroundPositi
on(const Length& length, bool originIsSet, BackgroundEdgeOrigin origin, const La
youtStyle& style) | 202 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromBackgroundPositi
on(const Length& length, bool originIsSet, BackgroundEdgeOrigin origin, const Co
mputedStyle& style) |
| 203 { | 203 { |
| 204 if (!originIsSet || origin == LeftEdge || origin == TopEdge) | 204 if (!originIsSet || origin == LeftEdge || origin == TopEdge) |
| 205 return createFromLength(length, style); | 205 return createFromLength(length, style); |
| 206 return createFromLength(length.subtractFromOneHundredPercent(), style); | 206 return createFromLength(length.subtractFromOneHundredPercent(), style); |
| 207 } | 207 } |
| 208 | 208 |
| 209 template<CSSPropertyID property> | 209 template<CSSPropertyID property> |
| 210 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromFillLayers(const
FillLayer& fillLayers, const LayoutStyle& style) | 210 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromFillLayers(const
FillLayer& fillLayers, const ComputedStyle& style) |
| 211 { | 211 { |
| 212 WillBeHeapVector<RefPtrWillBeMember<AnimatableValue>> values; | 212 WillBeHeapVector<RefPtrWillBeMember<AnimatableValue>> values; |
| 213 for (const FillLayer* fillLayer = &fillLayers; fillLayer; fillLayer = fillLa
yer->next()) { | 213 for (const FillLayer* fillLayer = &fillLayers; fillLayer; fillLayer = fillLa
yer->next()) { |
| 214 if (property == CSSPropertyBackgroundImage || property == CSSPropertyWeb
kitMaskImage) { | 214 if (property == CSSPropertyBackgroundImage || property == CSSPropertyWeb
kitMaskImage) { |
| 215 if (!fillLayer->isImageSet()) | 215 if (!fillLayer->isImageSet()) |
| 216 break; | 216 break; |
| 217 values.append(createFromStyleImage(fillLayer->image())); | 217 values.append(createFromStyleImage(fillLayer->image())); |
| 218 } else if (property == CSSPropertyBackgroundPositionX || property == CSS
PropertyWebkitMaskPositionX) { | 218 } else if (property == CSSPropertyBackgroundPositionX || property == CSS
PropertyWebkitMaskPositionX) { |
| 219 if (!fillLayer->isXPositionSet()) | 219 if (!fillLayer->isXPositionSet()) |
| 220 break; | 220 break; |
| 221 values.append(createFromBackgroundPosition(fillLayer->xPosition(), f
illLayer->isBackgroundXOriginSet(), fillLayer->backgroundXOrigin(), style)); | 221 values.append(createFromBackgroundPosition(fillLayer->xPosition(), f
illLayer->isBackgroundXOriginSet(), fillLayer->backgroundXOrigin(), style)); |
| 222 } else if (property == CSSPropertyBackgroundPositionY || property == CSS
PropertyWebkitMaskPositionY) { | 222 } else if (property == CSSPropertyBackgroundPositionY || property == CSS
PropertyWebkitMaskPositionY) { |
| 223 if (!fillLayer->isYPositionSet()) | 223 if (!fillLayer->isYPositionSet()) |
| 224 break; | 224 break; |
| 225 values.append(createFromBackgroundPosition(fillLayer->yPosition(), f
illLayer->isBackgroundYOriginSet(), fillLayer->backgroundYOrigin(), style)); | 225 values.append(createFromBackgroundPosition(fillLayer->yPosition(), f
illLayer->isBackgroundYOriginSet(), fillLayer->backgroundYOrigin(), style)); |
| 226 } else if (property == CSSPropertyBackgroundSize || property == CSSPrope
rtyWebkitMaskSize) { | 226 } else if (property == CSSPropertyBackgroundSize || property == CSSPrope
rtyWebkitMaskSize) { |
| 227 if (!fillLayer->isSizeSet()) | 227 if (!fillLayer->isSizeSet()) |
| 228 break; | 228 break; |
| 229 values.append(createFromFillSize(fillLayer->size(), style)); | 229 values.append(createFromFillSize(fillLayer->size(), style)); |
| 230 } else { | 230 } else { |
| 231 ASSERT_NOT_REACHED(); | 231 ASSERT_NOT_REACHED(); |
| 232 } | 232 } |
| 233 } | 233 } |
| 234 return AnimatableRepeatable::create(values); | 234 return AnimatableRepeatable::create(values); |
| 235 } | 235 } |
| 236 | 236 |
| 237 PassRefPtrWillBeRawPtr<AnimatableValue> CSSAnimatableValueFactory::createFromCol
or(CSSPropertyID property, const LayoutStyle& style) | 237 PassRefPtrWillBeRawPtr<AnimatableValue> CSSAnimatableValueFactory::createFromCol
or(CSSPropertyID property, const ComputedStyle& style) |
| 238 { | 238 { |
| 239 Color color = style.colorIncludingFallback(property, false); | 239 Color color = style.colorIncludingFallback(property, false); |
| 240 Color visitedLinkColor = style.colorIncludingFallback(property, true); | 240 Color visitedLinkColor = style.colorIncludingFallback(property, true); |
| 241 return AnimatableColor::create(color, visitedLinkColor); | 241 return AnimatableColor::create(color, visitedLinkColor); |
| 242 } | 242 } |
| 243 | 243 |
| 244 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromShapeValue(Shape
Value* value) | 244 inline static PassRefPtrWillBeRawPtr<AnimatableValue> createFromShapeValue(Shape
Value* value) |
| 245 { | 245 { |
| 246 if (value) | 246 if (value) |
| 247 return AnimatableShapeValue::create(value); | 247 return AnimatableShapeValue::create(value); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 } | 291 } |
| 292 | 292 |
| 293 static SVGPaintType normalizeSVGPaintType(SVGPaintType paintType) | 293 static SVGPaintType normalizeSVGPaintType(SVGPaintType paintType) |
| 294 { | 294 { |
| 295 // If the <paint> is 'currentColor', then create an AnimatableSVGPaint with | 295 // If the <paint> is 'currentColor', then create an AnimatableSVGPaint with |
| 296 // a <rgbcolor> type. This is similar in vein to the handling of colors. | 296 // a <rgbcolor> type. This is similar in vein to the handling of colors. |
| 297 return paintType == SVG_PAINTTYPE_CURRENTCOLOR ? SVG_PAINTTYPE_RGBCOLOR : pa
intType; | 297 return paintType == SVG_PAINTTYPE_CURRENTCOLOR ? SVG_PAINTTYPE_RGBCOLOR : pa
intType; |
| 298 } | 298 } |
| 299 | 299 |
| 300 // FIXME: Generate this function. | 300 // FIXME: Generate this function. |
| 301 PassRefPtrWillBeRawPtr<AnimatableValue> CSSAnimatableValueFactory::create(CSSPro
pertyID property, const LayoutStyle& style) | 301 PassRefPtrWillBeRawPtr<AnimatableValue> CSSAnimatableValueFactory::create(CSSPro
pertyID property, const ComputedStyle& style) |
| 302 { | 302 { |
| 303 ASSERT(CSSPropertyMetadata::isAnimatableProperty(property)); | 303 ASSERT(CSSPropertyMetadata::isAnimatableProperty(property)); |
| 304 switch (property) { | 304 switch (property) { |
| 305 case CSSPropertyBackgroundColor: | 305 case CSSPropertyBackgroundColor: |
| 306 return createFromColor(property, style); | 306 return createFromColor(property, style); |
| 307 case CSSPropertyBackgroundImage: | 307 case CSSPropertyBackgroundImage: |
| 308 return createFromFillLayers<CSSPropertyBackgroundImage>(style.background
Layers(), style); | 308 return createFromFillLayers<CSSPropertyBackgroundImage>(style.background
Layers(), style); |
| 309 case CSSPropertyBackgroundPositionX: | 309 case CSSPropertyBackgroundPositionX: |
| 310 return createFromFillLayers<CSSPropertyBackgroundPositionX>(style.backgr
oundLayers(), style); | 310 return createFromFillLayers<CSSPropertyBackgroundPositionX>(style.backgr
oundLayers(), style); |
| 311 case CSSPropertyBackgroundPositionY: | 311 case CSSPropertyBackgroundPositionY: |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 565 return createFromLength(style.svgStyle().ry(), style); | 565 return createFromLength(style.svgStyle().ry(), style); |
| 566 case CSSPropertyZIndex: | 566 case CSSPropertyZIndex: |
| 567 return createFromDouble(style.zIndex()); | 567 return createFromDouble(style.zIndex()); |
| 568 default: | 568 default: |
| 569 ASSERT_NOT_REACHED(); | 569 ASSERT_NOT_REACHED(); |
| 570 return nullptr; | 570 return nullptr; |
| 571 } | 571 } |
| 572 } | 572 } |
| 573 | 573 |
| 574 } // namespace blink | 574 } // namespace blink |
| OLD | NEW |