blob: 6f0ff55628e3bdaa22fa77311e184687ba56af2e [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/CompositorScrollOffsetAnimationCurve.h"
#include "platform/animation/TimingFunction.h"
#include "cc/animation/scroll_offset_animation_curve.h"
#include "cc/animation/timing_function.h"
using blink::CompositorScrollOffsetAnimationCurve;
using DurationBehavior = cc::ScrollOffsetAnimationCurve::DurationBehavior;
namespace blink {
static DurationBehavior GetDurationBehavior(CompositorScrollOffsetAnimationCurve::ScrollDurationBehavior webDurationBehavior)
{
switch (webDurationBehavior) {
case CompositorScrollOffsetAnimationCurve::ScrollDurationDeltaBased:
return DurationBehavior::DELTA_BASED;
case CompositorScrollOffsetAnimationCurve::ScrollDurationConstant:
return DurationBehavior::CONSTANT;
case CompositorScrollOffsetAnimationCurve::ScrollDurationInverseDelta:
return DurationBehavior::INVERSE_DELTA;
}
NOTREACHED();
return DurationBehavior::DELTA_BASED;
}
CompositorScrollOffsetAnimationCurve::CompositorScrollOffsetAnimationCurve(
FloatPoint targetValue,
ScrollDurationBehavior durationBehavior)
: m_curve(cc::ScrollOffsetAnimationCurve::Create(
gfx::ScrollOffset(targetValue.x(), targetValue.y()),
cc::CubicBezierTimingFunction::CreatePreset(CubicBezierTimingFunction::EaseType::EASE_IN_OUT),
GetDurationBehavior(durationBehavior)))
{
}
CompositorScrollOffsetAnimationCurve::CompositorScrollOffsetAnimationCurve(
cc::ScrollOffsetAnimationCurve* curve)
: m_curve(curve->CloneToScrollOffsetAnimationCurve())
{
}
CompositorScrollOffsetAnimationCurve::~CompositorScrollOffsetAnimationCurve()
{
}
void CompositorScrollOffsetAnimationCurve::setInitialValue(FloatPoint initialValue)
{
m_curve->SetInitialValue(gfx::ScrollOffset(initialValue.x(), initialValue.y()));
}
FloatPoint CompositorScrollOffsetAnimationCurve::getValue(double time) const
{
gfx::ScrollOffset value = m_curve->GetValue(base::TimeDelta::FromSecondsD(time));
return FloatPoint(value.x(), value.y());
}
void CompositorScrollOffsetAnimationCurve::applyAdjustment(IntSize adjustment)
{
m_curve->ApplyAdjustment(gfx::Vector2dF(adjustment.width(), adjustment.height()));
}
double CompositorScrollOffsetAnimationCurve::duration() const
{
return m_curve->Duration().InSecondsF();
}
FloatPoint CompositorScrollOffsetAnimationCurve::targetValue() const
{
gfx::ScrollOffset target = m_curve->target_value();
return FloatPoint(target.x(), target.y());
}
void CompositorScrollOffsetAnimationCurve::updateTarget(double time, FloatPoint newTarget)
{
m_curve->UpdateTarget(time, gfx::ScrollOffset(newTarget.x(), newTarget.y()));
}
std::unique_ptr<cc::AnimationCurve> CompositorScrollOffsetAnimationCurve::cloneToAnimationCurve() const
{
return m_curve->Clone();
}
} // namespace blink