/*
 * Copyright 2022 Rive
 */

#include "gm.hpp"
#include "gmutils.hpp"
#include "rive/renderer.hpp"
#include "common/rand.hpp"

using namespace rivegm;
using namespace rive;

constexpr int W = 1000;
constexpr int H = 400;
constexpr int N = 9999;

class VeryComplexGradGM : public GM
{
public:
    VeryComplexGradGM() : GM(W, H) {}

    ColorInt clearColor() const override { return 0xff000000; }

    void onDraw(rive::Renderer* renderer) override
    {
        Rand rand;
        std::vector<ColorInt> colors(N);
        std::vector<float> stops(N);
        for (size_t i = 0; i < N; ++i)
        {
            colors[i] = rand.u32() | 0xff808080;
            stops[i] = std::round(rand.f32() * W) / W;
        }
        std::sort(stops.begin(), stops.end());

        Paint paint;
        paint->shader(
            TestingWindow::Get()->factory()->makeLinearGradient(0,
                                                                0,
                                                                W,
                                                                0,
                                                                colors.data(),
                                                                stops.data(),
                                                                N));

        Path fullscreen = PathBuilder().addRect({0, 0, W, H}).detach();

        renderer->drawPath(fullscreen, paint);
    }
};

GMREGISTER(verycomplexgrad, return new VeryComplexGradGM())
