blob: 6dcbfa494a3f6959ce8adef1f98911b5315c53c4 [file] [log] [blame] [edit]
/*
* 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())