| /* | |
| * Copyright 2014 Google Inc. | |
| * Copyright 2022 Rive | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "gm.hpp" | |
| #include "gmutils.hpp" | |
| #include "common/rand.hpp" | |
| using namespace rivegm; | |
| using namespace rive; | |
| #define W 400 | |
| #define H 400 | |
| #define N 10 | |
| constexpr float SH = H; | |
| static Path rnd_quad(RenderPaint* paint, Rand& rand) | |
| { | |
| auto a = rand.f32(0, W), b = rand.f32(0, H); | |
| PathBuilder builder; | |
| builder.moveTo(a, b); | |
| for (int x = 0; x < 2; ++x) | |
| { | |
| auto c = rand.f32(W / 4.f, W), d = rand.f32(0, H), e = rand.f32(0, W), | |
| f = rand.f32(H / 4.f, H); | |
| builder.quadTo(c, d, e, f); | |
| } | |
| paint->color(rand.u32()); | |
| float width = rand.f32(1, 5); | |
| width *= width; | |
| paint->thickness(width); | |
| return builder.detach(); | |
| } | |
| static Path rnd_cubic(RenderPaint* paint, Rand& rand) | |
| { | |
| auto a = rand.f32(0, W), b = rand.f32(0, H); | |
| PathBuilder builder; | |
| builder.moveTo(a, b); | |
| for (int x = 0; x < 2; ++x) | |
| { | |
| auto c = rand.f32(W / 4.f, W), d = rand.f32(0, H), e = rand.f32(0, W), | |
| f = rand.f32(H / 4.f, H), g = rand.f32(W / 4.f, W), | |
| h = rand.f32(H / 4.f, H); | |
| builder.cubicTo(c, d, e, f, g, h); | |
| } | |
| paint->color(rand.u32()); | |
| float width = rand.f32(1, 5); | |
| width *= width; | |
| paint->thickness(width); | |
| return builder.detach(); | |
| } | |
| class BeziersGM : public GM | |
| { | |
| public: | |
| BeziersGM() : GM(W, H * 2) {} | |
| protected: | |
| void onDraw(Renderer* canvas) override | |
| { | |
| Paint paint; | |
| paint->style(RenderPaintStyle::stroke); | |
| paint->thickness(9.0f / 2.0f); | |
| Rand rand; | |
| for (int i = 0; i < N; i++) | |
| { | |
| canvas->drawPath(rnd_quad(paint, rand), paint); | |
| } | |
| canvas->translate(0, SH); | |
| for (int i = 0; i < N; i++) | |
| { | |
| canvas->drawPath(rnd_cubic(paint, rand), paint); | |
| } | |
| } | |
| }; | |
| GMREGISTER(beziers, return new BeziersGM;) |