blob: 34a33b0748682c2603041aac218698f741871315 [file] [log] [blame]
bsalomon@google.com205d4602011-04-25 12:43:45 +00001#include "SampleCode.h"
2#include "SkView.h"
3#include "SkCanvas.h"
4#include "SkDevice.h"
5#include "SkPaint.h"
6#include "SkShader.h"
7
8static SkBitmap createBitmap(int n) {
9 SkBitmap bitmap;
10 bitmap.setConfig(SkBitmap::kARGB_8888_Config, n, n);
11 bitmap.allocPixels();
12 bitmap.eraseColor(SK_ColorGREEN);
13
14 SkCanvas canvas(bitmap);
15 SkRect r;
16 r.set(0, 0, SkIntToScalar(n), SkIntToScalar(n));
17 SkPaint paint;
18 paint.setAntiAlias(true);
19
20 paint.setColor(SK_ColorRED);
21 canvas.drawOval(r, paint);
22 paint.setColor(SK_ColorBLUE);
23 paint.setStrokeWidth(SkIntToScalar(n)/15);
24 paint.setStyle(SkPaint::kStroke_Style);
25 canvas.drawLine(0, 0, r.fRight, r.fBottom, paint);
26 canvas.drawLine(0, r.fBottom, r.fRight, 0, paint);
27
28 return bitmap;
29}
30
reed@google.com70b61252011-05-05 14:12:36 +000031class AARectView : public SampleView {
bsalomon@google.com205d4602011-04-25 12:43:45 +000032 SkBitmap fBitmap;
33 enum {
34 N = 64
35 };
36public:
37 AARectView() {
38 fBitmap = createBitmap(N);
39
40 fWidth = N;
41 }
42
43protected:
44 // overrides from SkEventSink
45 virtual bool onQuery(SkEvent* evt) {
46 if (SampleCode::TitleQ(*evt)) {
47 SampleCode::TitleR(evt, "AA Rects");
48 return true;
49 }
50 return this->INHERITED::onQuery(evt);
51 }
52
reed@google.com70b61252011-05-05 14:12:36 +000053 virtual void onDrawContent(SkCanvas* canvas) {
bsalomon@google.com205d4602011-04-25 12:43:45 +000054 canvas->translate(SkIntToScalar(10), SkIntToScalar(10));
55
56 SkPaint bluePaint;
57 bluePaint.setARGB(0xff, 0x0, 0x0, 0xff);
58 SkPaint bmpPaint;
59 SkShader* bmpShader = SkShader::CreateBitmapShader(fBitmap, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);
60 bmpPaint.setShader(bmpShader);
61 bmpShader->unref();
62
63 bluePaint.setStrokeWidth(3);
64 bmpPaint.setStrokeWidth(3);
65
66 SkPaint paints[] = { bluePaint, bmpPaint };
67
68 SkRect rect;
69
70 SkScalar dx = SkIntToScalar(80);
71 SkScalar dy = SkIntToScalar(100);
72 SkMatrix matrix;
senorblanco@chromium.org64cc5792011-05-19 19:58:58 +000073 for (size_t p = 0; p < SK_ARRAY_COUNT(paints); ++p) {
bsalomon@google.com205d4602011-04-25 12:43:45 +000074 for (int stroke = 0; stroke < 2; ++stroke) {
75 paints[p].setStyle(stroke ? SkPaint::kStroke_Style : SkPaint::kFill_Style);
76 for (int a = 0; a < 3; ++ a) {
77 paints[p].setAntiAlias(a > 0);
78 paints[p].setAlpha(a > 1 ? 0x80 : 0xff);
79
80 canvas->save();
81 rect = SkRect::MakeLTRB(SkFloatToScalar(0.f),
82 SkFloatToScalar(0.f),
83 SkFloatToScalar(40.f),
84 SkFloatToScalar(40.f));
85 canvas->drawRect(rect, paints[p]);
86 canvas->translate(dx, 0);
87
88 rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f),
89 SkFloatToScalar(0.5f),
90 SkFloatToScalar(40.5f),
91 SkFloatToScalar(40.5f));
92 canvas->drawRect(rect, paints[p]);
93 canvas->translate(dx, 0);
94
95 rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f),
96 SkFloatToScalar(0.5f),
97 SkFloatToScalar(40.f),
98 SkFloatToScalar(40.f));
99 canvas->drawRect(rect, paints[p]);
100 canvas->translate(dx, 0);
101
102 rect = SkRect::MakeLTRB(SkFloatToScalar(0.75f),
103 SkFloatToScalar(0.75f),
104 SkFloatToScalar(40.75f),
105 SkFloatToScalar(40.75f));
106 canvas->drawRect(rect, paints[p]);
107 canvas->translate(dx, 0);
108
109 canvas->save();
110 canvas->translate(SkFloatToScalar(.33f), SkFloatToScalar(.67f));
111 rect = SkRect::MakeLTRB(SkFloatToScalar(0.0f),
112 SkFloatToScalar(0.0f),
113 SkFloatToScalar(40.0f),
114 SkFloatToScalar(40.0f));
115 canvas->drawRect(rect, paints[p]);
116 canvas->restore();
117 canvas->translate(dx, 0);
118
119 canvas->save();
120 matrix.setRotate(SkFloatToScalar(45.f));
121 canvas->concat(matrix);
122 canvas->translate(SkFloatToScalar(20.0f / sqrtf(2.f)),
123 SkFloatToScalar(20.0f / sqrtf(2.f)));
124 rect = SkRect::MakeLTRB(SkFloatToScalar(-20.0f),
125 SkFloatToScalar(-20.0f),
126 SkFloatToScalar(20.0f),
127 SkFloatToScalar(20.0f));
128 canvas->drawRect(rect, paints[p]);
129 canvas->restore();
130 canvas->translate(dx, 0);
131
132 canvas->save();
133 canvas->rotate(SkFloatToScalar(90.f));
134 rect = SkRect::MakeLTRB(SkFloatToScalar(0.0f),
135 SkFloatToScalar(0.0f),
136 SkFloatToScalar(40.0f),
137 SkFloatToScalar(-40.0f));
138 canvas->drawRect(rect, paints[p]);
139 canvas->restore();
140 canvas->translate(dx, 0);
141
142 canvas->save();
143 canvas->rotate(SkFloatToScalar(90.f));
144 rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f),
145 SkFloatToScalar(0.5f),
146 SkFloatToScalar(40.5f),
147 SkFloatToScalar(-40.5f));
148 canvas->drawRect(rect, paints[p]);
149 canvas->restore();
150 canvas->translate(dx, 0);
151
152 canvas->save();
153 matrix.setScale(SkFloatToScalar(-1.f), SkFloatToScalar(-1.f));
154 canvas->concat(matrix);
155 rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f),
156 SkFloatToScalar(0.5f),
157 SkFloatToScalar(-40.5f),
158 SkFloatToScalar(-40.5f));
159 canvas->drawRect(rect, paints[p]);
160 canvas->restore();
161 canvas->translate(dx, 0);
162
163 canvas->save();
164 matrix.setScale(SkFloatToScalar(2.1f), SkFloatToScalar(4.1f));
165 canvas->concat(matrix);
166 rect = SkRect::MakeLTRB(SkFloatToScalar(0.1f),
167 SkFloatToScalar(0.1f),
168 SkFloatToScalar(19.1f),
169 SkFloatToScalar(9.1f));
170 canvas->drawRect(rect, paints[p]);
171 canvas->restore();
172 canvas->translate(dx, 0);
173
174 canvas->restore();
175 canvas->translate(0, dy);
176 }
177 }
178 }
179 }
180
181private:
182 int fWidth;
183
reed@google.com70b61252011-05-05 14:12:36 +0000184 typedef SampleView INHERITED;
bsalomon@google.com205d4602011-04-25 12:43:45 +0000185};
186
187//////////////////////////////////////////////////////////////////////////////
188
189static SkView* MyFactory() { return new AARectView; }
190static SkViewRegister reg(MyFactory);
191