add onOnceBeforeDraw() virtual, so gm's can easily perform lazy initialization
git-svn-id: http://skia.googlecode.com/svn/trunk@6559 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gm/gm.cpp b/gm/gm.cpp
index 1ccec9f..c1e75e9 100644
--- a/gm/gm.cpp
+++ b/gm/gm.cpp
@@ -13,6 +13,7 @@
GM::GM() {
fBGColor = SK_ColorWHITE;
fCanvasIsDeferred = false;
+ fHaveCalledOnceBeforeDraw = false;
}
GM::~GM() {}
@@ -22,10 +23,18 @@
}
void GM::drawContent(SkCanvas* canvas) {
+ if (!fHaveCalledOnceBeforeDraw) {
+ fHaveCalledOnceBeforeDraw = true;
+ this->onOnceBeforeDraw();
+ }
this->onDraw(canvas);
}
void GM::drawBackground(SkCanvas* canvas) {
+ if (!fHaveCalledOnceBeforeDraw) {
+ fHaveCalledOnceBeforeDraw = true;
+ this->onOnceBeforeDraw();
+ }
this->onDrawBackground(canvas);
}
diff --git a/gm/gm.h b/gm/gm.h
index 057325e..9460ec0 100644
--- a/gm/gm.h
+++ b/gm/gm.h
@@ -79,6 +79,7 @@
protected:
static SkString gResourcePath;
+ virtual void onOnceBeforeDraw() {}
virtual void onDraw(SkCanvas*) = 0;
virtual void onDrawBackground(SkCanvas*);
virtual SkISize onISize() = 0;
@@ -90,6 +91,7 @@
SkString fShortName;
SkColor fBGColor;
bool fCanvasIsDeferred; // work-around problem in srcmode.cpp
+ bool fHaveCalledOnceBeforeDraw;
};
typedef SkTRegistry<GM*, void*> GMRegistry;
diff --git a/gm/hairmodes.cpp b/gm/hairmodes.cpp
index 67f1fa3..6fd72fc 100644
--- a/gm/hairmodes.cpp
+++ b/gm/hairmodes.cpp
@@ -79,20 +79,20 @@
class HairModesGM : public GM {
SkPaint fBGPaint;
- public:
- HairModesGM() {
- fBGPaint.setShader(make_bg_shader())->unref();
- }
protected:
- virtual SkString onShortName() {
+ virtual SkString onShortName() SK_OVERRIDE {
return SkString("hairmodes");
}
virtual SkISize onISize() { return make_isize(640, 480); }
- virtual void onDraw(SkCanvas* canvas) {
+ virtual void onOnceBeforeDraw() SK_OVERRIDE {
+ fBGPaint.setShader(make_bg_shader())->unref();
+ }
+
+ virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
const SkRect bounds = SkRect::MakeWH(W, H);
static const SkAlpha gAlphaValue[] = { 0xFF, 0x88, 0x88 };
diff --git a/gm/tilemodes.cpp b/gm/tilemodes.cpp
index 6745769..f2fbe77 100644
--- a/gm/tilemodes.cpp
+++ b/gm/tilemodes.cpp
@@ -64,9 +64,6 @@
TilingGM()
: fLooper(SkIntToScalar(1), SkIntToScalar(2), SkIntToScalar(2),
0x88000000) {
- for (size_t i = 0; i < SK_ARRAY_COUNT(gConfigs); i++) {
- makebm(&fTexture[i], gConfigs[i], gWidth, gHeight);
- }
}
SkBitmap fTexture[SK_ARRAY_COUNT(gConfigs)];
@@ -78,7 +75,13 @@
SkISize onISize() { return SkISize::Make(880, 560); }
- virtual void onDraw(SkCanvas* canvas) {
+ virtual void onOnceBeforeDraw() SK_OVERRIDE {
+ for (size_t i = 0; i < SK_ARRAY_COUNT(gConfigs); i++) {
+ makebm(&fTexture[i], gConfigs[i], gWidth, gHeight);
+ }
+ }
+
+ virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
SkRect r = { 0, 0, SkIntToScalar(gWidth*2), SkIntToScalar(gHeight*2) };
diff --git a/gm/tinybitmap.cpp b/gm/tinybitmap.cpp
index 3b1006c..26bf25e 100644
--- a/gm/tinybitmap.cpp
+++ b/gm/tinybitmap.cpp
@@ -32,11 +32,9 @@
}
class TinyBitmapGM : public GM {
- SkBitmap fBM;
public:
TinyBitmapGM() {
this->setBGColor(0xFFDDDDDD);
- fBM = make_bitmap();
}
protected:
@@ -47,8 +45,9 @@
virtual SkISize onISize() { return make_isize(100, 100); }
virtual void onDraw(SkCanvas* canvas) {
+ SkBitmap bm = make_bitmap();
SkShader* s =
- SkShader::CreateBitmapShader(fBM, SkShader::kRepeat_TileMode,
+ SkShader::CreateBitmapShader(bm, SkShader::kRepeat_TileMode,
SkShader::kMirror_TileMode);
SkPaint paint;
paint.setAlpha(0x80);