//////////////////////////////////////////////////////////////////////////////////////////////////// // NoesisGUI - http://www.noesisengine.com // Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved. //////////////////////////////////////////////////////////////////////////////////////////////////// #ifndef __GUI_EASINGDOUBLEKEYFRAME_H__ #define __GUI_EASINGDOUBLEKEYFRAME_H__ #include #include #include #include namespace Noesis { class EasingFunctionBase; //////////////////////////////////////////////////////////////////////////////////////////////////// /// A class that enables you to associate easing functions with a DoubleAnimationUsingKeyFrames /// key frame animation. /// /// The following example shows how to use key frames with easing functions associated with them to /// create an animation of a rectangle that contracts upward, slows down, then expands downward (as /// though falling), and then bounces to a stop. /// /// .. code-block:: xml /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// This class is used as part of a DoubleKeyFrameCollection in conjunction with a /// DoubleAnimationUsingKeyFrames to animate a Double property value along a set of key frames. /// This DoubleKeyFrame interpolates between the Double value of the previous key frame and its own /// value linearly with an easing function to produce its output value. /// /// http://msdn.microsoft.com/en-us/library/system.windows.media.animation.easingdoublekeyframe.aspx //////////////////////////////////////////////////////////////////////////////////////////////////// class NS_GUI_ANIMATION_API EasingDoubleKeyFrame final: public DoubleKeyFrame { public: /// Gets or sets the easing function applied to the key frame //@{ EasingFunctionBase* GetEasingFunction() const; void SetEasingFunction(EasingFunctionBase* function); //@} // Hides Freezable methods for convenience //@{ Ptr Clone() const; Ptr CloneCurrentValue() const; //@} public: /// Dependency properties //@{ static const DependencyProperty* EasingFunctionProperty; //@} protected: /// From Freezable //@{ Ptr CreateInstanceCore() const override; //@} /// From KeyFrame //@{ float InterpolateValueCore(float baseValue, float keyFrameProgress) override; //@} NS_DECLARE_REFLECTION(EasingDoubleKeyFrame, DoubleKeyFrame) }; } #endif