/* * Copyright (C) 2010 Canonical, Ltd. * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License * version 3.0 as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3.0 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see * . * * Authored by Gordon Allott */ #ifndef TIMELINE_H #define TIMELINE_H namespace nux { class Timeline : public Object { public: Timeline(unsigned int msecs, const char *Caption, NUX_FILE_LINE_DECL); ~Timeline(); void Stop(); void Start(); void Pause(); void Rewind(); double GetProgress(); //ranges from 0.0 -> 1.0 virtual double GetEasing(); // override to provide easing values void DoTick(unsigned long msecs); // If you use this, you make baby kittens cry bool Looping; unsigned long Duration; bool IsPlaying; sigc::signal NewFrame; sigc::signal Completed; sigc::signal Started; sigc::signal Paused; protected: unsigned long _ElapsedTime; }; // template // class PropertyAnimationContainer // { // }; // class AnimatedPropertyBase // { // public: // AnimatedPropertyBase(){}; // virtual void Animate(float t){}; // }; // // Explicit specialization. The explicit type could be float, int, Color.... // template <> // class PropertyAnimationContainer : public AnimatedPropertyBase // { // public: // PropertyAnimationContainer(Property& prop, float start_value, float end_value) // : prop_(prop) // { // start_value_ = start_value; // end_value_ = end_value; // } // virtual void Animate(float t) // { // float value = (1.0f - t) * start_value_ + t * end_value_; // prop_.set(value); // } // Property& prop_; // float start_value_; // float end_value_; // }; // template <> // class PropertyAnimationContainer : public AnimatedPropertyBase // { // public: // PropertyAnimationContainer(Property& prop, Color start_value, Color end_value) // : prop_(prop) // { // start_value_ = start_value; // end_value_ = end_value; // } // virtual void Animate(float t) // { // Color value = (1.0f - t) * start_value_ + t * end_value_; // prop_.set(value); // } // Property& prop_; // Color start_value_; // Color end_value_; // }; // class AnimationTimeline : public Object // { // public: // AnimationTimeline() {}; // template // void AddProperty(Property& prop, T start_value, T end_value) // { // PropertyAnimationContainer* a = new PropertyAnimationContainer (prop, start_value, end_value); // animated_properties_.push_back(a); // } // void Animate(float t) // { // std::list::iterator it; // // Go through all the properties and update them. // for (it = animated_properties_.begin(); it != animated_properties_.end(); ++it) // { // (*it)->Animate(t); // } // } // std::list animated_properties_; // }; } #endif // TIMELINE_H