blob: b39e65c6f5eb874e84af18337685c093bd5be644 [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 "SkGraphics.h"
6#include "SkImageDecoder.h"
7#include "SkPath.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +00008#include "SkRegion.h"
9#include "SkShader.h"
10#include "SkUtils.h"
11#include "SkXfermode.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000012#include "SkColorPriv.h"
13#include "SkColorFilter.h"
14#include "SkTime.h"
15#include "SkTypeface.h"
16
17class PathView : public SkView {
18public:
19 int fDStroke, fStroke, fMinStroke, fMaxStroke;
20 SkPath fPath[6];
21 bool fShowHairline;
22
23 PathView()
24 {
25 fShowHairline = false;
26
27 fDStroke = 1;
28 fStroke = 10;
29 fMinStroke = 10;
30 fMaxStroke = 180;
31
32 const int V = 85;
33
34 fPath[0].moveTo(SkIntToScalar(40), SkIntToScalar(70));
35 fPath[0].lineTo(SkIntToScalar(70), SkIntToScalar(70) + SK_Scalar1/1);
36 fPath[0].lineTo(SkIntToScalar(110), SkIntToScalar(70));
37
38 fPath[1].moveTo(SkIntToScalar(40), SkIntToScalar(70));
39 fPath[1].lineTo(SkIntToScalar(70), SkIntToScalar(70) - SK_Scalar1/1);
40 fPath[1].lineTo(SkIntToScalar(110), SkIntToScalar(70));
41
42 fPath[2].moveTo(SkIntToScalar(V), SkIntToScalar(V));
43 fPath[2].lineTo(SkIntToScalar(50), SkIntToScalar(V));
44 fPath[2].lineTo(SkIntToScalar(50), SkIntToScalar(50));
45
46 fPath[3].moveTo(SkIntToScalar(50), SkIntToScalar(50));
47 fPath[3].lineTo(SkIntToScalar(50), SkIntToScalar(V));
48 fPath[3].lineTo(SkIntToScalar(V), SkIntToScalar(V));
49
50 fPath[4].moveTo(SkIntToScalar(50), SkIntToScalar(50));
51 fPath[4].lineTo(SkIntToScalar(50), SkIntToScalar(V));
52 fPath[4].lineTo(SkIntToScalar(52), SkIntToScalar(50));
53
54 fPath[5].moveTo(SkIntToScalar(52), SkIntToScalar(50));
55 fPath[5].lineTo(SkIntToScalar(50), SkIntToScalar(V));
56 fPath[5].lineTo(SkIntToScalar(50), SkIntToScalar(50));
57 }
58
59 virtual ~PathView()
60 {
61 }
62
63 void nextStroke()
64 {
65 fStroke += fDStroke;
66 if (fStroke > fMaxStroke || fStroke < fMinStroke)
67 fDStroke = -fDStroke;
68 }
69
70protected:
71 // overrides from SkEventSink
72 virtual bool onQuery(SkEvent* evt)
73 {
74 if (SampleCode::TitleQ(*evt))
75 {
76 SampleCode::TitleR(evt, "Paths");
77 return true;
78 }
79 return this->INHERITED::onQuery(evt);
80 }
81
82 void drawBG(SkCanvas* canvas)
83 {
84 canvas->drawColor(0xFFDDDDDD);
85// canvas->drawColor(SK_ColorWHITE);
86 }
87
88 void drawPath(SkCanvas* canvas, const SkPath& path, SkPaint::Join j)
89 {
90 SkPaint paint;
91
92 paint.setAntiAlias(true);
93 paint.setStyle(SkPaint::kStroke_Style);
94 paint.setStrokeJoin(j);
95 paint.setStrokeWidth(SkIntToScalar(fStroke));
96
97 if (fShowHairline)
98 {
99 SkPath fill;
100
101 paint.getFillPath(path, &fill);
102 paint.setStrokeWidth(0);
103 canvas->drawPath(fill, paint);
104 }
105 else
106 canvas->drawPath(path, paint);
107
108 paint.setColor(SK_ColorRED);
109 paint.setStrokeWidth(0);
110 canvas->drawPath(path, paint);
111 }
112
113 virtual void onDraw(SkCanvas* canvas)
114 {
115 this->drawBG(canvas);
116
117 canvas->translate(SkIntToScalar(50), SkIntToScalar(50));
118
119 static const SkPaint::Join gJoins[] = {
120 SkPaint::kBevel_Join,
121 SkPaint::kMiter_Join,
122 SkPaint::kRound_Join
123 };
124
125 for (int i = 0; i < SK_ARRAY_COUNT(gJoins); i++)
126 {
127 canvas->save();
128 for (int j = 0; j < SK_ARRAY_COUNT(fPath); j++)
129 {
130 this->drawPath(canvas, fPath[j], gJoins[i]);
131 canvas->translate(SkIntToScalar(200), 0);
132 }
133 canvas->restore();
134
135 canvas->translate(0, SkIntToScalar(200));
136 }
137
138 this->nextStroke();
139 this->inval(NULL);
140 }
141
142 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y)
143 {
144 fShowHairline = !fShowHairline;
145 this->inval(NULL);
146 return this->INHERITED::onFindClickHandler(x, y);
147 }
148
149 virtual bool onClick(Click* click)
150 {
151 return this->INHERITED::onClick(click);
152 }
153
154private:
155 typedef SkView INHERITED;
156};
157
158//////////////////////////////////////////////////////////////////////////////
159
160static SkView* MyFactory() { return new PathView; }
161static SkViewRegister reg(MyFactory);
162