blob: 8c29f07b0268e8a2d34f6f9c34f097e952ca1806 [file] [log] [blame]
tomhudsoncdf34cd2015-03-06 06:15:20 -08001/*
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/**
16 * Initial test coverage for SkDrawFilter.
17 * Draws two rectangles; if draw filters are broken, they will match.
18 * If draw filters are working correctly, the first will be blue and blurred,
19 * the second red and sharp.
20 */
21
reedffab15f2015-04-11 19:29:31 -070022namespace {
tomhudsoncdf34cd2015-03-06 06:15:20 -080023class TestFilter : public SkDrawFilter {
24public:
mtklein36352bf2015-03-25 18:17:31 -070025 bool filter(SkPaint* p, Type) override {
tomhudsoncdf34cd2015-03-06 06:15:20 -080026 p->setColor(SK_ColorRED);
27 p->setMaskFilter(NULL);
28 return true;
29 }
30};
reedffab15f2015-04-11 19:29:31 -070031}
tomhudsoncdf34cd2015-03-06 06:15:20 -080032
33class DrawFilterGM : public skiagm::GM {
34 SkAutoTUnref<SkMaskFilter> fBlur;
35
36protected:
mtklein36352bf2015-03-25 18:17:31 -070037 SkISize onISize() override {
tomhudsoncdf34cd2015-03-06 06:15:20 -080038 return SkISize::Make(320, 240);
39 }
40
mtklein36352bf2015-03-25 18:17:31 -070041 SkString onShortName() override {
tomhudsoncdf34cd2015-03-06 06:15:20 -080042 return SkString("drawfilter");
43 }
44
mtklein36352bf2015-03-25 18:17:31 -070045 void onOnceBeforeDraw() override {
tomhudsoncdf34cd2015-03-06 06:15:20 -080046 fBlur.reset(SkBlurMaskFilter::Create(kNormal_SkBlurStyle,
47 SkBlurMask::ConvertRadiusToSigma(10.0f),
48 kLow_SkBlurQuality));
49 }
50
mtklein36352bf2015-03-25 18:17:31 -070051 void onDraw(SkCanvas* canvas) override {
tomhudsoncdf34cd2015-03-06 06:15:20 -080052 SkPaint p;
53 p.setColor(SK_ColorBLUE);
54 p.setMaskFilter(fBlur.get());
55 SkRect r = { 20, 20, 100, 100 };
56 canvas->setDrawFilter(NULL);
57 canvas->drawRect(r, p);
58 TestFilter redNoBlur;
59 canvas->setDrawFilter(&redNoBlur);
60 canvas->translate(120.0f, 40.0f);
61 canvas->drawRect(r, p);
62
63 // Must unset if the DrawFilter is from the stack to avoid refcount errors!
64 canvas->setDrawFilter(NULL);
65 }
66
67private:
68 typedef GM INHERITED;
69};
70
71static skiagm::GM* MyFactory(void*) { return new DrawFilterGM; }
72static skiagm::GMRegistry reg(MyFactory);
73