blob: b9788c9e10c9748c3b007026bd15051afd0f5915 [file] [log] [blame]
#include "rive/animation/keyframe_color.hpp"
#include "rive/generated/core_registry.hpp"
#include "rive/shapes/paint/color.hpp"
using namespace rive;
static void applyColor(Core* object, int propertyKey, float mix, int value)
{
if (mix == 1.0f)
{
CoreRegistry::setColor(object, propertyKey, value);
}
else
{
auto mixedColor = colorLerp(CoreRegistry::getColor(object, propertyKey), value, mix);
CoreRegistry::setColor(object, propertyKey, mixedColor);
}
}
void KeyFrameColor::apply(Core* object, int propertyKey, float mix)
{
applyColor(object, propertyKey, mix, value());
}
void KeyFrameColor::applyInterpolation(Core* object,
int propertyKey,
float currentTime,
const KeyFrame* nextFrame,
float mix)
{
auto kfc = nextFrame->as<KeyFrameColor>();
const KeyFrameColor& nextColor = *kfc;
float f = (currentTime - seconds()) / (nextColor.seconds() - seconds());
if (CubicInterpolator* cubic = interpolator())
{
f = cubic->transform(f);
}
applyColor(object, propertyKey, mix, colorLerp(value(), nextColor.value(), f));
}