blob: c45f3bd1cbd1c036d77e2871e01a1fea70b5143b [file] [log] [blame]
#ifndef _RIVE_KEYED_PROPERTY_HPP_
#define _RIVE_KEYED_PROPERTY_HPP_
#include "rive/generated/animation/keyed_property_base.hpp"
#include <vector>
namespace rive
{
class KeyFrame;
class KeyedCallbackReporter;
class KeyedProperty : public KeyedPropertyBase
{
public:
KeyedProperty();
~KeyedProperty() override;
void addKeyFrame(std::unique_ptr<KeyFrame>);
StatusCode onAddedClean(CoreContext* context) override;
StatusCode onAddedDirty(CoreContext* context) override;
/// Report any keyframes that occured between secondsFrom and secondsTo.
void reportKeyedCallbacks(KeyedCallbackReporter* reporter,
uint32_t objectId,
float secondsFrom,
float secondsTo,
int secondsFromExactOffset) const;
/// Apply interpolating key frames.
void apply(Core* object, float time, float mix);
StatusCode import(ImportStack& importStack) override;
private:
int closestFrameIndex(float seconds, int exactOffset = 0) const;
std::vector<std::unique_ptr<KeyFrame>> m_keyFrames;
};
} // namespace rive
#endif