| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #ifndef UI_GFX_INTERPOLATED_TRANSFORM_H_ | 5 #ifndef UI_GFX_INTERPOLATED_TRANSFORM_H_ |
| 6 #define UI_GFX_INTERPOLATED_TRANSFORM_H_ | 6 #define UI_GFX_INTERPOLATED_TRANSFORM_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "ui/gfx/point.h" | 11 #include "ui/gfx/point.h" |
| 12 #include "ui/gfx/transform.h" | 12 #include "ui/gfx/transform.h" |
| 13 | 13 |
| 14 namespace ui { | 14 namespace ui { |
| 15 | 15 |
| 16 /////////////////////////////////////////////////////////////////////////////// | 16 /////////////////////////////////////////////////////////////////////////////// |
| 17 // class InterpolatedTransform | 17 // class InterpolatedTransform |
| 18 // | 18 // |
| 19 // Abstract base class for transforms that animate over time. These | 19 // Abstract base class for transforms that animate over time. These |
| 20 // interpolated transforms can be combined to allow for more sophisticated | 20 // interpolated transforms can be combined to allow for more sophisticated |
| 21 // animations. For example, you might combine a rotation of 90 degrees between | 21 // animations. For example, you might combine a rotation of 90 degrees between |
| 22 // times 0 and 1, with a scale from 1 to 0.3 between times 0 and 0.25 and a | 22 // times 0 and 1, with a scale from 1 to 0.3 between times 0 and 0.25 and a |
| 23 // scale from 0.3 to 1 from between times 0.75 and 1. | 23 // scale from 0.3 to 1 from between times 0.75 and 1. |
| 24 // | 24 // |
| 25 /////////////////////////////////////////////////////////////////////////////// | 25 /////////////////////////////////////////////////////////////////////////////// |
| 26 class UI_API InterpolatedTransform { | 26 class UI_EXPORT InterpolatedTransform { |
| 27 public: | 27 public: |
| 28 InterpolatedTransform(); | 28 InterpolatedTransform(); |
| 29 // The interpolated transform varies only when t in (start_time, end_time). | 29 // The interpolated transform varies only when t in (start_time, end_time). |
| 30 // If t <= start_time, Interpolate(t) will return the initial transform, and | 30 // If t <= start_time, Interpolate(t) will return the initial transform, and |
| 31 // if t >= end_time, Interpolate(t) will return the final transform. | 31 // if t >= end_time, Interpolate(t) will return the final transform. |
| 32 InterpolatedTransform(float start_time, float end_time); | 32 InterpolatedTransform(float start_time, float end_time); |
| 33 virtual ~InterpolatedTransform(); | 33 virtual ~InterpolatedTransform(); |
| 34 | 34 |
| 35 // Returns the interpolated transform at time t. Note: not virtual. | 35 // Returns the interpolated transform at time t. Note: not virtual. |
| 36 ui::Transform Interpolate(float t) const; | 36 ui::Transform Interpolate(float t) const; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 65 | 65 |
| 66 DISALLOW_COPY_AND_ASSIGN(InterpolatedTransform); | 66 DISALLOW_COPY_AND_ASSIGN(InterpolatedTransform); |
| 67 }; | 67 }; |
| 68 | 68 |
| 69 /////////////////////////////////////////////////////////////////////////////// | 69 /////////////////////////////////////////////////////////////////////////////// |
| 70 // class InterpolatedRotation | 70 // class InterpolatedRotation |
| 71 // | 71 // |
| 72 // Represents an animated rotation. | 72 // Represents an animated rotation. |
| 73 // | 73 // |
| 74 /////////////////////////////////////////////////////////////////////////////// | 74 /////////////////////////////////////////////////////////////////////////////// |
| 75 class UI_API InterpolatedRotation : public InterpolatedTransform { | 75 class UI_EXPORT InterpolatedRotation : public InterpolatedTransform { |
| 76 public: | 76 public: |
| 77 InterpolatedRotation(float start_degrees, float end_degrees); | 77 InterpolatedRotation(float start_degrees, float end_degrees); |
| 78 InterpolatedRotation(float start_degrees, | 78 InterpolatedRotation(float start_degrees, |
| 79 float end_degrees, | 79 float end_degrees, |
| 80 float start_time, | 80 float start_time, |
| 81 float end_time); | 81 float end_time); |
| 82 virtual ~InterpolatedRotation(); | 82 virtual ~InterpolatedRotation(); |
| 83 | 83 |
| 84 protected: | 84 protected: |
| 85 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; | 85 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; |
| 86 | 86 |
| 87 private: | 87 private: |
| 88 const float start_degrees_; | 88 const float start_degrees_; |
| 89 const float end_degrees_; | 89 const float end_degrees_; |
| 90 | 90 |
| 91 DISALLOW_COPY_AND_ASSIGN(InterpolatedRotation); | 91 DISALLOW_COPY_AND_ASSIGN(InterpolatedRotation); |
| 92 }; | 92 }; |
| 93 | 93 |
| 94 /////////////////////////////////////////////////////////////////////////////// | 94 /////////////////////////////////////////////////////////////////////////////// |
| 95 // class InterpolatedScale | 95 // class InterpolatedScale |
| 96 // | 96 // |
| 97 // Represents an animated scale. | 97 // Represents an animated scale. |
| 98 // | 98 // |
| 99 /////////////////////////////////////////////////////////////////////////////// | 99 /////////////////////////////////////////////////////////////////////////////// |
| 100 class UI_API InterpolatedScale : public InterpolatedTransform { | 100 class UI_EXPORT InterpolatedScale : public InterpolatedTransform { |
| 101 public: | 101 public: |
| 102 InterpolatedScale(float start_scale, float end_scale); | 102 InterpolatedScale(float start_scale, float end_scale); |
| 103 InterpolatedScale(float start_scale, | 103 InterpolatedScale(float start_scale, |
| 104 float end_scale, | 104 float end_scale, |
| 105 float start_time, | 105 float start_time, |
| 106 float end_time); | 106 float end_time); |
| 107 virtual ~InterpolatedScale(); | 107 virtual ~InterpolatedScale(); |
| 108 | 108 |
| 109 protected: | 109 protected: |
| 110 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; | 110 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; |
| 111 | 111 |
| 112 private: | 112 private: |
| 113 const float start_scale_; | 113 const float start_scale_; |
| 114 const float end_scale_; | 114 const float end_scale_; |
| 115 | 115 |
| 116 DISALLOW_COPY_AND_ASSIGN(InterpolatedScale); | 116 DISALLOW_COPY_AND_ASSIGN(InterpolatedScale); |
| 117 }; | 117 }; |
| 118 | 118 |
| 119 class UI_API InterpolatedTranslation : public InterpolatedTransform { | 119 class UI_EXPORT InterpolatedTranslation : public InterpolatedTransform { |
| 120 public: | 120 public: |
| 121 InterpolatedTranslation(const gfx::Point& start_pos, | 121 InterpolatedTranslation(const gfx::Point& start_pos, |
| 122 const gfx::Point& end_pos); | 122 const gfx::Point& end_pos); |
| 123 InterpolatedTranslation(const gfx::Point& start_pos, | 123 InterpolatedTranslation(const gfx::Point& start_pos, |
| 124 const gfx::Point& end_pos, | 124 const gfx::Point& end_pos, |
| 125 float start_time, | 125 float start_time, |
| 126 float end_time); | 126 float end_time); |
| 127 virtual ~InterpolatedTranslation(); | 127 virtual ~InterpolatedTranslation(); |
| 128 | 128 |
| 129 protected: | 129 protected: |
| 130 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; | 130 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; |
| 131 | 131 |
| 132 private: | 132 private: |
| 133 const gfx::Point start_pos_; | 133 const gfx::Point start_pos_; |
| 134 const gfx::Point end_pos_; | 134 const gfx::Point end_pos_; |
| 135 | 135 |
| 136 DISALLOW_COPY_AND_ASSIGN(InterpolatedTranslation); | 136 DISALLOW_COPY_AND_ASSIGN(InterpolatedTranslation); |
| 137 }; | 137 }; |
| 138 | 138 |
| 139 /////////////////////////////////////////////////////////////////////////////// | 139 /////////////////////////////////////////////////////////////////////////////// |
| 140 // class InterpolatedConstantTransform | 140 // class InterpolatedConstantTransform |
| 141 // | 141 // |
| 142 // Represents a transform that is constant over time. This is only useful when | 142 // Represents a transform that is constant over time. This is only useful when |
| 143 // composed with other interpolated transforms. | 143 // composed with other interpolated transforms. |
| 144 // | 144 // |
| 145 // See InterpolatedTransformAboutPivot for an example of its usage. | 145 // See InterpolatedTransformAboutPivot for an example of its usage. |
| 146 // | 146 // |
| 147 /////////////////////////////////////////////////////////////////////////////// | 147 /////////////////////////////////////////////////////////////////////////////// |
| 148 class UI_API InterpolatedConstantTransform : public InterpolatedTransform { | 148 class UI_EXPORT InterpolatedConstantTransform : public InterpolatedTransform { |
| 149 public: | 149 public: |
| 150 InterpolatedConstantTransform(const ui::Transform& transform); | 150 InterpolatedConstantTransform(const ui::Transform& transform); |
| 151 virtual ~InterpolatedConstantTransform(); | 151 virtual ~InterpolatedConstantTransform(); |
| 152 | 152 |
| 153 protected: | 153 protected: |
| 154 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; | 154 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; |
| 155 | 155 |
| 156 private: | 156 private: |
| 157 const ui::Transform transform_; | 157 const ui::Transform transform_; |
| 158 | 158 |
| 159 DISALLOW_COPY_AND_ASSIGN(InterpolatedConstantTransform); | 159 DISALLOW_COPY_AND_ASSIGN(InterpolatedConstantTransform); |
| 160 }; | 160 }; |
| 161 | 161 |
| 162 /////////////////////////////////////////////////////////////////////////////// | 162 /////////////////////////////////////////////////////////////////////////////// |
| 163 // class InterpolatedTransformAboutPivot | 163 // class InterpolatedTransformAboutPivot |
| 164 // | 164 // |
| 165 // Represents an animated transform with a transformed origin. Essentially, | 165 // Represents an animated transform with a transformed origin. Essentially, |
| 166 // at each time, t, the interpolated transform is created by composing | 166 // at each time, t, the interpolated transform is created by composing |
| 167 // P * T * P^-1 where P is a constant transform to the new origin. | 167 // P * T * P^-1 where P is a constant transform to the new origin. |
| 168 // | 168 // |
| 169 /////////////////////////////////////////////////////////////////////////////// | 169 /////////////////////////////////////////////////////////////////////////////// |
| 170 class UI_API InterpolatedTransformAboutPivot : public InterpolatedTransform { | 170 class UI_EXPORT InterpolatedTransformAboutPivot : public InterpolatedTransform { |
| 171 public: | 171 public: |
| 172 // Takes ownership of the passed transform. | 172 // Takes ownership of the passed transform. |
| 173 InterpolatedTransformAboutPivot(const gfx::Point& pivot, | 173 InterpolatedTransformAboutPivot(const gfx::Point& pivot, |
| 174 InterpolatedTransform* transform); | 174 InterpolatedTransform* transform); |
| 175 | 175 |
| 176 // Takes ownership of the passed transform. | 176 // Takes ownership of the passed transform. |
| 177 InterpolatedTransformAboutPivot(const gfx::Point& pivot, | 177 InterpolatedTransformAboutPivot(const gfx::Point& pivot, |
| 178 InterpolatedTransform* transform, | 178 InterpolatedTransform* transform, |
| 179 float start_time, | 179 float start_time, |
| 180 float end_time); | 180 float end_time); |
| 181 virtual ~InterpolatedTransformAboutPivot(); | 181 virtual ~InterpolatedTransformAboutPivot(); |
| 182 | 182 |
| 183 protected: | 183 protected: |
| 184 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; | 184 virtual ui::Transform InterpolateButDoNotCompose(float t) const OVERRIDE; |
| 185 | 185 |
| 186 private: | 186 private: |
| 187 void Init(const gfx::Point& pivot, InterpolatedTransform* transform); | 187 void Init(const gfx::Point& pivot, InterpolatedTransform* transform); |
| 188 | 188 |
| 189 scoped_ptr<InterpolatedTransform> transform_; | 189 scoped_ptr<InterpolatedTransform> transform_; |
| 190 | 190 |
| 191 DISALLOW_COPY_AND_ASSIGN(InterpolatedTransformAboutPivot); | 191 DISALLOW_COPY_AND_ASSIGN(InterpolatedTransformAboutPivot); |
| 192 }; | 192 }; |
| 193 | 193 |
| 194 } // namespace ui | 194 } // namespace ui |
| 195 | 195 |
| 196 #endif // UI_GFX_INTERPOLATED_TRANSFORM_H_ | 196 #endif // UI_GFX_INTERPOLATED_TRANSFORM_H_ |
| OLD | NEW |