// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CC_ANIMATION_ANIMATION_CURVE_H_
#define CC_ANIMATION_ANIMATION_CURVE_H_

#include "base/memory/scoped_ptr.h"
#include "cc/base/cc_export.h"
#include "cc/output/filter_operations.h"
#include "ui/gfx/transform.h"

namespace gfx {
class BoxF;
}

namespace cc {

class ColorAnimationCurve;
class FilterAnimationCurve;
class FloatAnimationCurve;
class ScrollOffsetAnimationCurve;
class TransformAnimationCurve;
class TransformOperations;

// An animation curve is a function that returns a value given a time.
class CC_EXPORT AnimationCurve {
 public:
  enum CurveType { Color, Float, Transform, Filter, ScrollOffset };

  virtual ~AnimationCurve() {}

  virtual double Duration() const = 0;
  virtual CurveType Type() const = 0;
  virtual scoped_ptr<AnimationCurve> Clone() const = 0;

  const ColorAnimationCurve* ToColorAnimationCurve() const;
  const FloatAnimationCurve* ToFloatAnimationCurve() const;
  const TransformAnimationCurve* ToTransformAnimationCurve() const;
  const FilterAnimationCurve* ToFilterAnimationCurve() const;
  const ScrollOffsetAnimationCurve* ToScrollOffsetAnimationCurve() const;

  ScrollOffsetAnimationCurve* ToScrollOffsetAnimationCurve();
};

class CC_EXPORT ColorAnimationCurve : public AnimationCurve {
 public:
  ~ColorAnimationCurve() override {}

  virtual SkColor GetValue(double t) const = 0;

  // Partial Animation implementation.
  CurveType Type() const override;
};

class CC_EXPORT FloatAnimationCurve : public AnimationCurve {
 public:
  ~FloatAnimationCurve() override {}

  virtual float GetValue(double t) const = 0;

  // Partial Animation implementation.
  CurveType Type() const override;
};

class CC_EXPORT TransformAnimationCurve : public AnimationCurve {
 public:
  ~TransformAnimationCurve() override {}

  virtual gfx::Transform GetValue(double t) const = 0;

  // Sets |bounds| to be the bounding box for the region within which |box|
  // will move during this animation. If this region cannot be computed,
  // returns false.
  virtual bool AnimatedBoundsForBox(const gfx::BoxF& box,
                                    gfx::BoxF* bounds) const = 0;

  // Returns true if this animation affects scale.
  virtual bool AffectsScale() const = 0;

  // Returns true if this animation is a translation.
  virtual bool IsTranslation() const = 0;

  // Set |max_scale| to the maximum scale along any dimension at the end of
  // intermediate animation target points (eg keyframe end points). When
  // |forward_direction| is true, the animation curve assumes it plays from
  // the first keyframe to the last, otherwise it assumes the opposite. Returns
  // false if the maximum scale cannot be computed.
  virtual bool MaximumTargetScale(bool forward_direction,
                                  float* max_scale) const = 0;

  // Partial Animation implementation.
  CurveType Type() const override;
};

class CC_EXPORT FilterAnimationCurve : public AnimationCurve {
 public:
  ~FilterAnimationCurve() override {}

  virtual FilterOperations GetValue(double t) const = 0;
  virtual bool HasFilterThatMovesPixels() const = 0;

  // Partial Animation implementation.
  CurveType Type() const override;
};

}  // namespace cc

#endif  // CC_ANIMATION_ANIMATION_CURVE_H_
