diff options
Diffstat (limited to 'ui/base/animation')
-rw-r--r-- | ui/base/animation/tween.cc | 43 | ||||
-rw-r--r-- | ui/base/animation/tween.h | 12 |
2 files changed, 51 insertions, 4 deletions
diff --git a/ui/base/animation/tween.cc b/ui/base/animation/tween.cc index 515ae57..a16bb18 100644 --- a/ui/base/animation/tween.cc +++ b/ui/base/animation/tween.cc @@ -11,7 +11,10 @@ #endif #include "base/logging.h" -#include "ui/gfx/rect.h" + +#if !defined(OS_MACOSX) +#include "ui/gfx/interpolated_transform.h" +#endif namespace ui { @@ -83,4 +86,42 @@ gfx::Rect Tween::ValueBetween(double value, target_bounds.height())); } +#if !defined(OS_MACOSX) +// static +Transform Tween::ValueBetween(double value, + const Transform& start_transform, + const Transform& end_transform) { + Transform to_return; + gfx::Point start_translation, end_translation; + float start_rotation, end_rotation; + gfx::Point3f start_scale, end_scale; + if (InterpolatedTransform::FactorTRS(start_transform, + &start_translation, + &start_rotation, + &start_scale) && + InterpolatedTransform::FactorTRS(end_transform, + &end_translation, + &end_rotation, + &end_scale)) { + to_return.SetScale(ValueBetween(value, start_scale.x(), end_scale.x()), + ValueBetween(value, start_scale.y(), end_scale.y())); + to_return.ConcatRotate(ValueBetween(value, start_rotation, end_rotation)); + to_return.ConcatTranslate( + ValueBetween(value, start_translation.x(), end_translation.x()), + ValueBetween(value, start_translation.y(), end_translation.y())); + } else { + for (int row = 0; row < 4; ++row) { + for (int col = 0; col < 4; ++col) { + to_return.matrix().set(row, col, + ValueBetween(value, + start_transform.matrix().get(row, col), + end_transform.matrix().get(row, col))); + } + } + } + + return to_return; +} +#endif + } // namespace ui diff --git a/ui/base/animation/tween.h b/ui/base/animation/tween.h index 6bde5dd..02c08c5 100644 --- a/ui/base/animation/tween.h +++ b/ui/base/animation/tween.h @@ -8,10 +8,11 @@ #include "base/basictypes.h" #include "ui/base/ui_export.h" +#include "ui/gfx/rect.h" -namespace gfx { -class Rect; -} +#if !defined(OS_MACOSX) +#include "ui/gfx/transform.h" +#endif namespace ui { @@ -36,6 +37,11 @@ class UI_EXPORT Tween { static gfx::Rect ValueBetween(double value, const gfx::Rect& start_bounds, const gfx::Rect& target_bounds); +#if !defined(OS_MACOSX) + static Transform ValueBetween(double value, + const Transform& start_transform, + const Transform& target_transform); +#endif private: Tween(); |