blob: c4e4515f618c2a4b809d1f568877373c8da63dad [file] [log] [blame]
/*
* Copyright 2025 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "gm/gm.h"
#include "include/core/SkCanvas.h"
#include "include/core/SkPaint.h"
#include "include/core/SkPath.h"
#include "include/core/SkRect.h"
using DrawRectProc = void(SkCanvas*, const SkRect&, const SkPaint&);
static void draw_rect_as_rect_proc(SkCanvas* canvas, const SkRect& rect, const SkPaint& paint) {
canvas->drawRect(rect, paint);
}
static void draw_rect_with_path_proc(SkCanvas* canvas, const SkRect& rect, const SkPaint& paint) {
canvas->drawPath(SkPath::Rect(rect), paint);
}
constexpr int GM_WIDTH = 1150, GM_HEIGHT = 920;
DEF_SIMPLE_GM(rect_poly_stroke, canvas, GM_WIDTH, GM_HEIGHT) {
struct DrawRec {
DrawRectProc* proc;
SkColor color;
};
DrawRec const recs[] = {
{draw_rect_as_rect_proc, SK_ColorBLACK},
{draw_rect_with_path_proc, 0xFF000088},
};
constexpr float W = 100, H = 80;
const SkRect rects[] = {
{0, 0, W, H},
{0, 0, W, 0},
{0, 0, 0, H},
{0, 0, 0, 0}, // we don't expect this to draw anything
};
constexpr float spacing = 150;
const float degrees[] = { 0, -30 };
constexpr float thickness = 20;
const SkPaint::Join joins[] = {
SkPaint::kMiter_Join,
SkPaint::kRound_Join,
SkPaint::kBevel_Join,
};
canvas->translate(30, 50);
SkPaint paint;
paint.setAntiAlias(true);
paint.setStroke(true);
paint.setStrokeWidth(thickness);
for (auto j : joins) {
paint.setStrokeJoin(j);
canvas->save();
for (auto r : rects) {
for (auto angle : degrees) {
canvas->save();
for (auto rec : recs) {
canvas->save();
canvas->rotate(angle, r.centerX(), r.centerY());
{
paint.setStrokeWidth(thickness);
paint.setColor(rec.color);
rec.proc(canvas, r, paint);
paint.setStrokeWidth(0);
paint.setColor(SK_ColorGREEN);
rec.proc(canvas, r, paint);
}
canvas->restore();
canvas->translate(0, spacing);
}
canvas->restore();
canvas->translate(spacing, 0);
}
}
canvas->restore();
canvas->translate(0, 2*spacing);
}
}