blob: 41507d973a7e5c7aaa9628500b37a381403d0349 [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 */
bsalomon@google.com205d4602011-04-25 12:43:45 +00007#include "SampleCode.h"
8#include "SkView.h"
9#include "SkCanvas.h"
10#include "SkDevice.h"
11#include "SkPaint.h"
12#include "SkShader.h"
13
14static SkBitmap createBitmap(int n) {
15 SkBitmap bitmap;
commit-bot@chromium.orga8c18312014-02-17 02:55:57 +000016 bitmap.allocN32Pixels(n, n);
bsalomon@google.com205d4602011-04-25 12:43:45 +000017 bitmap.eraseColor(SK_ColorGREEN);
rmistry@google.comae933ce2012-08-23 18:19:56 +000018
bsalomon@google.com205d4602011-04-25 12:43:45 +000019 SkCanvas canvas(bitmap);
20 SkRect r;
21 r.set(0, 0, SkIntToScalar(n), SkIntToScalar(n));
22 SkPaint paint;
23 paint.setAntiAlias(true);
rmistry@google.comae933ce2012-08-23 18:19:56 +000024
bsalomon@google.com205d4602011-04-25 12:43:45 +000025 paint.setColor(SK_ColorRED);
26 canvas.drawOval(r, paint);
27 paint.setColor(SK_ColorBLUE);
28 paint.setStrokeWidth(SkIntToScalar(n)/15);
29 paint.setStyle(SkPaint::kStroke_Style);
30 canvas.drawLine(0, 0, r.fRight, r.fBottom, paint);
31 canvas.drawLine(0, r.fBottom, r.fRight, 0, paint);
rmistry@google.comae933ce2012-08-23 18:19:56 +000032
bsalomon@google.com205d4602011-04-25 12:43:45 +000033 return bitmap;
34}
35
reed@google.com70b61252011-05-05 14:12:36 +000036class AARectView : public SampleView {
bsalomon@google.com205d4602011-04-25 12:43:45 +000037 SkBitmap fBitmap;
38 enum {
39 N = 64
40 };
41public:
42 AARectView() {
43 fBitmap = createBitmap(N);
rmistry@google.comae933ce2012-08-23 18:19:56 +000044
bsalomon@google.com205d4602011-04-25 12:43:45 +000045 fWidth = N;
46 }
rmistry@google.comae933ce2012-08-23 18:19:56 +000047
bsalomon@google.com205d4602011-04-25 12:43:45 +000048protected:
49 // overrides from SkEventSink
50 virtual bool onQuery(SkEvent* evt) {
51 if (SampleCode::TitleQ(*evt)) {
52 SampleCode::TitleR(evt, "AA Rects");
53 return true;
54 }
55 return this->INHERITED::onQuery(evt);
56 }
57
reed@google.com70b61252011-05-05 14:12:36 +000058 virtual void onDrawContent(SkCanvas* canvas) {
bsalomon@google.com205d4602011-04-25 12:43:45 +000059 canvas->translate(SkIntToScalar(10), SkIntToScalar(10));
60
61 SkPaint bluePaint;
62 bluePaint.setARGB(0xff, 0x0, 0x0, 0xff);
63 SkPaint bmpPaint;
reed8a21c9f2016-03-08 18:50:00 -080064 bmpPaint.setShader(SkShader::MakeBitmapShader(fBitmap, SkShader::kRepeat_TileMode,
65 SkShader::kRepeat_TileMode));
bsalomon@google.com205d4602011-04-25 12:43:45 +000066 bluePaint.setStrokeWidth(3);
67 bmpPaint.setStrokeWidth(3);
68
69 SkPaint paints[] = { bluePaint, bmpPaint };
70
71 SkRect rect;
72
73 SkScalar dx = SkIntToScalar(80);
74 SkScalar dy = SkIntToScalar(100);
75 SkMatrix matrix;
senorblanco@chromium.org64cc5792011-05-19 19:58:58 +000076 for (size_t p = 0; p < SK_ARRAY_COUNT(paints); ++p) {
bsalomon@google.com205d4602011-04-25 12:43:45 +000077 for (int stroke = 0; stroke < 2; ++stroke) {
78 paints[p].setStyle(stroke ? SkPaint::kStroke_Style : SkPaint::kFill_Style);
79 for (int a = 0; a < 3; ++ a) {
80 paints[p].setAntiAlias(a > 0);
81 paints[p].setAlpha(a > 1 ? 0x80 : 0xff);
82
83 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +000084 rect = SkRect::MakeLTRB(0.f,
85 0.f,
86 40.f,
87 40.f);
bsalomon@google.com205d4602011-04-25 12:43:45 +000088 canvas->drawRect(rect, paints[p]);
89 canvas->translate(dx, 0);
90
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +000091 rect = SkRect::MakeLTRB(0.5f,
92 0.5f,
93 40.5f,
94 40.5f);
bsalomon@google.com205d4602011-04-25 12:43:45 +000095 canvas->drawRect(rect, paints[p]);
96 canvas->translate(dx, 0);
97
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +000098 rect = SkRect::MakeLTRB(0.5f,
99 0.5f,
100 40.f,
101 40.f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000102 canvas->drawRect(rect, paints[p]);
103 canvas->translate(dx, 0);
104
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000105 rect = SkRect::MakeLTRB(0.75f,
106 0.75f,
107 40.75f,
108 40.75f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000109 canvas->drawRect(rect, paints[p]);
110 canvas->translate(dx, 0);
111
112 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000113 canvas->translate(.33f, .67f);
114 rect = SkRect::MakeLTRB(0.0f,
115 0.0f,
116 40.0f,
117 40.0f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000118 canvas->drawRect(rect, paints[p]);
119 canvas->restore();
120 canvas->translate(dx, 0);
121
122 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000123 matrix.setRotate(45.f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000124 canvas->concat(matrix);
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000125 canvas->translate(20.0f / sqrtf(2.f),
126 20.0f / sqrtf(2.f));
127 rect = SkRect::MakeLTRB(-20.0f,
128 -20.0f,
129 20.0f,
130 20.0f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000131 canvas->drawRect(rect, paints[p]);
132 canvas->restore();
133 canvas->translate(dx, 0);
134
135 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000136 canvas->rotate(90.f);
137 rect = SkRect::MakeLTRB(0.0f,
138 0.0f,
139 40.0f,
140 -40.0f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000141 canvas->drawRect(rect, paints[p]);
142 canvas->restore();
143 canvas->translate(dx, 0);
144
145 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000146 canvas->rotate(90.f);
147 rect = SkRect::MakeLTRB(0.5f,
148 0.5f,
149 40.5f,
150 -40.5f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000151 canvas->drawRect(rect, paints[p]);
152 canvas->restore();
153 canvas->translate(dx, 0);
154
155 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000156 matrix.setScale(-1.f, -1.f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000157 canvas->concat(matrix);
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000158 rect = SkRect::MakeLTRB(0.5f,
159 0.5f,
160 -40.5f,
161 -40.5f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000162 canvas->drawRect(rect, paints[p]);
163 canvas->restore();
164 canvas->translate(dx, 0);
165
166 canvas->save();
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000167 matrix.setScale(2.1f, 4.1f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000168 canvas->concat(matrix);
commit-bot@chromium.org4b413c82013-11-25 19:44:07 +0000169 rect = SkRect::MakeLTRB(0.1f,
170 0.1f,
171 19.1f,
172 9.1f);
bsalomon@google.com205d4602011-04-25 12:43:45 +0000173 canvas->drawRect(rect, paints[p]);
174 canvas->restore();
175 canvas->translate(dx, 0);
176
177 canvas->restore();
178 canvas->translate(0, dy);
179 }
180 }
181 }
182 }
rmistry@google.comae933ce2012-08-23 18:19:56 +0000183
bsalomon@google.com205d4602011-04-25 12:43:45 +0000184private:
185 int fWidth;
186
reed@google.com70b61252011-05-05 14:12:36 +0000187 typedef SampleView INHERITED;
bsalomon@google.com205d4602011-04-25 12:43:45 +0000188};
189
190//////////////////////////////////////////////////////////////////////////////
191
192static SkView* MyFactory() { return new AARectView; }
193static SkViewRegister reg(MyFactory);