aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode/SampleHairCurves.cpp
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-08-30 18:13:44 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-08-30 18:13:44 +0000
commitaeb2160b1dd34f8e640e8e56544fe407d4ff6311 (patch)
tree029e885629354c8968e74c944dd7abc31adc9522 /samplecode/SampleHairCurves.cpp
parentdec9f2d3517c5b78d3bff0b965a7e07042b19875 (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.cpp112
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);
+