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

Unified Diff: samplecode/SamplePath.cpp

Issue 808793002: add sample for arcTo (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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « samplecode/SampleCode.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: samplecode/SamplePath.cpp
diff --git a/samplecode/SamplePath.cpp b/samplecode/SamplePath.cpp
index e35eeb6717575ffe2e91c1ca349cc2e1b5c449f5..49c51d3ad055e855424914c56d123fea6fb09939 100644
--- a/samplecode/SamplePath.cpp
+++ b/samplecode/SamplePath.cpp
@@ -210,8 +210,107 @@ protected:
private:
typedef SampleView INHERITED;
};
+DEF_SAMPLE( return new PathView; )
//////////////////////////////////////////////////////////////////////////////
-static SkView* MyFactory() { return new PathView; }
-static SkViewRegister reg(MyFactory);
+#include "SkCornerPathEffect.h"
+#include "SkRandom.h"
+
+class ArcToView : public SampleView {
+ SkPaint fPtsPaint, fArcPaint, fSkeletonPaint, fCornerPaint;
+public:
+ enum {
+ N = 4
+ };
+ SkPoint fPts[N];
+ SkScalar fRadius;
+
+ ArcToView() : fRadius(50) {
+ SkRandom rand;
+ for (int i = 0; i < N; ++i) {
+ fPts[i].fX = 20 + rand.nextUScalar1() * 640;
+ fPts[i].fY = 20 + rand.nextUScalar1() * 480;
+ }
+
+ fPtsPaint.setAntiAlias(true);
+ fPtsPaint.setStrokeWidth(15);
+ fPtsPaint.setStrokeCap(SkPaint::kRound_Cap);
+
+ fArcPaint.setAntiAlias(true);
+ fArcPaint.setStyle(SkPaint::kStroke_Style);
+ fArcPaint.setStrokeWidth(9);
+ fArcPaint.setColor(0x800000FF);
+
+ fCornerPaint.setAntiAlias(true);
+ fCornerPaint.setStyle(SkPaint::kStroke_Style);
+ fCornerPaint.setStrokeWidth(13);
+ fCornerPaint.setColor(SK_ColorGREEN);
+ fCornerPaint.setPathEffect(SkCornerPathEffect::Create(fRadius*2))->unref();
+
+ fSkeletonPaint.setAntiAlias(true);
+ fSkeletonPaint.setStyle(SkPaint::kStroke_Style);
+ fSkeletonPaint.setColor(SK_ColorRED);
+ }
+
+protected:
+ // overrides from SkEventSink
+ bool onQuery(SkEvent* evt) SK_OVERRIDE {
+ if (SampleCode::TitleQ(*evt)) {
+ SampleCode::TitleR(evt, "ArcTo");
+ return true;
+ }
+ return this->INHERITED::onQuery(evt);
+ }
+
+ void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
+ canvas->drawPoints(SkCanvas::kPoints_PointMode, N, fPts, fPtsPaint);
+
+ SkPath path;
+
+ path.moveTo(fPts[0]);
+ for (int i = 1; i < N; ++i) {
+ path.lineTo(fPts[i].fX, fPts[i].fY);
+ }
+ canvas->drawPath(path, fCornerPaint);
+
+ path.reset();
+ path.moveTo(fPts[0]);
+ for (int i = 1; i < N - 1; ++i) {
+ path.arcTo(fPts[i].fX, fPts[i].fY, fPts[i+1].fX, fPts[i+1].fY, fRadius);
+ }
+ path.lineTo(fPts[N - 1]);
+ canvas->drawPath(path, fArcPaint);
+
+ canvas->drawPoints(SkCanvas::kPolygon_PointMode, N, fPts, fSkeletonPaint);
+ }
+
+ bool onClick(Click* click) SK_OVERRIDE {
+ int32_t index;
+ if (click->fMeta.findS32("index", &index)) {
+ SkASSERT((unsigned)index < N);
+ fPts[index] = click->fCurr;
+ this->inval(NULL);
+ return true;
+ }
+ return false;
+ }
+
+ SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) SK_OVERRIDE {
+ const SkScalar tol = 4;
+ const SkRect r = SkRect::MakeXYWH(x - tol, y - tol, tol * 2, tol * 2);
+ for (int i = 0; i < N; ++i) {
+ if (r.intersects(SkRect::MakeXYWH(fPts[i].fX, fPts[i].fY, 1, 1))) {
+ Click* click = new Click(this);
+ click->fMeta.setS32("index", i);
+ return click;
+ }
+ }
+ return this->INHERITED::onFindClickHandler(x, y, modi);
+ }
+
+private:
+ typedef SampleView INHERITED;
+};
+DEF_SAMPLE( return new ArcToView; )
+
« no previous file with comments | « samplecode/SampleCode.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698