blob: 94f8ce98a5dac761319a41b9670fa118fefc7535 [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
31class AARectView : public SkView {
32 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
53 void drawBG(SkCanvas* canvas) {
54 canvas->drawColor(SK_ColorWHITE);
55 }
56
57 virtual void onDraw(SkCanvas* canvas) {
58 this->drawBG(canvas);
59
60 canvas->translate(SkIntToScalar(10), SkIntToScalar(10));
61
62 SkPaint bluePaint;
63 bluePaint.setARGB(0xff, 0x0, 0x0, 0xff);
64 SkPaint bmpPaint;
65 SkShader* bmpShader = SkShader::CreateBitmapShader(fBitmap, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);
66 bmpPaint.setShader(bmpShader);
67 bmpShader->unref();
68
69 bluePaint.setStrokeWidth(3);
70 bmpPaint.setStrokeWidth(3);
71
72 SkPaint paints[] = { bluePaint, bmpPaint };
73
74 SkRect rect;
75
76 SkScalar dx = SkIntToScalar(80);
77 SkScalar dy = SkIntToScalar(100);
78 SkMatrix matrix;
79 for (int p = 0; p < SK_ARRAY_COUNT(paints); ++p) {
80 for (int stroke = 0; stroke < 2; ++stroke) {
81 paints[p].setStyle(stroke ? SkPaint::kStroke_Style : SkPaint::kFill_Style);
82 for (int a = 0; a < 3; ++ a) {
83 paints[p].setAntiAlias(a > 0);
84 paints[p].setAlpha(a > 1 ? 0x80 : 0xff);
85
86 canvas->save();
87 rect = SkRect::MakeLTRB(SkFloatToScalar(0.f),
88 SkFloatToScalar(0.f),
89 SkFloatToScalar(40.f),
90 SkFloatToScalar(40.f));
91 canvas->drawRect(rect, paints[p]);
92 canvas->translate(dx, 0);
93
94 rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f),
95 SkFloatToScalar(0.5f),
96 SkFloatToScalar(40.5f),
97 SkFloatToScalar(40.5f));
98 canvas->drawRect(rect, paints[p]);
99 canvas->translate(dx, 0);
100
101 rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f),
102 SkFloatToScalar(0.5f),
103 SkFloatToScalar(40.f),
104 SkFloatToScalar(40.f));
105 canvas->drawRect(rect, paints[p]);
106 canvas->translate(dx, 0);
107
108 rect = SkRect::MakeLTRB(SkFloatToScalar(0.75f),
109 SkFloatToScalar(0.75f),
110 SkFloatToScalar(40.75f),
111 SkFloatToScalar(40.75f));
112 canvas->drawRect(rect, paints[p]);
113 canvas->translate(dx, 0);
114
115 canvas->save();
116 canvas->translate(SkFloatToScalar(.33f), SkFloatToScalar(.67f));
117 rect = SkRect::MakeLTRB(SkFloatToScalar(0.0f),
118 SkFloatToScalar(0.0f),
119 SkFloatToScalar(40.0f),
120 SkFloatToScalar(40.0f));
121 canvas->drawRect(rect, paints[p]);
122 canvas->restore();
123 canvas->translate(dx, 0);
124
125 canvas->save();
126 matrix.setRotate(SkFloatToScalar(45.f));
127 canvas->concat(matrix);
128 canvas->translate(SkFloatToScalar(20.0f / sqrtf(2.f)),
129 SkFloatToScalar(20.0f / sqrtf(2.f)));
130 rect = SkRect::MakeLTRB(SkFloatToScalar(-20.0f),
131 SkFloatToScalar(-20.0f),
132 SkFloatToScalar(20.0f),
133 SkFloatToScalar(20.0f));
134 canvas->drawRect(rect, paints[p]);
135 canvas->restore();
136 canvas->translate(dx, 0);
137
138 canvas->save();
139 canvas->rotate(SkFloatToScalar(90.f));
140 rect = SkRect::MakeLTRB(SkFloatToScalar(0.0f),
141 SkFloatToScalar(0.0f),
142 SkFloatToScalar(40.0f),
143 SkFloatToScalar(-40.0f));
144 canvas->drawRect(rect, paints[p]);
145 canvas->restore();
146 canvas->translate(dx, 0);
147
148 canvas->save();
149 canvas->rotate(SkFloatToScalar(90.f));
150 rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f),
151 SkFloatToScalar(0.5f),
152 SkFloatToScalar(40.5f),
153 SkFloatToScalar(-40.5f));
154 canvas->drawRect(rect, paints[p]);
155 canvas->restore();
156 canvas->translate(dx, 0);
157
158 canvas->save();
159 matrix.setScale(SkFloatToScalar(-1.f), SkFloatToScalar(-1.f));
160 canvas->concat(matrix);
161 rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f),
162 SkFloatToScalar(0.5f),
163 SkFloatToScalar(-40.5f),
164 SkFloatToScalar(-40.5f));
165 canvas->drawRect(rect, paints[p]);
166 canvas->restore();
167 canvas->translate(dx, 0);
168
169 canvas->save();
170 matrix.setScale(SkFloatToScalar(2.1f), SkFloatToScalar(4.1f));
171 canvas->concat(matrix);
172 rect = SkRect::MakeLTRB(SkFloatToScalar(0.1f),
173 SkFloatToScalar(0.1f),
174 SkFloatToScalar(19.1f),
175 SkFloatToScalar(9.1f));
176 canvas->drawRect(rect, paints[p]);
177 canvas->restore();
178 canvas->translate(dx, 0);
179
180 canvas->restore();
181 canvas->translate(0, dy);
182 }
183 }
184 }
185 }
186
187private:
188 int fWidth;
189
190 typedef SkView INHERITED;
191};
192
193//////////////////////////////////////////////////////////////////////////////
194
195static SkView* MyFactory() { return new AARectView; }
196static SkViewRegister reg(MyFactory);
197