1 /* 2 * Copyright 2015 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "gm.h" 9 #include "SkBlurMask.h" 10 #include "SkBlurMaskFilter.h" 11 #include "SkCanvas.h" 12 #include "SkDrawFilter.h" 13 #include "SkPaint.h" 14 15 #ifdef SK_SUPPORT_LEGACY_DRAWFILTER 16 17 /** 18 * Initial test coverage for SkDrawFilter. 19 * Draws two rectangles; if draw filters are broken, they will match. 20 * If draw filters are working correctly, the first will be blue and blurred, 21 * the second red and sharp. 22 */ 23 24 namespace { 25 class TestFilter : public SkDrawFilter { 26 public: 27 bool filter(SkPaint* p, Type) override { 28 p->setColor(SK_ColorRED); 29 p->setMaskFilter(nullptr); 30 return true; 31 } 32 }; 33 } 34 35 class DrawFilterGM : public skiagm::GM { 36 SkAutoTUnref<SkMaskFilter> fBlur; 37 38 protected: 39 SkISize onISize() override { 40 return SkISize::Make(320, 240); 41 } 42 43 SkString onShortName() override { 44 return SkString("drawfilter"); 45 } 46 47 void onOnceBeforeDraw() override { 48 fBlur.reset(SkBlurMaskFilter::Create(kNormal_SkBlurStyle, 49 SkBlurMask::ConvertRadiusToSigma(10.0f), 50 kLow_SkBlurQuality)); 51 } 52 53 void onDraw(SkCanvas* canvas) override { 54 SkPaint p; 55 p.setColor(SK_ColorBLUE); 56 p.setMaskFilter(fBlur.get()); 57 SkRect r = { 20, 20, 100, 100 }; 58 canvas->setDrawFilter(nullptr); 59 canvas->drawRect(r, p); 60 TestFilter redNoBlur; 61 canvas->setDrawFilter(&redNoBlur); 62 canvas->translate(120.0f, 40.0f); 63 canvas->drawRect(r, p); 64 65 // Must unset if the DrawFilter is from the stack to avoid refcount errors! 66 canvas->setDrawFilter(nullptr); 67 } 68 69 private: 70 typedef GM INHERITED; 71 }; 72 73 DEF_GM( return new DrawFilterGM; ) 74 75 #endif 76