aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/imagefiltersbase.cpp
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2015-03-20 06:32:52 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-03-20 06:32:52 -0700
commit8dc0ccb8d33d1af7dd13228509e61fe915bc7705 (patch)
tree5fcae0ab9146e078ea8c82394dcb445e0f5dc521 /gm/imagefiltersbase.cpp
parent40b7dd57ef1f4e91af72512d8ca57459b99d71bd (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.cpp106
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; )
+