skia2/gm/drawfilter.cpp
tomhudson cdf34cdfb9 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
2015-03-06 06:15:20 -08:00

72 lines
1.8 KiB
C++

/*
* 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);