blob: 425526e268c0c8e5891e0f1761ed79ec1527e46e [file] [log] [blame] [edit]
/*
* Copyright 2022 Rive
*/
#include "gm.hpp"
#include "gmutils.hpp"
using namespace rivegm;
class RectGM : public GM
{
public:
RectGM() : GM(240, 240) {}
void onDraw(rive::Renderer* ren) override
{
const rive::AABB rect = {0, 0, 120, 120};
const rive::ColorInt colors[] = {
0x80000000,
0x80FF0000,
0x8000FF00,
0x800000FF,
};
Paint paint;
ren->translate(10, 10);
for (int y = 0; y < 2; ++y)
{
for (int x = 0; x < 2; ++x)
{
AutoRestore ar(ren, true);
ren->translate(x * 100, y * 100);
paint->color(colors[y * 2 + x]);
draw_rect(ren, rect, paint);
}
}
}
};
GMREGISTER(rect, return new RectGM)
class RectGradientGM : public GM
{
public:
RectGradientGM() : GM(220, 220) {}
void onDraw(rive::Renderer* ren) override
{
const rive::AABB rect = {0, 0, 100, 100};
const rive::ColorInt colors[] = {
0xFFFF0000,
0xFF00FF00,
0xFF0000FF,
};
const rive::ColorInt grays[] = {
0xFF000000,
0xFFFFFFFF,
};
const float pos[] = {0, 0.5, 1};
const float pos2[] = {0, 1};
struct
{
rive::Vec2D a, b;
int n;
const rive::ColorInt* c;
const float* p;
} rec[] = {
{{rect.minX, rect.minY}, {rect.maxX, rect.maxY}, 3, colors, pos},
{{rect.maxX, rect.minY}, {rect.minX, rect.maxY}, 3, colors, pos},
{{rect.maxX, rect.minY}, {rect.minX, rect.maxY}, 2, grays, pos2},
{{rect.minX, rect.minY}, {rect.maxX, rect.maxY}, 2, grays, pos2},
};
Paint paint;
ren->translate(10, 10);
int i = 0;
for (int y = 0; y < 2; ++y)
{
for (int x = 0; x < 2; ++x)
{
AutoRestore ar(ren, true);
ren->translate(x * 100, y * 100);
auto shader =
TestingWindow::Get()->factory()->makeLinearGradient(
rec[i].a.x,
rec[i].a.y,
rec[i].b.x,
rec[i].b.y,
rec[i].c,
rec[i].p,
rec[i].n);
paint->shader(shader);
draw_rect(ren, rect, paint);
i += 1;
}
}
}
};
GMREGISTER(rect_grad, return new RectGradientGM)