GM: replace boilerplate with macros
I have verified locally that nothing draws differently.
Motivation:
* SK_SIMPLE_GM makes it easier to write a GM.
* Reducing 1100 lines of code makes maintenance easier.
* Simple GMs are easy to convert to Fiddles.
Review URL: https://codereview.chromium.org/1333553002
diff --git a/gm/blurrect.cpp b/gm/blurrect.cpp
index 6b73540..4f15815 100644
--- a/gm/blurrect.cpp
+++ b/gm/blurrect.cpp
@@ -169,31 +169,11 @@
typedef GM INHERITED;
};
+DEF_SIMPLE_GM(blurrect_gallery, canvas, 1200, 1024) {
+ const int fGMWidth = 1200;
+ const int fPadding = 10;
+ const int fMargin = 100;
-class BlurRectDirectGM : public skiagm::GM {
- SkString fName;
- int fGMWidth, fGMHeight;
- int fPadding, fMargin;
-public:
- BlurRectDirectGM(const char name[])
- : fName(name),
- fGMWidth(1200),
- fGMHeight(1024),
- fPadding(10),
- fMargin(100)
- {
- }
-
-protected:
- virtual SkString onShortName() {
- return fName;
- }
-
- virtual SkISize onISize() {
- return SkISize::Make(fGMWidth, fGMHeight);
- }
-
- virtual void onDraw(SkCanvas* canvas) {
const int widths[] = {25, 5, 5, 100, 150, 25};
const int heights[] = {100, 100, 5, 25, 150, 25};
const SkBlurStyle styles[] = {kNormal_SkBlurStyle, kInner_SkBlurStyle, kOuter_SkBlurStyle};
@@ -244,177 +224,8 @@
}
}
}
- }
-
-private:
- typedef GM INHERITED;
-};
-
-class BlurRectCompareGM : public skiagm::GM {
- SkString fName;
- unsigned int fRectWidth, fRectHeight;
- SkScalar fRadius;
- SkBlurStyle fStyle;
-public:
- BlurRectCompareGM(const char name[], unsigned int rectWidth,
- unsigned int rectHeight, float radius,
- SkBlurStyle style)
- : fName(name)
- , fRectWidth(rectWidth)
- , fRectHeight(rectHeight)
- , fRadius(radius)
- , fStyle(style) {
- }
- int width() const {
- return fRectWidth;
- }
- int height() const {
- return fRectHeight;
- }
- SkScalar radius() const {
- return fRadius;
- }
- SkBlurStyle style() const {
- return fStyle;
- }
-
-protected:
- virtual SkString onShortName() {
- return fName;
- }
-
- virtual SkISize onISize() {
- return SkISize::Make(640, 480);
- }
-
- virtual bool makeMask(SkMask *m, const SkRect&) = 0;
-
- virtual void onDraw(SkCanvas* canvas) {
- SkRect r;
- r.setWH(SkIntToScalar(fRectWidth), SkIntToScalar(fRectHeight));
-
- SkISize canvas_size = canvas->getDeviceSize();
- int center_x = (canvas_size.fWidth - (int)(r.width()))/2;
- int center_y = (canvas_size.fHeight - (int)(r.height()))/2;
-
- SkMask mask;
-
- if (!this->makeMask(&mask, r)) {
- SkPaint paint;
- r.offset( SkIntToScalar(center_x), SkIntToScalar(center_y) );
- canvas->drawRect(r,paint);
- return;
- }
- SkAutoMaskFreeImage amfi(mask.fImage);
-
- SkBitmap bm;
- bm.installMaskPixels(mask);
-
- center_x = (canvas_size.fWidth - mask.fBounds.width())/2;
- center_y = (canvas_size.fHeight - mask.fBounds.height())/2;
-
- canvas->drawBitmap(bm, SkIntToScalar(center_x), SkIntToScalar(center_y), nullptr);
- }
-
-private:
- typedef GM INHERITED;
-};
-
-class BlurRectFastGM: public BlurRectCompareGM {
-public:
- BlurRectFastGM(const char name[], unsigned int rectWidth,
- unsigned int rectHeight, float blurRadius,
- SkBlurStyle style) :
- INHERITED(name, rectWidth, rectHeight, blurRadius, style) {
- }
-
-protected:
- bool makeMask(SkMask *m, const SkRect& r) override {
- return SkBlurMask::BlurRect(SkBlurMask::ConvertRadiusToSigma(this->radius()),
- m, r, this->style());
- }
-private:
- typedef BlurRectCompareGM INHERITED;
-};
-
-class BlurRectSlowGM: public BlurRectCompareGM {
-public:
- BlurRectSlowGM(const char name[], unsigned int rectWidth, unsigned int rectHeight,
- float blurRadius, SkBlurStyle style)
- : INHERITED(name, rectWidth, rectHeight, blurRadius, style) {
- }
-
-protected:
- bool makeMask(SkMask *m, const SkRect& r) override {
- SkMask src;
- r.roundOut(&src.fBounds);
- src.fBounds.offset(-src.fBounds.fLeft, -src.fBounds.fTop); // move to origin
- src.fFormat = SkMask::kA8_Format;
- src.fRowBytes = src.fBounds.width();
- src.fImage = SkMask::AllocImage(src.computeTotalImageSize());
- SkAutoMaskFreeImage amfi(src.fImage);
-
- memset(src.fImage, 0xff, src.computeTotalImageSize());
-
- return SkBlurMask::BoxBlur(m, src,
- SkBlurMask::ConvertRadiusToSigma(this->radius()),
- this->style(), this->getQuality());
- }
-
- virtual SkBlurQuality getQuality() {
- return kHigh_SkBlurQuality;
- }
-private:
- typedef BlurRectCompareGM INHERITED;
-};
-
-class BlurRectSlowLowGM: public BlurRectSlowGM {
-public:
- BlurRectSlowLowGM(const char name[], unsigned int rectWidth, unsigned int rectHeight,
- float blurRadius, SkBlurStyle style)
- : INHERITED(name, rectWidth, rectHeight, blurRadius, style) {
- }
-
-protected:
- SkBlurQuality getQuality() override {
- return kLow_SkBlurQuality;
- }
-private:
- typedef BlurRectSlowGM INHERITED;
-};
-
-class BlurRectGroundTruthGM: public BlurRectCompareGM {
-public:
- BlurRectGroundTruthGM(const char name[], unsigned int rectWidth, unsigned int rectHeight,
- float blurRadius, SkBlurStyle style)
- : INHERITED(name, rectWidth, rectHeight, blurRadius, style) {
- }
-
-protected:
- bool makeMask(SkMask *m, const SkRect& r) override {
- SkMask src;
- r.roundOut(&src.fBounds);
- src.fBounds.offset(-src.fBounds.fLeft, -src.fBounds.fTop); // move to origin
- src.fFormat = SkMask::kA8_Format;
- src.fRowBytes = src.fBounds.width();
- src.fImage = SkMask::AllocImage(src.computeTotalImageSize());
- SkAutoMaskFreeImage amfi(src.fImage);
-
- memset(src.fImage, 0xff, src.computeTotalImageSize());
-
- return SkBlurMask::BlurGroundTruth(SkBlurMask::ConvertRadiusToSigma(this->radius()),
- m, src, this->style());
- }
-
- virtual SkBlurQuality getQuality() {
- return kHigh_SkBlurQuality;
- }
-private:
- typedef BlurRectCompareGM INHERITED;
-};
-
+}
//////////////////////////////////////////////////////////////////////////////
DEF_GM(return new BlurRectGM("blurrects", 0xFF);)
-DEF_GM(return new BlurRectDirectGM("blurrect_gallery");)