transform_animation_curve_adapter.h revision 1675a649fd7a8b3cb80ffddae2dc181f122353c5
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef UI_COMPOSITOR_TRANSFORM_ANIMATION_CURVE_ADAPTER_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define UI_COMPOSITOR_TRANSFORM_ANIMATION_CURVE_ADAPTER_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/animation_curve.h"
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/compositor/compositor_export.h"
11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/gfx/animation/tween.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/transform.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/transform_util.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ui {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class COMPOSITOR_EXPORT TransformAnimationCurveAdapter
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    : public cc::TransformAnimationCurve {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  TransformAnimationCurveAdapter(gfx::Tween::Type tween_type,
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 gfx::Transform intial_value,
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 gfx::Transform target_value,
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 base::TimeDelta duration);
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~TransformAnimationCurveAdapter();
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TransformAnimationCurve implementation.
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual double Duration() const OVERRIDE;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual gfx::Transform GetValue(double t) const OVERRIDE;
313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual bool AnimatedBoundsForBox(const gfx::BoxF& box,
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                    gfx::BoxF* bounds) const OVERRIDE;
33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  virtual bool AffectsScale() const OVERRIDE;
34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual bool IsTranslation() const OVERRIDE;
351675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  virtual bool MaximumTargetScale(bool forward_direction,
361675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch                                  float* max_scale) const OVERRIDE;
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  gfx::Tween::Type tween_type_;
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Transform initial_value_;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Transform target_value_;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::DecomposedTransform decomposed_initial_value_;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::DecomposedTransform decomposed_target_value_;
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::TimeDelta duration_;
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DISALLOW_ASSIGN(TransformAnimationCurveAdapter);
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class COMPOSITOR_EXPORT InverseTransformCurveAdapter
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    : public cc::TransformAnimationCurve {
5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  InverseTransformCurveAdapter(TransformAnimationCurveAdapter base_curve,
5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                               gfx::Transform initial_value,
5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                               base::TimeDelta duration);
5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~InverseTransformCurveAdapter();
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual double Duration() const OVERRIDE;
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE;
6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual gfx::Transform GetValue(double t) const OVERRIDE;
6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual bool AnimatedBoundsForBox(const gfx::BoxF& box,
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                    gfx::BoxF* bounds) const OVERRIDE;
63e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  virtual bool AffectsScale() const OVERRIDE;
64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual bool IsTranslation() const OVERRIDE;
651675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  virtual bool MaximumTargetScale(bool forward_direction,
661675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch                                  float* max_scale) const OVERRIDE;
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private:
6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  TransformAnimationCurveAdapter base_curve_;
7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  gfx::Transform initial_value_;
7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  gfx::Transform effective_initial_value_;
7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::TimeDelta duration_;
7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DISALLOW_ASSIGN(InverseTransformCurveAdapter);
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace ui
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // UI_COMPOSITOR_TRANSFORM_ANIMATION_CURVE_ADAPTER_H_
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
81