blob: 8962d1c431061b182cec3e8dd49347c612f7ed93 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001/*
2 * Copyright 2011 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
bungemand3ebb482015-08-05 13:57:49 -07007
Mike Kleinc0bd9f92019-04-23 12:05:21 -05008#include "gm/gm.h"
Ben Wagner7fde8e12019-05-01 17:28:53 -04009#include "include/core/SkCanvas.h"
10#include "include/core/SkColor.h"
11#include "include/core/SkPaint.h"
Mike Reed92f6eb12020-08-25 11:48:41 -040012#include "include/core/SkPathBuilder.h"
Ben Wagner7fde8e12019-05-01 17:28:53 -040013#include "include/core/SkRect.h"
14#include "include/core/SkScalar.h"
15#include "include/core/SkSize.h"
16#include "include/core/SkString.h"
reed@android.com048522d2009-06-23 12:19:41 +000017
18namespace skiagm {
19
20class FillTypeGM : public GM {
21 SkPath fPath;
22public:
rmistry@google.comd6176b02012-08-23 18:14:13 +000023 FillTypeGM() {
Mike Kleind46dce32018-08-16 10:17:03 -040024 this->setBGColor(0xFFDDDDDD);
reed@google.comd42e3f62012-03-30 20:04:21 +000025 }
rmistry@google.comd6176b02012-08-23 18:14:13 +000026
reed@google.comd42e3f62012-03-30 20:04:21 +000027 void makePath() {
28 if (fPath.isEmpty()) {
29 const SkScalar radius = SkIntToScalar(45);
Mike Reed92f6eb12020-08-25 11:48:41 -040030 fPath = SkPathBuilder().addCircle(SkIntToScalar(50), SkIntToScalar(50), radius)
31 .addCircle(SkIntToScalar(100), SkIntToScalar(100), radius)
32 .detach();
reed@google.comd42e3f62012-03-30 20:04:21 +000033 }
reed@android.com048522d2009-06-23 12:19:41 +000034 }
rmistry@google.comd6176b02012-08-23 18:14:13 +000035
reed@android.com048522d2009-06-23 12:19:41 +000036protected:
Leandro Lovisolo24fa2112023-08-15 19:05:17 +000037 SkString getName() const override { return SkString("filltypes"); }
reed@android.com048522d2009-06-23 12:19:41 +000038
Leandro Lovisolo8f023882023-08-15 21:13:52 +000039 SkISize getISize() override { return SkISize::Make(835, 840); }
reed@android.com048522d2009-06-23 12:19:41 +000040
Mike Reed7d34dc72019-11-26 12:17:17 -050041 void showPath(SkCanvas* canvas, int x, int y, SkPathFillType ft,
reed@android.com048522d2009-06-23 12:19:41 +000042 SkScalar scale, const SkPaint& paint) {
reed@android.com048522d2009-06-23 12:19:41 +000043 const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) };
44
45 canvas->save();
46 canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
47 canvas->clipRect(r);
48 canvas->drawColor(SK_ColorWHITE);
49 fPath.setFillType(ft);
50 canvas->translate(r.centerX(), r.centerY());
51 canvas->scale(scale, scale);
52 canvas->translate(-r.centerX(), -r.centerY());
53 canvas->drawPath(fPath, paint);
54 canvas->restore();
55 }
56
57 void showFour(SkCanvas* canvas, SkScalar scale, const SkPaint& paint) {
Mike Reed7d34dc72019-11-26 12:17:17 -050058 showPath(canvas, 0, 0, SkPathFillType::kWinding,
reed@android.com048522d2009-06-23 12:19:41 +000059 scale, paint);
Mike Reed7d34dc72019-11-26 12:17:17 -050060 showPath(canvas, 200, 0, SkPathFillType::kEvenOdd,
reed@android.com048522d2009-06-23 12:19:41 +000061 scale, paint);
Mike Reed7d34dc72019-11-26 12:17:17 -050062 showPath(canvas, 00, 200, SkPathFillType::kInverseWinding,
reed@android.com048522d2009-06-23 12:19:41 +000063 scale, paint);
Mike Reed7d34dc72019-11-26 12:17:17 -050064 showPath(canvas, 200, 200, SkPathFillType::kInverseEvenOdd,
reed@android.com048522d2009-06-23 12:19:41 +000065 scale, paint);
66 }
67
mtklein36352bf2015-03-25 18:17:31 -070068 void onDraw(SkCanvas* canvas) override {
reed@google.comd42e3f62012-03-30 20:04:21 +000069 this->makePath();
70
reed@android.com048522d2009-06-23 12:19:41 +000071 canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
rmistry@google.comd6176b02012-08-23 18:14:13 +000072
reed@android.com048522d2009-06-23 12:19:41 +000073 SkPaint paint;
74 const SkScalar scale = SkIntToScalar(5)/4;
75
76 paint.setAntiAlias(false);
77
78 showFour(canvas, SK_Scalar1, paint);
79 canvas->translate(SkIntToScalar(450), 0);
80 showFour(canvas, scale, paint);
81
82 paint.setAntiAlias(true);
83
84 canvas->translate(SkIntToScalar(-450), SkIntToScalar(450));
85 showFour(canvas, SK_Scalar1, paint);
86 canvas->translate(SkIntToScalar(450), 0);
87 showFour(canvas, scale, paint);
88 }
rmistry@google.comd6176b02012-08-23 18:14:13 +000089
reed@android.com048522d2009-06-23 12:19:41 +000090private:
John Stiles7571f9e2020-09-02 22:42:33 -040091 using INHERITED = GM;
reed@android.com048522d2009-06-23 12:19:41 +000092};
93
94//////////////////////////////////////////////////////////////////////////////
95
Hal Canarye964c182019-01-23 10:22:01 -050096DEF_GM( return new FillTypeGM; )
reed@android.com048522d2009-06-23 12:19:41 +000097
John Stilesa6841be2020-08-06 14:11:56 -040098} // namespace skiagm