blob: 7bc862bafed5b4d101fda27b015986efa0b09027 [file] [log] [blame]
reed@android.com8a1c16f2008-12-17 15:59:43 +00001#include "SampleCode.h"
2#include "SkView.h"
3#include "SkCanvas.h"
4#include "SkGradientShader.h"
5#include "SkPath.h"
6#include "SkRegion.h"
7#include "SkShader.h"
8#include "SkUtils.h"
9#include "SkShaderExtras.h"
10#include "Sk1DPathEffect.h"
11#include "SkCornerPathEffect.h"
12#include "SkPathMeasure.h"
13#include "SkRandom.h"
14#include "SkColorPriv.h"
15#include "SkColorFilter.h"
16#include "SkPorterDuff.h"
17#include "SkLayerRasterizer.h"
18
19class ArcsView : public SkView {
20public:
21 ArcsView()
22 {
23 fSweep = SkIntToScalar(100);
24 }
25
26protected:
27 // overrides from SkEventSink
28 virtual bool onQuery(SkEvent* evt)
29 {
30 if (SampleCode::TitleQ(*evt))
31 {
32 SampleCode::TitleR(evt, "Arcs");
33 return true;
34 }
35 return this->INHERITED::onQuery(evt);
36 }
37
38 void drawBG(SkCanvas* canvas)
39 {
40 canvas->drawColor(0xFFDDDDDD);
41 }
42
43 static void drawRectWithLines(SkCanvas* canvas, const SkRect& r, const SkPaint& p)
44 {
45 canvas->drawRect(r, p);
46 canvas->drawLine(r.fLeft, r.fTop, r.fRight, r.fBottom, p);
47 canvas->drawLine(r.fLeft, r.fBottom, r.fRight, r.fTop, p);
48 canvas->drawLine(r.fLeft, r.centerY(), r.fRight, r.centerY(), p);
49 canvas->drawLine(r.centerX(), r.fTop, r.centerX(), r.fBottom, p);
50 }
51
52 static void draw_label(SkCanvas* canvas, const SkRect& rect,
53 int start, int sweep)
54 {
55 SkPaint paint;
56
57 paint.setAntiAlias(true);
58 paint.setTextAlign(SkPaint::kCenter_Align);
59
60 SkString str;
61
62 str.appendS32(start);
63 str.append(", ");
64 str.appendS32(sweep);
65 canvas->drawText(str.c_str(), str.size(), rect.centerX(),
66 rect.fBottom + paint.getTextSize() * 5/4, paint);
67 }
68
69 static void drawArcs(SkCanvas* canvas)
70 {
71 SkPaint paint;
72 SkRect r;
73 SkScalar w = SkIntToScalar(75);
74 SkScalar h = SkIntToScalar(50);
75
76 r.set(0, 0, w, h);
77 paint.setAntiAlias(true);
78 paint.setStyle(SkPaint::kStroke_Style);
79
80 canvas->save();
81 canvas->translate(SkIntToScalar(10), SkIntToScalar(300));
82
83 paint.setStrokeWidth(SkIntToScalar(1));
84
85 static const int gAngles[] = {
86 0, 360,
87 0, 45,
88 0, -45,
89 720, 135,
90 -90, 269,
91 -90, 270,
92 -90, 271,
93 -180, -270,
94 225, 90
95 };
96
97 for (int i = 0; i < SK_ARRAY_COUNT(gAngles); i += 2)
98 {
99 paint.setColor(SK_ColorBLACK);
100 drawRectWithLines(canvas, r, paint);
101
102 paint.setColor(SK_ColorRED);
103 canvas->drawArc(r, SkIntToScalar(gAngles[i]),
104 SkIntToScalar(gAngles[i+1]), false, paint);
105
106 draw_label(canvas, r, gAngles[i], gAngles[i+1]);
107
108 canvas->translate(w * 8 / 7, 0);
109 }
110
111 canvas->restore();
112 }
113
114 virtual void onDraw(SkCanvas* canvas)
115 {
116 this->drawBG(canvas);
117
118 SkRect r;
119 SkPaint paint;
120
121 paint.setAntiAlias(true);
122 paint.setStrokeWidth(SkIntToScalar(2));
123 paint.setStyle(SkPaint::kStroke_Style);
124
125 r.set(0, 0, SkIntToScalar(200), SkIntToScalar(200));
126 r.offset(SkIntToScalar(20), SkIntToScalar(20));
127
128 if (false) {
129 const SkScalar d = SkIntToScalar(3);
130 const SkScalar rad[] = { d, d, d, d, d, d, d, d };
131 SkPath path;
132 path.addRoundRect(r, rad);
133 canvas->drawPath(path, paint);
134 return;
135 }
136
137 drawRectWithLines(canvas, r, paint);
138
139 // printf("----- sweep %g %X\n", SkScalarToFloat(fSweep), SkDegreesToRadians(fSweep));
140
141
142 paint.setStyle(SkPaint::kFill_Style);
143 paint.setColor(0x800000FF);
144 canvas->drawArc(r, 0, fSweep, true, paint);
145
146 paint.setColor(0x800FF000);
147 canvas->drawArc(r, 0, fSweep, false, paint);
148
149 paint.setStyle(SkPaint::kStroke_Style);
150 paint.setColor(SK_ColorRED);
151 canvas->drawArc(r, 0, fSweep, true, paint);
152
153 paint.setStrokeWidth(0);
154 paint.setColor(SK_ColorBLUE);
155 canvas->drawArc(r, 0, fSweep, false, paint);
156
157 fSweep += SK_Scalar1/4;
158 if (fSweep > SkIntToScalar(360))
159 fSweep = 0;
160
161 drawArcs(canvas);
162 this->inval(NULL);
163 }
164
165 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y)
166 {
167 // fSweep += SK_Scalar1;
168 this->inval(NULL);
169 return this->INHERITED::onFindClickHandler(x, y);
170 }
171
172 virtual bool onClick(Click* click)
173 {
174 return this->INHERITED::onClick(click);
175 }
176
177private:
178 SkScalar fSweep;
179
180 typedef SkView INHERITED;
181};
182
183//////////////////////////////////////////////////////////////////////////////
184
185static SkView* MyFactory() { return new ArcsView; }
186static SkViewRegister reg(MyFactory);
187