diff options
author | reed <reed@google.com> | 2015-03-20 06:32:52 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-20 06:32:52 -0700 |
commit | 8dc0ccb8d33d1af7dd13228509e61fe915bc7705 (patch) | |
tree | 5fcae0ab9146e078ea8c82394dcb445e0f5dc521 /gm/imagefiltersbase.cpp | |
parent | 40b7dd57ef1f4e91af72512d8ca57459b99d71bd (diff) |
disable LCD for layers w/ filters
BUG=468311
see also skiabug.com/3567
Review URL: https://codereview.chromium.org/1002603003
Diffstat (limited to 'gm/imagefiltersbase.cpp')
-rw-r--r-- | gm/imagefiltersbase.cpp | 106 |
1 files changed, 97 insertions, 9 deletions
diff --git a/gm/imagefiltersbase.cpp b/gm/imagefiltersbase.cpp index ea32769d4d..b21f83d6f1 100644 --- a/gm/imagefiltersbase.cpp +++ b/gm/imagefiltersbase.cpp @@ -36,8 +36,8 @@ public: protected: FailImageFilter() : INHERITED(0, NULL) {} - virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, - SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE { + bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, + SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE { return false; } @@ -78,8 +78,8 @@ public: protected: IdentityImageFilter(SkImageFilter* input) : INHERITED(1, &input) {} - virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, - SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE { + bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, + SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE { *result = src; offset->set(0, 0); return true; @@ -194,11 +194,11 @@ public: ImageFiltersBaseGM () {} protected: - virtual SkString onShortName() { + SkString onShortName() SK_OVERRIDE { return SkString("imagefiltersbase"); } - virtual SkISize onISize() { return SkISize::Make(700, 500); } + SkISize onISize() SK_OVERRIDE { return SkISize::Make(700, 500); } void draw_frame(SkCanvas* canvas, const SkRect& r) { SkPaint paint; @@ -207,7 +207,7 @@ protected: canvas->drawRect(r, paint); } - virtual void onDraw(SkCanvas* canvas) { + void onDraw(SkCanvas* canvas) SK_OVERRIDE { void (*drawProc[])(SkCanvas*, const SkRect&, SkImageFilter*) = { draw_paint, draw_line, draw_rect, draw_path, draw_text, @@ -254,8 +254,96 @@ protected: private: typedef GM INHERITED; }; +DEF_GM( return new ImageFiltersBaseGM; ) /////////////////////////////////////////////////////////////////////////////// -static skiagm::GM* MyFactory(void*) { return new ImageFiltersBaseGM; } -static skiagm::GMRegistry reg(MyFactory); +/* + * Want to test combos of filter and LCD text, to be sure we disable LCD in the presence of + * a filter. + */ +class ImageFiltersTextBaseGM : public skiagm::GM { + SkString fSuffix; +public: + ImageFiltersTextBaseGM(const char suffix[]) : fSuffix(suffix) {} + +protected: + SkString onShortName() SK_OVERRIDE { + SkString name; + name.printf("%s_%s", "textfilter", fSuffix.c_str()); + return name; + } + + SkISize onISize() SK_OVERRIDE { return SkISize::Make(512, 342); } + + void drawWaterfall(SkCanvas* canvas, const SkPaint& origPaint) { + const uint32_t flags[] = { + 0, + SkPaint::kAntiAlias_Flag, + SkPaint::kAntiAlias_Flag | SkPaint::kLCDRenderText_Flag, + }; + SkPaint paint(origPaint); + paint.setTextSize(30); + + SkAutoCanvasRestore acr(canvas, true); + for (size_t i = 0; i < SK_ARRAY_COUNT(flags); ++i) { + paint.setFlags(flags[i]); + canvas->drawText("Hamburgefons", 11, 0, 0, paint); + canvas->translate(0, 40); + } + } + + virtual void installFilter(SkPaint* paint) = 0; + + void onDraw(SkCanvas* canvas) SK_OVERRIDE { + SkPaint paint; + + canvas->translate(20, 40); + + for (int doSaveLayer = 0; doSaveLayer <= 1; ++doSaveLayer) { + SkAutoCanvasRestore acr(canvas, true); + for (int useFilter = 0; useFilter <= 1; ++useFilter) { + SkAutoCanvasRestore acr2(canvas, true); + + SkPaint paint; + if (useFilter) { + this->installFilter(&paint); + } + if (doSaveLayer) { + canvas->saveLayer(NULL, &paint); + paint.setImageFilter(NULL); + } + this->drawWaterfall(canvas, paint); + + acr2.restore(); + canvas->translate(250, 0); + } + acr.restore(); + canvas->translate(0, 200); + } + } + +private: + typedef GM INHERITED; +}; + +class ImageFiltersText_IF : public ImageFiltersTextBaseGM { +public: + ImageFiltersText_IF() : ImageFiltersTextBaseGM("image") {} + + void installFilter(SkPaint* paint) SK_OVERRIDE { + paint->setImageFilter(SkBlurImageFilter::Create(1.5f, 1.5f))->unref(); + } +}; +DEF_GM( return new ImageFiltersText_IF; ) + +class ImageFiltersText_CF : public ImageFiltersTextBaseGM { +public: + ImageFiltersText_CF() : ImageFiltersTextBaseGM("color") {} + + void installFilter(SkPaint* paint) SK_OVERRIDE { + paint->setColorFilter(SkColorFilter::CreateModeFilter(SK_ColorBLUE, SkXfermode::kSrcIn_Mode))->unref(); + } +}; +DEF_GM( return new ImageFiltersText_CF; ) + |