blob: d294fb5962e01b776f79401f894f919f4fb4179a [file] [log] [blame]
// Copyright 2016 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.
#include "platform/animation/CompositorFloatAnimationCurve.h"
#include "cc/animation/animation_curve.h"
#include "cc/animation/keyframed_animation_curve.h"
#include "cc/animation/timing_function.h"
using blink::CompositorFloatKeyframe;
namespace blink {
CompositorFloatAnimationCurve::CompositorFloatAnimationCurve()
: m_curve(cc::KeyframedFloatAnimationCurve::Create())
{
}
CompositorFloatAnimationCurve::~CompositorFloatAnimationCurve()
{
}
CompositorAnimationCurve::AnimationCurveType CompositorFloatAnimationCurve::type() const
{
return CompositorAnimationCurve::AnimationCurveTypeFloat;
}
void CompositorFloatAnimationCurve::add(const CompositorFloatKeyframe& keyframe)
{
add(keyframe, TimingFunctionTypeEase);
}
void CompositorFloatAnimationCurve::add(const CompositorFloatKeyframe& keyframe,
TimingFunctionType type)
{
m_curve->AddKeyframe(
cc::FloatKeyframe::Create(base::TimeDelta::FromSecondsD(keyframe.time),
keyframe.value, createTimingFunction(type)));
}
void CompositorFloatAnimationCurve::add(const CompositorFloatKeyframe& keyframe, double x1, double y1, double x2, double y2)
{
m_curve->AddKeyframe(cc::FloatKeyframe::Create(
base::TimeDelta::FromSecondsD(keyframe.time), keyframe.value,
cc::CubicBezierTimingFunction::Create(x1, y1, x2, y2)));
}
void CompositorFloatAnimationCurve::add(const CompositorFloatKeyframe& keyframe, int steps, StepsTimingFunction::StepPosition stepPosition)
{
m_curve->AddKeyframe(cc::FloatKeyframe::Create(
base::TimeDelta::FromSecondsD(keyframe.time), keyframe.value,
cc::StepsTimingFunction::Create(steps, stepPosition)));
}
void CompositorFloatAnimationCurve::setLinearTimingFunction()
{
m_curve->SetTimingFunction(nullptr);
}
void CompositorFloatAnimationCurve::setCubicBezierTimingFunction(TimingFunctionType type)
{
m_curve->SetTimingFunction(createTimingFunction(type));
}
void CompositorFloatAnimationCurve::setCubicBezierTimingFunction(double x1, double y1, double x2, double y2)
{
m_curve->SetTimingFunction(cc::CubicBezierTimingFunction::Create(x1, y1, x2, y2));
}
void CompositorFloatAnimationCurve::setStepsTimingFunction(int numberOfSteps, StepsTimingFunction::StepPosition stepPosition)
{
m_curve->SetTimingFunction(cc::StepsTimingFunction::Create(numberOfSteps, stepPosition));
}
float CompositorFloatAnimationCurve::getValue(double time) const
{
return m_curve->GetValue(base::TimeDelta::FromSecondsD(time));
}
std::unique_ptr<cc::AnimationCurve> CompositorFloatAnimationCurve::cloneToAnimationCurve() const
{
return m_curve->Clone();
}
} // namespace blink