// 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.

#ifndef SKY_ENGINE_CORE_ANIMATION_ANIMATIONNODETIMING_H_
#define SKY_ENGINE_CORE_ANIMATION_ANIMATIONNODETIMING_H_

#include "sky/engine/tonic/dart_wrappable.h"
#include "sky/engine/bindings/nullable.h"
#include "sky/engine/core/animation/AnimationNode.h"
#include "sky/engine/wtf/RefCounted.h"
#include "sky/engine/wtf/text/WTFString.h"

namespace blink {

class AnimationNodeTiming : public RefCounted<AnimationNodeTiming>, public DartWrappable {
    DEFINE_WRAPPERTYPEINFO();
public:
    static PassRefPtr<AnimationNodeTiming> create(AnimationNode* parent);
    double delay();
    double endDelay();
    String fill();
    double iterationStart();
    double iterations();
    String getDuration(String propertyName);
    double playbackRate();
    String direction();
    String easing();

    void setDelay(double);
    void setEndDelay(double);
    void setFill(String);
    void setIterationStart(double);
    void setIterations(double);
    bool setDuration(String name, double duration);
    void setPlaybackRate(double);
    void setDirection(String);
    void setEasing(String);

private:
    RefPtr<AnimationNode> m_parent;
    explicit AnimationNodeTiming(AnimationNode*);
};

} // namespace blink

#endif  // SKY_ENGINE_CORE_ANIMATION_ANIMATIONNODETIMING_H_
