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