blob: d07c5b90bed21b89585229ed6005a9a68922c9e2 [file] [log] [blame]
// 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 "config.h"
#include "core/animation/AnimationEffectTiming.h"
#include "bindings/core/v8/UnionTypesCore.h"
#include "core/animation/AnimationEffect.h"
#include "core/animation/KeyframeEffect.h"
#include "platform/animation/TimingFunction.h"
namespace blink {
AnimationEffectTiming* AnimationEffectTiming::create(AnimationEffect* parent)
{
return new AnimationEffectTiming(parent);
}
AnimationEffectTiming::AnimationEffectTiming(AnimationEffect* parent)
: m_parent(parent)
{
}
double AnimationEffectTiming::delay()
{
return m_parent->specifiedTiming().startDelay * 1000;
}
double AnimationEffectTiming::endDelay()
{
return m_parent->specifiedTiming().endDelay * 1000;
}
String AnimationEffectTiming::fill()
{
return Timing::fillModeString(m_parent->specifiedTiming().fillMode);
}
double AnimationEffectTiming::iterationStart()
{
return m_parent->specifiedTiming().iterationStart;
}
double AnimationEffectTiming::iterations()
{
return m_parent->specifiedTiming().iterationCount;
}
void AnimationEffectTiming::duration(UnrestrictedDoubleOrString& returnValue)
{
if (std::isnan(m_parent->specifiedTiming().iterationDuration))
returnValue.setString("auto");
else
returnValue.setUnrestrictedDouble(m_parent->specifiedTiming().iterationDuration * 1000);
}
double AnimationEffectTiming::playbackRate()
{
return m_parent->specifiedTiming().playbackRate;
}
String AnimationEffectTiming::direction()
{
return Timing::playbackDirectionString(m_parent->specifiedTiming().direction);
}
String AnimationEffectTiming::easing()
{
return m_parent->specifiedTiming().timingFunction->toString();
}
void AnimationEffectTiming::setDelay(double delay)
{
Timing timing = m_parent->specifiedTiming();
TimingInput::setStartDelay(timing, delay);
m_parent->updateSpecifiedTiming(timing);
}
void AnimationEffectTiming::setEndDelay(double endDelay)
{
Timing timing = m_parent->specifiedTiming();
TimingInput::setEndDelay(timing, endDelay);
m_parent->updateSpecifiedTiming(timing);
}
void AnimationEffectTiming::setFill(String fill)
{
Timing timing = m_parent->specifiedTiming();
TimingInput::setFillMode(timing, fill);
m_parent->updateSpecifiedTiming(timing);
}
void AnimationEffectTiming::setIterationStart(double iterationStart)
{
Timing timing = m_parent->specifiedTiming();
TimingInput::setIterationStart(timing, iterationStart);
m_parent->updateSpecifiedTiming(timing);
}
void AnimationEffectTiming::setIterations(double iterations)
{
Timing timing = m_parent->specifiedTiming();
TimingInput::setIterationCount(timing, iterations);
m_parent->updateSpecifiedTiming(timing);
}
void AnimationEffectTiming::setDuration(const UnrestrictedDoubleOrString& durationOrAuto)
{
// Any strings other than "auto" are coerced to "auto".
double duration = durationOrAuto.isString() ? std::numeric_limits<double>::quiet_NaN() : durationOrAuto.getAsUnrestrictedDouble();
Timing timing = m_parent->specifiedTiming();
TimingInput::setIterationDuration(timing, duration);
m_parent->updateSpecifiedTiming(timing);
}
void AnimationEffectTiming::setPlaybackRate(double playbackRate)
{
Timing timing = m_parent->specifiedTiming();
TimingInput::setPlaybackRate(timing, playbackRate);
m_parent->updateSpecifiedTiming(timing);
}
void AnimationEffectTiming::setDirection(String direction)
{
Timing timing = m_parent->specifiedTiming();
TimingInput::setPlaybackDirection(timing, direction);
m_parent->updateSpecifiedTiming(timing);
}
void AnimationEffectTiming::setEasing(String easing)
{
Timing timing = m_parent->specifiedTiming();
TimingInput::setTimingFunction(timing, easing);
m_parent->updateSpecifiedTiming(timing);
}
DEFINE_TRACE(AnimationEffectTiming)
{
visitor->trace(m_parent);
}
} // namespace blink