| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 #include "core/animation/TransformSVGInterpolation.h" | 6 #include "core/animation/TransformSVGInterpolation.h" |
| 7 | 7 |
| 8 namespace blink { | 8 namespace blink { |
| 9 | 9 |
| 10 namespace { | 10 namespace { |
| 11 | 11 |
| 12 PassOwnPtrWillBeRawPtr<InterpolableValue> translateToInterpolableValue(SVGTransf
orm* transform) | 12 PassOwnPtr<InterpolableValue> translateToInterpolableValue(SVGTransform* transfo
rm) |
| 13 { | 13 { |
| 14 FloatPoint translate = transform->translate(); | 14 FloatPoint translate = transform->translate(); |
| 15 OwnPtrWillBeRawPtr<InterpolableList> result = InterpolableList::create(2); | 15 OwnPtr<InterpolableList> result = InterpolableList::create(2); |
| 16 result->set(0, InterpolableNumber::create(translate.x())); | 16 result->set(0, InterpolableNumber::create(translate.x())); |
| 17 result->set(1, InterpolableNumber::create(translate.y())); | 17 result->set(1, InterpolableNumber::create(translate.y())); |
| 18 return result.release(); | 18 return result.release(); |
| 19 } | 19 } |
| 20 | 20 |
| 21 PassRefPtrWillBeRawPtr<SVGTransform> translateFromInterpolableValue(const Interp
olableValue& value) | 21 PassRefPtrWillBeRawPtr<SVGTransform> translateFromInterpolableValue(const Interp
olableValue& value) |
| 22 { | 22 { |
| 23 const InterpolableList& list = toInterpolableList(value); | 23 const InterpolableList& list = toInterpolableList(value); |
| 24 | 24 |
| 25 RefPtrWillBeRawPtr<SVGTransform> transform = SVGTransform::create(SVG_TRANSF
ORM_TRANSLATE); | 25 RefPtrWillBeRawPtr<SVGTransform> transform = SVGTransform::create(SVG_TRANSF
ORM_TRANSLATE); |
| 26 transform->setTranslate( | 26 transform->setTranslate( |
| 27 toInterpolableNumber(list.get(0))->value(), | 27 toInterpolableNumber(list.get(0))->value(), |
| 28 toInterpolableNumber(list.get(1))->value()); | 28 toInterpolableNumber(list.get(1))->value()); |
| 29 return transform.release(); | 29 return transform.release(); |
| 30 } | 30 } |
| 31 | 31 |
| 32 PassOwnPtrWillBeRawPtr<InterpolableValue> scaleToInterpolableValue(SVGTransform*
transform) | 32 PassOwnPtr<InterpolableValue> scaleToInterpolableValue(SVGTransform* transform) |
| 33 { | 33 { |
| 34 FloatSize scale = transform->scale(); | 34 FloatSize scale = transform->scale(); |
| 35 OwnPtrWillBeRawPtr<InterpolableList> result = InterpolableList::create(2); | 35 OwnPtr<InterpolableList> result = InterpolableList::create(2); |
| 36 result->set(0, InterpolableNumber::create(scale.width())); | 36 result->set(0, InterpolableNumber::create(scale.width())); |
| 37 result->set(1, InterpolableNumber::create(scale.height())); | 37 result->set(1, InterpolableNumber::create(scale.height())); |
| 38 return result.release(); | 38 return result.release(); |
| 39 } | 39 } |
| 40 | 40 |
| 41 PassRefPtrWillBeRawPtr<SVGTransform> scaleFromInterpolableValue(const Interpolab
leValue& value) | 41 PassRefPtrWillBeRawPtr<SVGTransform> scaleFromInterpolableValue(const Interpolab
leValue& value) |
| 42 { | 42 { |
| 43 const InterpolableList& list = toInterpolableList(value); | 43 const InterpolableList& list = toInterpolableList(value); |
| 44 | 44 |
| 45 RefPtrWillBeRawPtr<SVGTransform> transform = SVGTransform::create(SVG_TRANSF
ORM_SCALE); | 45 RefPtrWillBeRawPtr<SVGTransform> transform = SVGTransform::create(SVG_TRANSF
ORM_SCALE); |
| 46 transform->setScale( | 46 transform->setScale( |
| 47 toInterpolableNumber(list.get(0))->value(), | 47 toInterpolableNumber(list.get(0))->value(), |
| 48 toInterpolableNumber(list.get(1))->value()); | 48 toInterpolableNumber(list.get(1))->value()); |
| 49 return transform.release(); | 49 return transform.release(); |
| 50 } | 50 } |
| 51 | 51 |
| 52 PassOwnPtrWillBeRawPtr<InterpolableValue> rotateToInterpolableValue(SVGTransform
* transform) | 52 PassOwnPtr<InterpolableValue> rotateToInterpolableValue(SVGTransform* transform) |
| 53 { | 53 { |
| 54 FloatPoint rotationCenter = transform->rotationCenter(); | 54 FloatPoint rotationCenter = transform->rotationCenter(); |
| 55 OwnPtrWillBeRawPtr<InterpolableList> result = InterpolableList::create(3); | 55 OwnPtr<InterpolableList> result = InterpolableList::create(3); |
| 56 result->set(0, InterpolableNumber::create(transform->angle())); | 56 result->set(0, InterpolableNumber::create(transform->angle())); |
| 57 result->set(1, InterpolableNumber::create(rotationCenter.x())); | 57 result->set(1, InterpolableNumber::create(rotationCenter.x())); |
| 58 result->set(2, InterpolableNumber::create(rotationCenter.y())); | 58 result->set(2, InterpolableNumber::create(rotationCenter.y())); |
| 59 return result.release(); | 59 return result.release(); |
| 60 } | 60 } |
| 61 | 61 |
| 62 PassRefPtrWillBeRawPtr<SVGTransform> rotateFromInterpolableValue(const Interpola
bleValue& value) | 62 PassRefPtrWillBeRawPtr<SVGTransform> rotateFromInterpolableValue(const Interpola
bleValue& value) |
| 63 { | 63 { |
| 64 const InterpolableList& list = toInterpolableList(value); | 64 const InterpolableList& list = toInterpolableList(value); |
| 65 | 65 |
| 66 RefPtrWillBeRawPtr<SVGTransform> transform = SVGTransform::create(SVG_TRANSF
ORM_ROTATE); | 66 RefPtrWillBeRawPtr<SVGTransform> transform = SVGTransform::create(SVG_TRANSF
ORM_ROTATE); |
| 67 transform->setRotate( | 67 transform->setRotate( |
| 68 toInterpolableNumber(list.get(0))->value(), | 68 toInterpolableNumber(list.get(0))->value(), |
| 69 toInterpolableNumber(list.get(1))->value(), | 69 toInterpolableNumber(list.get(1))->value(), |
| 70 toInterpolableNumber(list.get(2))->value()); | 70 toInterpolableNumber(list.get(2))->value()); |
| 71 return transform.release(); | 71 return transform.release(); |
| 72 } | 72 } |
| 73 | 73 |
| 74 PassOwnPtrWillBeRawPtr<InterpolableValue> skewXToInterpolableValue(SVGTransform*
transform) | 74 PassOwnPtr<InterpolableValue> skewXToInterpolableValue(SVGTransform* transform) |
| 75 { | 75 { |
| 76 return InterpolableNumber::create(transform->angle()); | 76 return InterpolableNumber::create(transform->angle()); |
| 77 } | 77 } |
| 78 | 78 |
| 79 PassRefPtrWillBeRawPtr<SVGTransform> skewXFromInterpolableValue(const Interpolab
leValue& value) | 79 PassRefPtrWillBeRawPtr<SVGTransform> skewXFromInterpolableValue(const Interpolab
leValue& value) |
| 80 { | 80 { |
| 81 RefPtrWillBeRawPtr<SVGTransform> transform = SVGTransform::create(SVG_TRANSF
ORM_SKEWX); | 81 RefPtrWillBeRawPtr<SVGTransform> transform = SVGTransform::create(SVG_TRANSF
ORM_SKEWX); |
| 82 transform->setSkewX(toInterpolableNumber(value).value()); | 82 transform->setSkewX(toInterpolableNumber(value).value()); |
| 83 return transform.release(); | 83 return transform.release(); |
| 84 } | 84 } |
| 85 | 85 |
| 86 PassOwnPtrWillBeRawPtr<InterpolableValue> skewYToInterpolableValue(SVGTransform*
transform) | 86 PassOwnPtr<InterpolableValue> skewYToInterpolableValue(SVGTransform* transform) |
| 87 { | 87 { |
| 88 return InterpolableNumber::create(transform->angle()); | 88 return InterpolableNumber::create(transform->angle()); |
| 89 } | 89 } |
| 90 | 90 |
| 91 PassRefPtrWillBeRawPtr<SVGTransform> skewYFromInterpolableValue(const Interpolab
leValue& value) | 91 PassRefPtrWillBeRawPtr<SVGTransform> skewYFromInterpolableValue(const Interpolab
leValue& value) |
| 92 { | 92 { |
| 93 RefPtrWillBeRawPtr<SVGTransform> transform = SVGTransform::create(SVG_TRANSF
ORM_SKEWY); | 93 RefPtrWillBeRawPtr<SVGTransform> transform = SVGTransform::create(SVG_TRANSF
ORM_SKEWY); |
| 94 transform->setSkewY(toInterpolableNumber(value).value()); | 94 transform->setSkewY(toInterpolableNumber(value).value()); |
| 95 return transform.release(); | 95 return transform.release(); |
| 96 } | 96 } |
| 97 | 97 |
| 98 } // namespace | 98 } // namespace |
| 99 | 99 |
| 100 bool TransformSVGInterpolation::canCreateFrom(SVGTransform* start, SVGTransform*
end) | 100 bool TransformSVGInterpolation::canCreateFrom(SVGTransform* start, SVGTransform*
end) |
| 101 { | 101 { |
| 102 // TODO(ericwilligers): Support matrix interpolation. | 102 // TODO(ericwilligers): Support matrix interpolation. |
| 103 return start->transformType() == end->transformType() | 103 return start->transformType() == end->transformType() |
| 104 && start->transformType() != SVG_TRANSFORM_MATRIX; | 104 && start->transformType() != SVG_TRANSFORM_MATRIX; |
| 105 } | 105 } |
| 106 | 106 |
| 107 PassOwnPtrWillBeRawPtr<InterpolableValue> TransformSVGInterpolation::toInterpola
bleValue(SVGTransform* transform, const SVGAnimatedPropertyBase*, SVGTransformTy
pe* transformTypePtr) | 107 PassOwnPtr<InterpolableValue> TransformSVGInterpolation::toInterpolableValue(SVG
Transform* transform, const SVGAnimatedPropertyBase*, SVGTransformType* transfor
mTypePtr) |
| 108 { | 108 { |
| 109 SVGTransformType transformType = static_cast<SVGTransformType>(transform->tr
ansformType()); | 109 SVGTransformType transformType = static_cast<SVGTransformType>(transform->tr
ansformType()); |
| 110 if (transformTypePtr) | 110 if (transformTypePtr) |
| 111 *transformTypePtr = transformType; | 111 *transformTypePtr = transformType; |
| 112 | 112 |
| 113 switch (transformType) { | 113 switch (transformType) { |
| 114 case SVG_TRANSFORM_TRANSLATE: | 114 case SVG_TRANSFORM_TRANSLATE: |
| 115 return translateToInterpolableValue(transform); | 115 return translateToInterpolableValue(transform); |
| 116 case SVG_TRANSFORM_SCALE: | 116 case SVG_TRANSFORM_SCALE: |
| 117 return scaleToInterpolableValue(transform); | 117 return scaleToInterpolableValue(transform); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 144 return skewYFromInterpolableValue(value); | 144 return skewYFromInterpolableValue(value); |
| 145 case SVG_TRANSFORM_MATRIX: | 145 case SVG_TRANSFORM_MATRIX: |
| 146 case SVG_TRANSFORM_UNKNOWN: | 146 case SVG_TRANSFORM_UNKNOWN: |
| 147 ASSERT_NOT_REACHED(); | 147 ASSERT_NOT_REACHED(); |
| 148 } | 148 } |
| 149 ASSERT_NOT_REACHED(); | 149 ASSERT_NOT_REACHED(); |
| 150 return nullptr; | 150 return nullptr; |
| 151 } | 151 } |
| 152 | 152 |
| 153 } // namespace blink | 153 } // namespace blink |
| OLD | NEW |