/*
 * Copyright 2023 Rive
 */

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

using namespace rivegm;
using namespace rive;

// The fill rule is allowed to mutate during the artboard draw process. Make
// sure this works as expected when renderers defer their drawing.
class MutatingFillRuleGM : public GM
{
public:
    MutatingFillRuleGM() : GM(600, 300) {}

    void onDraw(rive::Renderer* renderer) override
    {
        Path path;
        path_addOval(path, {10, 10, 290, 290});
        path_addOval(path, {50, 50, 250, 250});
        path->fillRule(FillRule::evenOdd);

        Paint paint;
        paint->color(0xffff4040);

        renderer->drawPath(path, paint);

        renderer->translate(300, 0);
        renderer->clipPath(path);

        // Simulate the fill rule mutating during the artboard draw process.
        path->fillRule(FillRule::nonZero);

        renderer->drawPath(PathBuilder::Rect({0, 0, 300, 300}), paint);
    }
};

GMREGISTER(mutating_fill_rule, return new MutatingFillRuleGM())
