blob: 8e3ad88cb48b77074675faffa249369d26f6d8ee [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"
reed@android.com64ad9662008-12-19 19:15:15 +00009#include "SkComposeShader.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000010#include "Sk1DPathEffect.h"
11#include "SkCornerPathEffect.h"
12#include "SkPathMeasure.h"
13#include "SkRandom.h"
14#include "SkColorPriv.h"
15#include "SkColorFilter.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000016#include "SkLayerRasterizer.h"
17
reed@android.combbff1d52009-06-05 16:21:03 +000018#include "SkParsePath.h"
19static void testparse() {
20 SkRect r;
21 r.set(0, 0, SkFloatToScalar(10), SkFloatToScalar(10.5));
22 SkPath p, p2;
23 SkString str, str2;
24
25 p.addRect(r);
26 SkParsePath::ToSVGString(p, &str);
27 SkParsePath::FromSVGString(str.c_str(), &p2);
28 SkParsePath::ToSVGString(p2, &str2);
29}
30
reed@google.com961ddb02011-05-05 14:03:48 +000031class ArcsView : public SampleView {
reed@android.com8a1c16f2008-12-17 15:59:43 +000032public:
reed@google.com961ddb02011-05-05 14:03:48 +000033 ArcsView() {
reed@android.combbff1d52009-06-05 16:21:03 +000034 testparse();
reed@android.com8a1c16f2008-12-17 15:59:43 +000035 fSweep = SkIntToScalar(100);
reed@google.com961ddb02011-05-05 14:03:48 +000036 this->setBGColor(0xFFDDDDDD);
reed@android.com8a1c16f2008-12-17 15:59:43 +000037 }
38
39protected:
40 // overrides from SkEventSink
reed@google.com961ddb02011-05-05 14:03:48 +000041 virtual bool onQuery(SkEvent* evt) {
42 if (SampleCode::TitleQ(*evt)) {
reed@android.com8a1c16f2008-12-17 15:59:43 +000043 SampleCode::TitleR(evt, "Arcs");
44 return true;
45 }
46 return this->INHERITED::onQuery(evt);
47 }
48
reed@google.com961ddb02011-05-05 14:03:48 +000049 static void drawRectWithLines(SkCanvas* canvas, const SkRect& r, const SkPaint& p) {
reed@android.com8a1c16f2008-12-17 15:59:43 +000050 canvas->drawRect(r, p);
51 canvas->drawLine(r.fLeft, r.fTop, r.fRight, r.fBottom, p);
52 canvas->drawLine(r.fLeft, r.fBottom, r.fRight, r.fTop, p);
53 canvas->drawLine(r.fLeft, r.centerY(), r.fRight, r.centerY(), p);
54 canvas->drawLine(r.centerX(), r.fTop, r.centerX(), r.fBottom, p);
55 }
56
57 static void draw_label(SkCanvas* canvas, const SkRect& rect,
reed@google.com961ddb02011-05-05 14:03:48 +000058 int start, int sweep) {
reed@android.com8a1c16f2008-12-17 15:59:43 +000059 SkPaint paint;
60
61 paint.setAntiAlias(true);
62 paint.setTextAlign(SkPaint::kCenter_Align);
63
64 SkString str;
65
66 str.appendS32(start);
67 str.append(", ");
68 str.appendS32(sweep);
69 canvas->drawText(str.c_str(), str.size(), rect.centerX(),
70 rect.fBottom + paint.getTextSize() * 5/4, paint);
71 }
72
reed@google.com961ddb02011-05-05 14:03:48 +000073 static void drawArcs(SkCanvas* canvas) {
reed@android.com8a1c16f2008-12-17 15:59:43 +000074 SkPaint paint;
75 SkRect r;
76 SkScalar w = SkIntToScalar(75);
77 SkScalar h = SkIntToScalar(50);
78
79 r.set(0, 0, w, h);
80 paint.setAntiAlias(true);
81 paint.setStyle(SkPaint::kStroke_Style);
82
83 canvas->save();
84 canvas->translate(SkIntToScalar(10), SkIntToScalar(300));
85
86 paint.setStrokeWidth(SkIntToScalar(1));
87
88 static const int gAngles[] = {
89 0, 360,
90 0, 45,
91 0, -45,
92 720, 135,
93 -90, 269,
94 -90, 270,
95 -90, 271,
96 -180, -270,
97 225, 90
98 };
99
senorblanco@chromium.org64cc5792011-05-19 19:58:58 +0000100 for (size_t i = 0; i < SK_ARRAY_COUNT(gAngles); i += 2) {
reed@android.com8a1c16f2008-12-17 15:59:43 +0000101 paint.setColor(SK_ColorBLACK);
102 drawRectWithLines(canvas, r, paint);
103
104 paint.setColor(SK_ColorRED);
105 canvas->drawArc(r, SkIntToScalar(gAngles[i]),
106 SkIntToScalar(gAngles[i+1]), false, paint);
107
108 draw_label(canvas, r, gAngles[i], gAngles[i+1]);
109
110 canvas->translate(w * 8 / 7, 0);
111 }
112
113 canvas->restore();
114 }
115
reed@google.com961ddb02011-05-05 14:03:48 +0000116 virtual void onDrawContent(SkCanvas* canvas) {
reed@android.com44177402009-11-23 21:07:51 +0000117 fSweep = SampleCode::GetAnimScalar(SkIntToScalar(360)/24,
118 SkIntToScalar(360));
reed@android.com7d970c72010-04-22 16:07:49 +0000119// fSweep = SkFloatToScalar(359.99f);
reed@android.com8a1c16f2008-12-17 15:59:43 +0000120
121 SkRect r;
122 SkPaint paint;
123
124 paint.setAntiAlias(true);
125 paint.setStrokeWidth(SkIntToScalar(2));
126 paint.setStyle(SkPaint::kStroke_Style);
127
128 r.set(0, 0, SkIntToScalar(200), SkIntToScalar(200));
129 r.offset(SkIntToScalar(20), SkIntToScalar(20));
130
131 if (false) {
132 const SkScalar d = SkIntToScalar(3);
133 const SkScalar rad[] = { d, d, d, d, d, d, d, d };
134 SkPath path;
135 path.addRoundRect(r, rad);
136 canvas->drawPath(path, paint);
137 return;
138 }
139
140 drawRectWithLines(canvas, r, paint);
141
142 // printf("----- sweep %g %X\n", SkScalarToFloat(fSweep), SkDegreesToRadians(fSweep));
143
144
145 paint.setStyle(SkPaint::kFill_Style);
146 paint.setColor(0x800000FF);
147 canvas->drawArc(r, 0, fSweep, true, paint);
148
149 paint.setColor(0x800FF000);
150 canvas->drawArc(r, 0, fSweep, false, paint);
151
152 paint.setStyle(SkPaint::kStroke_Style);
153 paint.setColor(SK_ColorRED);
154 canvas->drawArc(r, 0, fSweep, true, paint);
155
156 paint.setStrokeWidth(0);
157 paint.setColor(SK_ColorBLUE);
158 canvas->drawArc(r, 0, fSweep, false, paint);
159
reed@android.com8a1c16f2008-12-17 15:59:43 +0000160 drawArcs(canvas);
161 this->inval(NULL);
162 }
163
reed@google.com961ddb02011-05-05 14:03:48 +0000164 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
reed@android.com8a1c16f2008-12-17 15:59:43 +0000165 // fSweep += SK_Scalar1;
166 this->inval(NULL);
167 return this->INHERITED::onFindClickHandler(x, y);
168 }
169
reed@google.com961ddb02011-05-05 14:03:48 +0000170 virtual bool onClick(Click* click) {
reed@android.com8a1c16f2008-12-17 15:59:43 +0000171 return this->INHERITED::onClick(click);
172 }
173
174private:
175 SkScalar fSweep;
176
reed@google.com961ddb02011-05-05 14:03:48 +0000177 typedef SampleView INHERITED;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000178};
179
180//////////////////////////////////////////////////////////////////////////////
181
182static SkView* MyFactory() { return new ArcsView; }
183static SkViewRegister reg(MyFactory);
184