/*
 * 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())
