blob: e46f986ac75d0a5712bfbed05f47d0a6b78d593c [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 */
Mike Kleinc0bd9f92019-04-23 12:05:21 -05007#include "include/core/SkBitmap.h"
8#include "include/core/SkCanvas.h"
9#include "include/core/SkPaint.h"
10#include "include/core/SkShader.h"
11#include "samplecode/Sample.h"
bsalomon@google.com205d4602011-04-25 12:43:45 +000012
13static SkBitmap createBitmap(int n) {
14 SkBitmap bitmap;
commit-bot@chromium.orga8c18312014-02-17 02:55:57 +000015 bitmap.allocN32Pixels(n, n);
bsalomon@google.com205d4602011-04-25 12:43:45 +000016 bitmap.eraseColor(SK_ColorGREEN);
rmistry@google.comae933ce2012-08-23 18:19:56 +000017
bsalomon@google.com205d4602011-04-25 12:43:45 +000018 SkCanvas canvas(bitmap);
19 SkRect r;
20 r.set(0, 0, SkIntToScalar(n), SkIntToScalar(n));
21 SkPaint paint;
22 paint.setAntiAlias(true);
rmistry@google.comae933ce2012-08-23 18:19:56 +000023
bsalomon@google.com205d4602011-04-25 12:43:45 +000024 paint.setColor(SK_ColorRED);
25 canvas.drawOval(r, paint);
26 paint.setColor(SK_ColorBLUE);
27 paint.setStrokeWidth(SkIntToScalar(n)/15);
28 paint.setStyle(SkPaint::kStroke_Style);
29 canvas.drawLine(0, 0, r.fRight, r.fBottom, paint);
30 canvas.drawLine(0, r.fBottom, r.fRight, 0, paint);
rmistry@google.comae933ce2012-08-23 18:19:56 +000031
bsalomon@google.com205d4602011-04-25 12:43:45 +000032 return bitmap;
33}
34
Ben Wagnerb2c4ea62018-08-08 11:36:17 -040035class AARectView : public Sample {
bsalomon@google.com205d4602011-04-25 12:43:45 +000036 SkBitmap fBitmap;
37 enum {
38 N = 64
39 };
Cary Clark58627cb2018-04-10 09:16:41 -040040
41protected:
42 void onOnceBeforeDraw() override {
Cary Clark1ad81982017-12-19 09:18:59 -050043 fBitmap = createBitmap(N);
Cary Clark394197d2017-12-19 20:20:13 +000044
Cary Clark1ad81982017-12-19 09:18:59 -050045 fWidth = N;
46 }
47
Hal Canary8a027312019-07-03 10:55:44 -040048 SkString name() override { return SkString("AA Rects"); }
bsalomon@google.com205d4602011-04-25 12:43:45 +000049
Cary Clark58627cb2018-04-10 09:16:41 -040050 void onDrawContent(SkCanvas* canvas) override {
bsalomon@google.com205d4602011-04-25 12:43:45 +000051 canvas->translate(SkIntToScalar(10), SkIntToScalar(10));
52
53 SkPaint bluePaint;
54 bluePaint.setARGB(0xff, 0x0, 0x0, 0xff);
55 SkPaint bmpPaint;
Mike Reed50acf8f2019-04-08 13:20:23 -040056 bmpPaint.setShader(fBitmap.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat));
bsalomon@google.com205d4602011-04-25 12:43:45 +000057 bluePaint.setStrokeWidth(3);
58 bmpPaint.setStrokeWidth(3);
59
60 SkPaint paints[] = { bluePaint, bmpPaint };
61
62 SkRect rect;
63
64 SkScalar dx = SkIntToScalar(80);
65 SkScalar dy = SkIntToScalar(100);
66 SkMatrix matrix;
senorblanco@chromium.org64cc5792011-05-19 19:58:58 +000067 for (size_t p = 0; p < SK_ARRAY_COUNT(paints); ++p) {
bsalomon@google.com205d4602011-04-25 12:43:45 +000068 for (int stroke = 0; stroke < 2; ++stroke) {
69 paints[p].setStyle(stroke ? SkPaint::kStroke_Style : SkPaint::kFill_Style);
70 for (int a = 0; a < 3; ++ a) {
71 paints[p].setAntiAlias(a > 0);
72 paints[p].setAlpha(a > 1 ? 0x80 : 0xff);
73
74 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +000075 rect = SkRect::MakeLTRB(0.f,
76 0.f,
77 40.f,
78 40.f);
bsalomon@google.com205d4602011-04-25 12:43:45 +000079 canvas->drawRect(rect, paints[p]);
80 canvas->translate(dx, 0);
81
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +000082 rect = SkRect::MakeLTRB(0.5f,
83 0.5f,
84 40.5f,
85 40.5f);
bsalomon@google.com205d4602011-04-25 12:43:45 +000086 canvas->drawRect(rect, paints[p]);
87 canvas->translate(dx, 0);
88
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +000089 rect = SkRect::MakeLTRB(0.5f,
90 0.5f,
91 40.f,
92 40.f);
bsalomon@google.com205d4602011-04-25 12:43:45 +000093 canvas->drawRect(rect, paints[p]);
94 canvas->translate(dx, 0);
95
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +000096 rect = SkRect::MakeLTRB(0.75f,
97 0.75f,
98 40.75f,
99 40.75f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000100 canvas->drawRect(rect, paints[p]);
101 canvas->translate(dx, 0);
102
103 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000104 canvas->translate(.33f, .67f);
105 rect = SkRect::MakeLTRB(0.0f,
106 0.0f,
107 40.0f,
108 40.0f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000109 canvas->drawRect(rect, paints[p]);
110 canvas->restore();
111 canvas->translate(dx, 0);
112
113 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000114 matrix.setRotate(45.f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000115 canvas->concat(matrix);
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000116 canvas->translate(20.0f / sqrtf(2.f),
117 20.0f / sqrtf(2.f));
118 rect = SkRect::MakeLTRB(-20.0f,
119 -20.0f,
120 20.0f,
121 20.0f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000122 canvas->drawRect(rect, paints[p]);
123 canvas->restore();
124 canvas->translate(dx, 0);
125
126 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000127 canvas->rotate(90.f);
128 rect = SkRect::MakeLTRB(0.0f,
129 0.0f,
130 40.0f,
131 -40.0f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000132 canvas->drawRect(rect, paints[p]);
133 canvas->restore();
134 canvas->translate(dx, 0);
135
136 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000137 canvas->rotate(90.f);
138 rect = SkRect::MakeLTRB(0.5f,
139 0.5f,
140 40.5f,
141 -40.5f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000142 canvas->drawRect(rect, paints[p]);
143 canvas->restore();
144 canvas->translate(dx, 0);
145
146 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000147 matrix.setScale(-1.f, -1.f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000148 canvas->concat(matrix);
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000149 rect = SkRect::MakeLTRB(0.5f,
150 0.5f,
151 -40.5f,
152 -40.5f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000153 canvas->drawRect(rect, paints[p]);
154 canvas->restore();
155 canvas->translate(dx, 0);
156
157 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000158 matrix.setScale(2.1f, 4.1f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000159 canvas->concat(matrix);
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000160 rect = SkRect::MakeLTRB(0.1f,
161 0.1f,
162 19.1f,
163 9.1f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000164 canvas->drawRect(rect, paints[p]);
165 canvas->restore();
166 canvas->translate(dx, 0);
167
168 canvas->restore();
169 canvas->translate(0, dy);
170 }
171 }
172 }
173 }
rmistry@google.comae933ce2012-08-23 18:19:56 +0000174
bsalomon@google.com205d4602011-04-25 12:43:45 +0000175private:
176 int fWidth;
177
Ben Wagnerb2c4ea62018-08-08 11:36:17 -0400178 typedef Sample INHERITED;
bsalomon@google.com205d4602011-04-25 12:43:45 +0000179};
180
181//////////////////////////////////////////////////////////////////////////////
182
Ben Wagnerb2c4ea62018-08-08 11:36:17 -0400183DEF_SAMPLE( return new AARectView(); )