blob: 1880daeb2d82db9b1b9e2cb29e3931325272082e [file] [log] [blame]
// Copyright 2015 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef COBALT_CSSOM_ANIMATION_H_
#define COBALT_CSSOM_ANIMATION_H_
#include <string>
#include "base/memory/ref_counted.h"
#include "base/time/time.h"
#include "cobalt/cssom/css_keyframes_rule.h"
#include "cobalt/cssom/property_definitions.h"
#include "cobalt/cssom/timing_function.h"
namespace cobalt {
namespace cssom {
// The Animation class defines a descriptive object that defines a CSS
// Animation and contains a reference to the CSSKeyframesRule that the
// animation references.
class Animation {
public:
// Determines how the animation should interact with the style before the
// animation starts and after it ends.
enum FillMode {
kNone,
kForwards,
kBackwards,
kBoth,
};
// Determines what direction the animation should play in.
enum PlaybackDirection {
kNormal,
kReverse,
kAlternate,
kAlternateReverse,
};
Animation(const std::string& name,
const scoped_refptr<CSSKeyframesRule>& keyframes,
base::TimeDelta start_time, base::TimeDelta delay,
base::TimeDelta duration, FillMode fill_mode, float iteration_count,
PlaybackDirection direction,
const scoped_refptr<TimingFunction>& timing_function)
: name_(name),
keyframes_(keyframes),
start_time_(start_time),
delay_(delay),
duration_(duration),
fill_mode_(fill_mode),
iteration_count_(iteration_count),
direction_(direction),
timing_function_(timing_function) {}
// Returns the 'animation-name' property value.
const std::string& name() const { return name_; }
// Returns the looked up CSSKeyframesRule referenced by 'animation-name'.
const scoped_refptr<CSSKeyframesRule>& keyframes() const {
return keyframes_;
}
// Returns the animation's start time, provided to the constructor.
base::TimeDelta start_time() const { return start_time_; }
// Returns the 'animation-duration' property value.
base::TimeDelta duration() const { return duration_; }
// Returns the 'animation-delay' property value.
base::TimeDelta delay() const { return delay_; }
// Returns the 'animation-fill-mode' property value.
FillMode fill_mode() const { return fill_mode_; }
// Returns the 'animation-iteration-count' property value.
float iteration_count() const { return iteration_count_; }
// Returns the 'animation-direction' property value.
PlaybackDirection direction() const { return direction_; }
// Returns the 'animation-timing-function' property value.
const scoped_refptr<TimingFunction>& timing_function() const {
return timing_function_;
}
private:
std::string name_;
scoped_refptr<CSSKeyframesRule> keyframes_;
base::TimeDelta start_time_;
base::TimeDelta delay_;
base::TimeDelta duration_;
FillMode fill_mode_;
float iteration_count_;
PlaybackDirection direction_;
scoped_refptr<TimingFunction> timing_function_;
};
} // namespace cssom
} // namespace cobalt
#endif // COBALT_CSSOM_ANIMATION_H_