blob: 5a66f6376ed002971f36e052e1b88a1cda53c998 [file]
#ifndef _RIVE_INTERPOLATING_KEY_FRAME_HPP_
#define _RIVE_INTERPOLATING_KEY_FRAME_HPP_
#include "rive/generated/animation/interpolating_keyframe_base.hpp"
namespace rive
{
class KeyFrameInterpolator;
class LinearAnimationInstance;
class InterpolatingKeyFrame : public InterpolatingKeyFrameBase
{
public:
inline KeyFrameInterpolator* interpolator() const { return m_interpolator; }
/// Returns the interpolator that should run for this keyframe given the
/// LAI context. For ScriptedInterpolators this resolves to the per-(LAI,
/// keyframe) stateful clone; for everything else (or when context is
/// null) it returns the shared `m_interpolator`. Defined out-of-line so
/// the header doesn't have to drag in linear_animation_instance.hpp.
KeyFrameInterpolator* effectiveInterpolator(
const LinearAnimationInstance* context) const;
virtual void apply(
Core* object,
int propertyKey,
float mix,
const LinearAnimationInstance* context = nullptr) = 0;
virtual void applyInterpolation(
Core* object,
int propertyKey,
float seconds,
const KeyFrame* nextFrame,
float mix,
const LinearAnimationInstance* context = nullptr) = 0;
StatusCode onAddedDirty(CoreContext* context) override;
private:
KeyFrameInterpolator* m_interpolator = nullptr;
};
} // namespace rive
#endif