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 |