| #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)); |
| } |