Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(824)

Side by Side Diff: samplecode/SamplePath.cpp

Issue 813513003: add arcto patheffect (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « include/effects/SkArcToPathEffect.h ('k') | src/effects/SkArcToPathEffect.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "SampleCode.h" 9 #include "SampleCode.h"
10 #include "SkView.h" 10 #include "SkView.h"
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 return this->INHERITED::onFindClickHandler(x, y, modi); 207 return this->INHERITED::onFindClickHandler(x, y, modi);
208 } 208 }
209 209
210 private: 210 private:
211 typedef SampleView INHERITED; 211 typedef SampleView INHERITED;
212 }; 212 };
213 DEF_SAMPLE( return new PathView; ) 213 DEF_SAMPLE( return new PathView; )
214 214
215 ////////////////////////////////////////////////////////////////////////////// 215 //////////////////////////////////////////////////////////////////////////////
216 216
217 #include "SkArcToPathEffect.h"
217 #include "SkCornerPathEffect.h" 218 #include "SkCornerPathEffect.h"
218 #include "SkRandom.h" 219 #include "SkRandom.h"
219 220
220 class ArcToView : public SampleView { 221 class ArcToView : public SampleView {
221 SkPaint fPtsPaint, fArcPaint, fSkeletonPaint, fCornerPaint; 222 bool fDoFrame, fDoArcTo, fDoCorner, fDoConic;
223 SkPaint fPtsPaint, fArcToPaint, fSkeletonPaint, fCornerPaint;
222 public: 224 public:
223 enum { 225 enum {
224 N = 4 226 N = 4
225 }; 227 };
226 SkPoint fPts[N]; 228 SkPoint fPts[N];
227 SkScalar fRadius;
228 229
229 ArcToView() : fRadius(50) { 230 ArcToView()
231 : fDoFrame(false), fDoArcTo(false), fDoCorner(false), fDoConic(false)
232 {
230 SkRandom rand; 233 SkRandom rand;
231 for (int i = 0; i < N; ++i) { 234 for (int i = 0; i < N; ++i) {
232 fPts[i].fX = 20 + rand.nextUScalar1() * 640; 235 fPts[i].fX = 20 + rand.nextUScalar1() * 640;
233 fPts[i].fY = 20 + rand.nextUScalar1() * 480; 236 fPts[i].fY = 20 + rand.nextUScalar1() * 480;
234 } 237 }
238
239 const SkScalar rad = 50;
235 240
236 fPtsPaint.setAntiAlias(true); 241 fPtsPaint.setAntiAlias(true);
237 fPtsPaint.setStrokeWidth(15); 242 fPtsPaint.setStrokeWidth(15);
238 fPtsPaint.setStrokeCap(SkPaint::kRound_Cap); 243 fPtsPaint.setStrokeCap(SkPaint::kRound_Cap);
239 244
240 fArcPaint.setAntiAlias(true); 245 fArcToPaint.setAntiAlias(true);
241 fArcPaint.setStyle(SkPaint::kStroke_Style); 246 fArcToPaint.setStyle(SkPaint::kStroke_Style);
242 fArcPaint.setStrokeWidth(9); 247 fArcToPaint.setStrokeWidth(9);
243 fArcPaint.setColor(0x800000FF); 248 fArcToPaint.setColor(0x800000FF);
249 fArcToPaint.setPathEffect(SkArcToPathEffect::Create(rad))->unref();
244 250
245 fCornerPaint.setAntiAlias(true); 251 fCornerPaint.setAntiAlias(true);
246 fCornerPaint.setStyle(SkPaint::kStroke_Style); 252 fCornerPaint.setStyle(SkPaint::kStroke_Style);
247 fCornerPaint.setStrokeWidth(13); 253 fCornerPaint.setStrokeWidth(13);
248 fCornerPaint.setColor(SK_ColorGREEN); 254 fCornerPaint.setColor(SK_ColorGREEN);
249 fCornerPaint.setPathEffect(SkCornerPathEffect::Create(fRadius*2))->unref (); 255 fCornerPaint.setPathEffect(SkCornerPathEffect::Create(rad*2))->unref();
250 256
251 fSkeletonPaint.setAntiAlias(true); 257 fSkeletonPaint.setAntiAlias(true);
252 fSkeletonPaint.setStyle(SkPaint::kStroke_Style); 258 fSkeletonPaint.setStyle(SkPaint::kStroke_Style);
253 fSkeletonPaint.setColor(SK_ColorRED); 259 fSkeletonPaint.setColor(SK_ColorRED);
254 } 260 }
255 261
262 void toggle(bool& value) {
263 value = !value;
264 this->inval(NULL);
265 }
266
256 protected: 267 protected:
257 // overrides from SkEventSink 268 // overrides from SkEventSink
258 bool onQuery(SkEvent* evt) SK_OVERRIDE { 269 bool onQuery(SkEvent* evt) SK_OVERRIDE {
259 if (SampleCode::TitleQ(*evt)) { 270 if (SampleCode::TitleQ(*evt)) {
260 SampleCode::TitleR(evt, "ArcTo"); 271 SampleCode::TitleR(evt, "ArcTo");
261 return true; 272 return true;
262 } 273 }
274 SkUnichar uni;
275 if (SampleCode::CharQ(*evt, &uni)) {
276 switch (uni) {
277 case '1': this->toggle(fDoFrame); return true;
278 case '2': this->toggle(fDoArcTo); return true;
279 case '3': this->toggle(fDoCorner); return true;
280 case '4': this->toggle(fDoConic); return true;
281 default: break;
282 }
283 }
263 return this->INHERITED::onQuery(evt); 284 return this->INHERITED::onQuery(evt);
264 } 285 }
286
287 void makePath(SkPath* path) {
288 path->moveTo(fPts[0]);
289 for (int i = 1; i < N; ++i) {
290 path->lineTo(fPts[i]);
291 }
292 if (!fDoFrame) {
293 path->close();
294 }
295 }
265 296
266 void onDrawContent(SkCanvas* canvas) SK_OVERRIDE { 297 void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
267 canvas->drawPoints(SkCanvas::kPoints_PointMode, N, fPts, fPtsPaint); 298 canvas->drawPoints(SkCanvas::kPoints_PointMode, N, fPts, fPtsPaint);
268 299
269 SkPath path; 300 SkPath path;
301 this->makePath(&path);
270 302
271 path.moveTo(fPts[0]); 303 if (fDoCorner) {
272 for (int i = 1; i < N; ++i) { 304 canvas->drawPath(path, fCornerPaint);
273 path.lineTo(fPts[i].fX, fPts[i].fY);
274 } 305 }
275 canvas->drawPath(path, fCornerPaint); 306 if (fDoArcTo) {
307 canvas->drawPath(path, fArcToPaint);
308 }
276 309
277 path.reset(); 310 canvas->drawPath(path, fSkeletonPaint);
278 path.moveTo(fPts[0]);
279 for (int i = 1; i < N - 1; ++i) {
280 path.arcTo(fPts[i].fX, fPts[i].fY, fPts[i+1].fX, fPts[i+1].fY, fRadi us);
281 }
282 path.lineTo(fPts[N - 1]);
283 canvas->drawPath(path, fArcPaint);
284
285 canvas->drawPoints(SkCanvas::kPolygon_PointMode, N, fPts, fSkeletonPaint );
286 } 311 }
287 312
288 bool onClick(Click* click) SK_OVERRIDE { 313 bool onClick(Click* click) SK_OVERRIDE {
289 int32_t index; 314 int32_t index;
290 if (click->fMeta.findS32("index", &index)) { 315 if (click->fMeta.findS32("index", &index)) {
291 SkASSERT((unsigned)index < N); 316 SkASSERT((unsigned)index < N);
292 fPts[index] = click->fCurr; 317 fPts[index] = click->fCurr;
293 this->inval(NULL); 318 this->inval(NULL);
294 return true; 319 return true;
295 } 320 }
(...skipping 11 matching lines...) Expand all
307 } 332 }
308 } 333 }
309 return this->INHERITED::onFindClickHandler(x, y, modi); 334 return this->INHERITED::onFindClickHandler(x, y, modi);
310 } 335 }
311 336
312 private: 337 private:
313 typedef SampleView INHERITED; 338 typedef SampleView INHERITED;
314 }; 339 };
315 DEF_SAMPLE( return new ArcToView; ) 340 DEF_SAMPLE( return new ArcToView; )
316 341
OLDNEW
« no previous file with comments | « include/effects/SkArcToPathEffect.h ('k') | src/effects/SkArcToPathEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698