diff options
author | bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-08-30 18:13:44 +0000 |
---|---|---|
committer | bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-08-30 18:13:44 +0000 |
commit | aeb2160b1dd34f8e640e8e56544fe407d4ff6311 (patch) | |
tree | 029e885629354c8968e74c944dd7abc31adc9522 /samplecode/SampleHairCurves.cpp | |
parent | dec9f2d3517c5b78d3bff0b965a7e07042b19875 (diff) |
Add GrAAHairLinePathRenderer
Review URL: http://codereview.appspot.com/4926045
git-svn-id: http://skia.googlecode.com/svn/trunk@2196 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'samplecode/SampleHairCurves.cpp')
-rw-r--r-- | samplecode/SampleHairCurves.cpp | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/samplecode/SampleHairCurves.cpp b/samplecode/SampleHairCurves.cpp new file mode 100644 index 0000000000..152cbeb09c --- /dev/null +++ b/samplecode/SampleHairCurves.cpp @@ -0,0 +1,112 @@ + +/* + * Copyright 2011 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#include "SampleCode.h" +#include "SkView.h" +#include "SkCanvas.h" +#include "SkPath.h" +#include "SkRandom.h" + +class HairCurvesView : public SampleView { +public: + HairCurvesView() { + } + +protected: + // overrides from SkEventSink + virtual bool onQuery(SkEvent* evt) { + if (SampleCode::TitleQ(*evt)) { + SampleCode::TitleR(evt, "HairCurves"); + return true; + } + return this->INHERITED::onQuery(evt); + } + + + virtual void onDrawContent(SkCanvas* canvas) { + SkPaint paint; + paint.setAntiAlias(true); + paint.setStyle(SkPaint::kStroke_Style); + paint.setStrokeWidth(-1); + canvas->save(); + canvas->scale(1000 * SK_Scalar1, 1000 * SK_Scalar1); + SkRandom rand; + SkPath curves; + SkPath hulls; + SkPath ctrlPts; + for (int i = 0; i < 100; ++i) { + SkScalar pts[] = { + rand.nextUScalar1(), rand.nextUScalar1(), + rand.nextUScalar1(), rand.nextUScalar1(), + rand.nextUScalar1(), rand.nextUScalar1(), + rand.nextUScalar1(), rand.nextUScalar1() + }; + curves.moveTo(pts[0], pts[1]); + curves.cubicTo(pts[2], pts[3], + pts[4], pts[5], + pts[6], pts[7]); + + hulls.moveTo(pts[0], pts[1]); + hulls.lineTo(pts[2], pts[3]); + hulls.lineTo(pts[4], pts[5]); + hulls.lineTo(pts[6], pts[7]); + + ctrlPts.addCircle(pts[0], pts[1], SK_Scalar1 / 200); + ctrlPts.addCircle(pts[2], pts[3], SK_Scalar1 / 200); + ctrlPts.addCircle(pts[4], pts[5], SK_Scalar1 / 200); + ctrlPts.addCircle(pts[6], pts[7], SK_Scalar1 / 200); + } + for (int i = 0; i < 100; ++i) { + SkScalar pts[] = { + rand.nextUScalar1(), rand.nextUScalar1(), + rand.nextUScalar1(), rand.nextUScalar1(), + rand.nextUScalar1(), rand.nextUScalar1(), + }; + curves.moveTo(pts[0], pts[1]); + curves.quadTo(pts[2], pts[3], + pts[4], pts[5]); + + hulls.moveTo(pts[0], pts[1]); + hulls.lineTo(pts[2], pts[3]); + hulls.lineTo(pts[4], pts[5]); + + ctrlPts.addCircle(pts[0], pts[1], SK_Scalar1 / 200); + ctrlPts.addCircle(pts[2], pts[3], SK_Scalar1 / 200); + ctrlPts.addCircle(pts[4], pts[5], SK_Scalar1 / 200); + } + for (int i = 0; i < 100; ++i) { + SkScalar pts[] = { + rand.nextUScalar1(), rand.nextUScalar1(), + rand.nextUScalar1(), rand.nextUScalar1(), + }; + curves.moveTo(pts[0], pts[1]); + curves.lineTo(pts[2], pts[3]); + + ctrlPts.addCircle(pts[0], pts[1], SK_Scalar1 / 200); + ctrlPts.addCircle(pts[2], pts[3], SK_Scalar1 / 200); + } + + paint.setColor(SK_ColorBLACK); + canvas->drawPath(curves, paint); + paint.setColor(SK_ColorRED); + //canvas->drawPath(hulls, paint); + paint.setStyle(SkPaint::kFill_Style); + paint.setColor(SK_ColorBLUE); + //canvas->drawPath(ctrlPts, paint); + + canvas->restore(); + } + +private: + typedef SampleView INHERITED; +}; + +////////////////////////////////////////////////////////////////////////////// + +static SkView* MyFactory() { return new HairCurvesView; } +static SkViewRegister reg(MyFactory); + |