blob: d0c1115a1e012382df9b6f6e4b87c27ee70f1781 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
bsalomon@google.com205d4602011-04-25 12:43:45 +00008#include "SampleCode.h"
9#include "SkView.h"
10#include "SkCanvas.h"
11#include "SkDevice.h"
12#include "SkPaint.h"
13#include "SkShader.h"
14
15static SkBitmap createBitmap(int n) {
16 SkBitmap bitmap;
commit-bot@chromium.orga8c18312014-02-17 02:55:57 +000017 bitmap.allocN32Pixels(n, n);
bsalomon@google.com205d4602011-04-25 12:43:45 +000018 bitmap.eraseColor(SK_ColorGREEN);
rmistry@google.comae933ce2012-08-23 18:19:56 +000019
bsalomon@google.com205d4602011-04-25 12:43:45 +000020 SkCanvas canvas(bitmap);
21 SkRect r;
22 r.set(0, 0, SkIntToScalar(n), SkIntToScalar(n));
23 SkPaint paint;
24 paint.setAntiAlias(true);
rmistry@google.comae933ce2012-08-23 18:19:56 +000025
bsalomon@google.com205d4602011-04-25 12:43:45 +000026 paint.setColor(SK_ColorRED);
27 canvas.drawOval(r, paint);
28 paint.setColor(SK_ColorBLUE);
29 paint.setStrokeWidth(SkIntToScalar(n)/15);
30 paint.setStyle(SkPaint::kStroke_Style);
31 canvas.drawLine(0, 0, r.fRight, r.fBottom, paint);
32 canvas.drawLine(0, r.fBottom, r.fRight, 0, paint);
rmistry@google.comae933ce2012-08-23 18:19:56 +000033
bsalomon@google.com205d4602011-04-25 12:43:45 +000034 return bitmap;
35}
36
reed@google.com70b61252011-05-05 14:12:36 +000037class AARectView : public SampleView {
bsalomon@google.com205d4602011-04-25 12:43:45 +000038 SkBitmap fBitmap;
39 enum {
40 N = 64
41 };
42public:
43 AARectView() {
44 fBitmap = createBitmap(N);
rmistry@google.comae933ce2012-08-23 18:19:56 +000045
bsalomon@google.com205d4602011-04-25 12:43:45 +000046 fWidth = N;
47 }
rmistry@google.comae933ce2012-08-23 18:19:56 +000048
bsalomon@google.com205d4602011-04-25 12:43:45 +000049protected:
50 // overrides from SkEventSink
51 virtual bool onQuery(SkEvent* evt) {
52 if (SampleCode::TitleQ(*evt)) {
53 SampleCode::TitleR(evt, "AA Rects");
54 return true;
55 }
56 return this->INHERITED::onQuery(evt);
57 }
58
reed@google.com70b61252011-05-05 14:12:36 +000059 virtual void onDrawContent(SkCanvas* canvas) {
bsalomon@google.com205d4602011-04-25 12:43:45 +000060 canvas->translate(SkIntToScalar(10), SkIntToScalar(10));
61
62 SkPaint bluePaint;
63 bluePaint.setARGB(0xff, 0x0, 0x0, 0xff);
64 SkPaint bmpPaint;
reed8a21c9f2016-03-08 18:50:00 -080065 bmpPaint.setShader(SkShader::MakeBitmapShader(fBitmap, SkShader::kRepeat_TileMode,
66 SkShader::kRepeat_TileMode));
bsalomon@google.com205d4602011-04-25 12:43:45 +000067 bluePaint.setStrokeWidth(3);
68 bmpPaint.setStrokeWidth(3);
69
70 SkPaint paints[] = { bluePaint, bmpPaint };
71
72 SkRect rect;
73
74 SkScalar dx = SkIntToScalar(80);
75 SkScalar dy = SkIntToScalar(100);
76 SkMatrix matrix;
senorblanco@chromium.org64cc5792011-05-19 19:58:58 +000077 for (size_t p = 0; p < SK_ARRAY_COUNT(paints); ++p) {
bsalomon@google.com205d4602011-04-25 12:43:45 +000078 for (int stroke = 0; stroke < 2; ++stroke) {
79 paints[p].setStyle(stroke ? SkPaint::kStroke_Style : SkPaint::kFill_Style);
80 for (int a = 0; a < 3; ++ a) {
81 paints[p].setAntiAlias(a > 0);
82 paints[p].setAlpha(a > 1 ? 0x80 : 0xff);
83
84 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +000085 rect = SkRect::MakeLTRB(0.f,
86 0.f,
87 40.f,
88 40.f);
bsalomon@google.com205d4602011-04-25 12:43:45 +000089 canvas->drawRect(rect, paints[p]);
90 canvas->translate(dx, 0);
91
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +000092 rect = SkRect::MakeLTRB(0.5f,
93 0.5f,
94 40.5f,
95 40.5f);
bsalomon@google.com205d4602011-04-25 12:43:45 +000096 canvas->drawRect(rect, paints[p]);
97 canvas->translate(dx, 0);
98
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +000099 rect = SkRect::MakeLTRB(0.5f,
100 0.5f,
101 40.f,
102 40.f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000103 canvas->drawRect(rect, paints[p]);
104 canvas->translate(dx, 0);
105
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000106 rect = SkRect::MakeLTRB(0.75f,
107 0.75f,
108 40.75f,
109 40.75f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000110 canvas->drawRect(rect, paints[p]);
111 canvas->translate(dx, 0);
112
113 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000114 canvas->translate(.33f, .67f);
115 rect = SkRect::MakeLTRB(0.0f,
116 0.0f,
117 40.0f,
118 40.0f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000119 canvas->drawRect(rect, paints[p]);
120 canvas->restore();
121 canvas->translate(dx, 0);
122
123 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000124 matrix.setRotate(45.f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000125 canvas->concat(matrix);
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000126 canvas->translate(20.0f / sqrtf(2.f),
127 20.0f / sqrtf(2.f));
128 rect = SkRect::MakeLTRB(-20.0f,
129 -20.0f,
130 20.0f,
131 20.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.0f,
139 0.0f,
140 40.0f,
141 -40.0f);
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 canvas->rotate(90.f);
148 rect = SkRect::MakeLTRB(0.5f,
149 0.5f,
150 40.5f,
151 -40.5f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000152 canvas->drawRect(rect, paints[p]);
153 canvas->restore();
154 canvas->translate(dx, 0);
155
156 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000157 matrix.setScale(-1.f, -1.f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000158 canvas->concat(matrix);
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000159 rect = SkRect::MakeLTRB(0.5f,
160 0.5f,
161 -40.5f,
162 -40.5f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000163 canvas->drawRect(rect, paints[p]);
164 canvas->restore();
165 canvas->translate(dx, 0);
166
167 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000168 matrix.setScale(2.1f, 4.1f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000169 canvas->concat(matrix);
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000170 rect = SkRect::MakeLTRB(0.1f,
171 0.1f,
172 19.1f,
173 9.1f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000174 canvas->drawRect(rect, paints[p]);
175 canvas->restore();
176 canvas->translate(dx, 0);
177
178 canvas->restore();
179 canvas->translate(0, dy);
180 }
181 }
182 }
183 }
rmistry@google.comae933ce2012-08-23 18:19:56 +0000184
bsalomon@google.com205d4602011-04-25 12:43:45 +0000185private:
186 int fWidth;
187
reed@google.com70b61252011-05-05 14:12:36 +0000188 typedef SampleView INHERITED;
bsalomon@google.com205d4602011-04-25 12:43:45 +0000189};
190
191//////////////////////////////////////////////////////////////////////////////
192
193static SkView* MyFactory() { return new AARectView; }
194static SkViewRegister reg(MyFactory);