aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gm/convexpaths.cpp23
-rw-r--r--gm/filltypes.cpp13
-rw-r--r--gm/filltypespersp.cpp14
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),