diff options
-rw-r--r-- | gm/convexpaths.cpp | 23 | ||||
-rw-r--r-- | gm/filltypes.cpp | 13 | ||||
-rw-r--r-- | gm/filltypespersp.cpp | 14 |
3 files changed, 42 insertions, 8 deletions
diff --git a/gm/convexpaths.cpp b/gm/convexpaths.cpp index 2c719e826d..ebe715d866 100644 --- a/gm/convexpaths.cpp +++ b/gm/convexpaths.cpp @@ -9,13 +9,28 @@ #include "SkRandom.h" #include "SkTArray.h" +class SkOnce : SkNoncopyable { +public: + SkOnce() { fDidOnce = false; } + + bool needToDo() const { return !fDidOnce; } + bool alreadyDone() const { return fDidOnce; } + void accomplished() { + SkASSERT(!fDidOnce); + fDidOnce = true; + } + +private: + bool fDidOnce; +}; + namespace skiagm { class ConvexPathsGM : public GM { + SkOnce fOnce; public: ConvexPathsGM() { this->setBGColor(0xFF000000); - this->makePaths(); } protected: @@ -29,6 +44,11 @@ protected: } void makePaths() { + if (fOnce.alreadyDone()) { + return; + } + fOnce.accomplished(); + // CW fPaths.push_back().moveTo(0, 0); fPaths.back().quadTo(50 * SK_Scalar1, 100 * SK_Scalar1, @@ -169,6 +189,7 @@ protected: } virtual void onDraw(SkCanvas* canvas) { + this->makePaths(); SkPaint paint; paint.setAntiAlias(true); diff --git a/gm/filltypes.cpp b/gm/filltypes.cpp index 73c718e20b..e096a6b1fc 100644 --- a/gm/filltypes.cpp +++ b/gm/filltypes.cpp @@ -14,9 +14,14 @@ class FillTypeGM : public GM { public: FillTypeGM() { this->setBGColor(0xFFDDDDDD); - const SkScalar radius = SkIntToScalar(45); - fPath.addCircle(SkIntToScalar(50), SkIntToScalar(50), radius); - fPath.addCircle(SkIntToScalar(100), SkIntToScalar(100), radius); + } + + void makePath() { + if (fPath.isEmpty()) { + const SkScalar radius = SkIntToScalar(45); + fPath.addCircle(SkIntToScalar(50), SkIntToScalar(50), radius); + fPath.addCircle(SkIntToScalar(100), SkIntToScalar(100), radius); + } } protected: @@ -57,6 +62,8 @@ protected: } virtual void onDraw(SkCanvas* canvas) { + this->makePath(); + canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); SkPaint paint; diff --git a/gm/filltypespersp.cpp b/gm/filltypespersp.cpp index 33f3242493..e675990631 100644 --- a/gm/filltypespersp.cpp +++ b/gm/filltypespersp.cpp @@ -13,10 +13,14 @@ namespace skiagm { class FillTypePerspGM : public GM { SkPath fPath; public: - FillTypePerspGM() { - const SkScalar radius = SkIntToScalar(45); - fPath.addCircle(SkIntToScalar(50), SkIntToScalar(50), radius); - fPath.addCircle(SkIntToScalar(100), SkIntToScalar(100), radius); + FillTypePerspGM() {} + + void makePath() { + if (fPath.isEmpty()) { + const SkScalar radius = SkIntToScalar(45); + fPath.addCircle(SkIntToScalar(50), SkIntToScalar(50), radius); + fPath.addCircle(SkIntToScalar(100), SkIntToScalar(100), radius); + } } protected: @@ -71,6 +75,8 @@ protected: } virtual void onDraw(SkCanvas* canvas) { + this->makePath(); + // do perspective drawPaint as the background; SkPaint bkgnrd; SkPoint center = SkPoint::Make(SkIntToScalar(100), |