Index: samplecode/SampleCull.cpp |
diff --git a/samplecode/SampleCull.cpp b/samplecode/SampleCull.cpp |
deleted file mode 100644 |
index 011b22f9e79b07add8dd6798dc3f8ca284c940bb..0000000000000000000000000000000000000000 |
--- a/samplecode/SampleCull.cpp |
+++ /dev/null |
@@ -1,197 +0,0 @@ |
- |
-/* |
- * 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 "SkCornerPathEffect.h" |
-#include "SkCullPoints.h" |
-#include "SkGradientShader.h" |
-#include "SkPath.h" |
-#include "SkRegion.h" |
-#include "SkShader.h" |
-#include "SkUtils.h" |
-#include "SkRandom.h" |
- |
-static void addbump(SkPath* path, const SkPoint pts[2], SkScalar bump) { |
- SkVector tang; |
- |
- tang.setLength(pts[1].fX - pts[0].fX, pts[1].fY - pts[0].fY, bump); |
- |
- path->lineTo(SkScalarHalf(pts[0].fX + pts[1].fX) - tang.fY, |
- SkScalarHalf(pts[0].fY + pts[1].fY) + tang.fX); |
- path->lineTo(pts[1]); |
-} |
- |
-static void subdivide(SkPath* path, SkScalar bump) { |
- SkPath::Iter iter(*path, false); |
- SkPoint pts[4]; |
- SkPath tmp; |
- |
- for (;;) |
- switch (iter.next(pts)) { |
- case SkPath::kMove_Verb: |
- tmp.moveTo(pts[0]); |
- break; |
- case SkPath::kLine_Verb: |
- addbump(&tmp, pts, bump); |
- bump = -bump; |
- break; |
- case SkPath::kDone_Verb: |
- goto FINISH; |
- default: |
- break; |
- } |
- |
-FINISH: |
- path->swap(tmp); |
-} |
- |
-static SkIPoint* getpts(const SkPath& path, int* count) { |
- SkPoint pts[4]; |
- int n = 1; |
- SkIPoint* array; |
- |
- { |
- SkPath::Iter iter(path, false); |
- for (;;) |
- switch (iter.next(pts)) { |
- case SkPath::kLine_Verb: |
- n += 1; |
- break; |
- case SkPath::kDone_Verb: |
- goto FINISHED; |
- default: |
- break; |
- } |
- } |
- |
-FINISHED: |
- array = new SkIPoint[n]; |
- n = 0; |
- |
- { |
- SkPath::Iter iter(path, false); |
- for (;;) |
- switch (iter.next(pts)) { |
- case SkPath::kMove_Verb: |
- array[n++].set(SkScalarRoundToInt(pts[0].fX), |
- SkScalarRoundToInt(pts[0].fY)); |
- break; |
- case SkPath::kLine_Verb: |
- array[n++].set(SkScalarRoundToInt(pts[1].fX), |
- SkScalarRoundToInt(pts[1].fY)); |
- break; |
- case SkPath::kDone_Verb: |
- goto FINISHED2; |
- default: |
- break; |
- } |
- } |
- |
-FINISHED2: |
- *count = n; |
- return array; |
-} |
- |
-static SkScalar nextScalarRange(SkRandom& rand, SkScalar min, SkScalar max) { |
- return min + SkScalarMul(rand.nextUScalar1(), max - min); |
-} |
- |
-class CullView : public SampleView { |
-public: |
- CullView() { |
- fClip.set(0, 0, SkIntToScalar(160), SkIntToScalar(160)); |
- |
- SkRandom rand; |
- |
- for (int i = 0; i < 50; i++) { |
- SkScalar x = nextScalarRange(rand, -fClip.width()*1, fClip.width()*2); |
- SkScalar y = nextScalarRange(rand, -fClip.height()*1, fClip.height()*2); |
- if (i == 0) |
- fPath.moveTo(x, y); |
- else |
- fPath.lineTo(x, y); |
- } |
- |
- SkScalar bump = fClip.width()/8; |
- subdivide(&fPath, bump); |
- subdivide(&fPath, bump); |
- subdivide(&fPath, bump); |
- fPoints = getpts(fPath, &fPtCount); |
- |
- this->setBGColor(0xFFDDDDDD); |
- } |
- |
- virtual ~CullView() { |
- delete[] fPoints; |
- } |
- |
-protected: |
- // overrides from SkEventSink |
- virtual bool onQuery(SkEvent* evt) { |
- if (SampleCode::TitleQ(*evt)) { |
- SampleCode::TitleR(evt, "Culling"); |
- return true; |
- } |
- return this->INHERITED::onQuery(evt); |
- } |
- |
- virtual void onDrawContent(SkCanvas* canvas) { |
- SkAutoCanvasRestore ar(canvas, true); |
- |
- canvas->translate( SkScalarHalf(this->width() - fClip.width()), |
- SkScalarHalf(this->height() - fClip.height())); |
- |
- // canvas->scale(SK_Scalar1*3, SK_Scalar1*3, 0, 0); |
- |
- SkPaint paint; |
- |
- // paint.setAntiAliasOn(true); |
- paint.setStyle(SkPaint::kStroke_Style); |
- |
- canvas->drawRect(fClip, paint); |
- |
-#if 1 |
- paint.setColor(0xFF555555); |
- paint.setStrokeWidth(SkIntToScalar(2)); |
-// paint.setPathEffect(new SkCornerPathEffect(SkIntToScalar(30)))->unref(); |
- canvas->drawPath(fPath, paint); |
-// paint.setPathEffect(nullptr); |
-#endif |
- |
- SkPath tmp; |
- SkIRect iclip; |
- fClip.round(&iclip); |
- |
- SkCullPointsPath cpp(iclip, &tmp); |
- |
- cpp.moveTo(fPoints[0].fX, fPoints[0].fY); |
- for (int i = 0; i < fPtCount; i++) |
- cpp.lineTo(fPoints[i].fX, fPoints[i].fY); |
- |
- paint.setColor(SK_ColorRED); |
- paint.setStrokeWidth(SkIntToScalar(3)); |
- paint.setStrokeJoin(SkPaint::kRound_Join); |
- canvas->drawPath(tmp, paint); |
- |
- this->inval(nullptr); |
- } |
- |
-private: |
- SkRect fClip; |
- SkIPoint* fPoints; |
- SkPath fPath; |
- int fPtCount; |
- |
- typedef SampleView INHERITED; |
-}; |
- |
-////////////////////////////////////////////////////////////////////////////// |
- |
-static SkView* MyFactory() { return new CullView; } |
-static SkViewRegister reg(MyFactory); |