#ifndef _RIVE_LINEAR_GRADIENT_HPP_
#define _RIVE_LINEAR_GRADIENT_HPP_
#include "rive/generated/shapes/paint/linear_gradient_base.hpp"
#include "rive/math/vec2d.hpp"
#include "rive/shapes/paint/color.hpp"
#include "rive/shapes/paint/shape_paint_mutator.hpp"
#include <vector>

namespace rive
{
class Node;
class GradientStop;

class LinearGradient : public LinearGradientBase, public ShapePaintMutator
{
private:
    std::vector<GradientStop*> m_Stops;
    Node* m_ShapePaintContainer = nullptr;

public:
    StatusCode onAddedDirty(CoreContext* context) override;
    void addStop(GradientStop* stop);
    void update(ComponentDirt value) override;
    void markGradientDirty();
    void markStopsDirty();

protected:
    void buildDependencies() override;
    void startXChanged() override;
    void startYChanged() override;
    void endXChanged() override;
    void endYChanged() override;
    void opacityChanged() override;
    void renderOpacityChanged() override;
    bool internalIsTranslucent() const override;

    virtual void
    makeGradient(Vec2D start, Vec2D end, const ColorInt[], const float[], size_t count);
};
} // namespace rive

#endif
