blob: 074d92e24c55ea20a6b11e3d353248c4e3a08326 [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));
}