aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm
diff options
context:
space:
mode:
authorGravatar tomhudson <tomhudson@google.com>2015-03-06 06:15:20 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2015-03-06 06:15:20 -0800
commitcdf34cdfb930a876910cffd96f080fce55f003bd (patch)
tree1daae90b59b1da4bd0dde0a9bcaf2f959e30b790 /gm
parent4ab3dbb636d07d03df1190c8a2b0a730e30e0d29 (diff)
We had zero coverage for SkDrawFilter. This new GM draws two rectangles.
If SkDrawFilter is working, they will not match (have different colors and one will be blurred). If SkDrawFilter is broken, they will match. R=scroggo@google.com Review URL: https://codereview.chromium.org/984883003
Diffstat (limited to 'gm')
-rw-r--r--gm/drawfilter.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/gm/drawfilter.cpp b/gm/drawfilter.cpp
new file mode 100644
index 0000000000..85bec15130
--- /dev/null
+++ b/gm/drawfilter.cpp
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2015 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "gm.h"
+#include "SkBlurMask.h"
+#include "SkBlurMaskFilter.h"
+#include "SkCanvas.h"
+#include "SkDrawFilter.h"
+#include "SkPaint.h"
+
+/**
+ * Initial test coverage for SkDrawFilter.
+ * Draws two rectangles; if draw filters are broken, they will match.
+ * If draw filters are working correctly, the first will be blue and blurred,
+ * the second red and sharp.
+ */
+
+class TestFilter : public SkDrawFilter {
+public:
+ bool filter(SkPaint* p, Type) SK_OVERRIDE {
+ p->setColor(SK_ColorRED);
+ p->setMaskFilter(NULL);
+ return true;
+ }
+};
+
+class DrawFilterGM : public skiagm::GM {
+ SkAutoTUnref<SkMaskFilter> fBlur;
+
+protected:
+ SkISize onISize() SK_OVERRIDE {
+ return SkISize::Make(320, 240);
+ }
+
+ SkString onShortName() SK_OVERRIDE {
+ return SkString("drawfilter");
+ }
+
+ void onOnceBeforeDraw() SK_OVERRIDE {
+ fBlur.reset(SkBlurMaskFilter::Create(kNormal_SkBlurStyle,
+ SkBlurMask::ConvertRadiusToSigma(10.0f),
+ kLow_SkBlurQuality));
+ }
+
+ void onDraw(SkCanvas* canvas) SK_OVERRIDE {
+ SkPaint p;
+ p.setColor(SK_ColorBLUE);
+ p.setMaskFilter(fBlur.get());
+ SkRect r = { 20, 20, 100, 100 };
+ canvas->setDrawFilter(NULL);
+ canvas->drawRect(r, p);
+ TestFilter redNoBlur;
+ canvas->setDrawFilter(&redNoBlur);
+ canvas->translate(120.0f, 40.0f);
+ canvas->drawRect(r, p);
+
+ // Must unset if the DrawFilter is from the stack to avoid refcount errors!
+ canvas->setDrawFilter(NULL);
+ }
+
+private:
+ typedef GM INHERITED;
+};
+
+static skiagm::GM* MyFactory(void*) { return new DrawFilterGM; }
+static skiagm::GMRegistry reg(MyFactory);
+