// Copyright 2014 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 "cc/blink/web_scroll_offset_animation_curve_impl.h" #include "cc/animation/scroll_offset_animation_curve.h" #include "cc/animation/timing_function.h" #include "cc/blink/web_animation_curve_common.h" using blink::WebFloatPoint; using blink::WebScrollOffsetAnimationCurve; using DurationBehavior = cc::ScrollOffsetAnimationCurve::DurationBehavior; namespace cc_blink { static DurationBehavior GetDurationBehavior( WebScrollOffsetAnimationCurve::ScrollDurationBehavior webDurationBehavior) { switch (webDurationBehavior) { case WebScrollOffsetAnimationCurve::ScrollDurationDeltaBased: return DurationBehavior::DELTA_BASED; case WebScrollOffsetAnimationCurve::ScrollDurationConstant: return DurationBehavior::CONSTANT; } NOTREACHED(); return DurationBehavior::DELTA_BASED; } WebScrollOffsetAnimationCurveImpl::WebScrollOffsetAnimationCurveImpl( WebFloatPoint target_value, TimingFunctionType timing_function, ScrollDurationBehavior duration_behavior) : curve_(cc::ScrollOffsetAnimationCurve::Create( gfx::ScrollOffset(target_value.x, target_value.y), CreateTimingFunction(timing_function), GetDurationBehavior(duration_behavior))) {} WebScrollOffsetAnimationCurveImpl::~WebScrollOffsetAnimationCurveImpl() { } blink::WebCompositorAnimationCurve::AnimationCurveType WebScrollOffsetAnimationCurveImpl::type() const { return WebCompositorAnimationCurve::AnimationCurveTypeScrollOffset; } void WebScrollOffsetAnimationCurveImpl::setInitialValue( WebFloatPoint initial_value) { curve_->SetInitialValue(gfx::ScrollOffset(initial_value.x, initial_value.y)); } WebFloatPoint WebScrollOffsetAnimationCurveImpl::getValue(double time) const { gfx::ScrollOffset value = curve_->GetValue(base::TimeDelta::FromSecondsD(time)); return WebFloatPoint(value.x(), value.y()); } double WebScrollOffsetAnimationCurveImpl::duration() const { return curve_->Duration().InSecondsF(); } WebFloatPoint WebScrollOffsetAnimationCurveImpl::targetValue() const { gfx::ScrollOffset target = curve_->target_value(); return WebFloatPoint(target.x(), target.y()); } void WebScrollOffsetAnimationCurveImpl::updateTarget(double time, WebFloatPoint new_target) { curve_->UpdateTarget(time, gfx::ScrollOffset(new_target.x, new_target.y)); } scoped_ptr WebScrollOffsetAnimationCurveImpl::CloneToAnimationCurve() const { return curve_->Clone(); } } // namespace cc_blink