| Index: gm/blurquickreject.cpp
|
| ===================================================================
|
| --- gm/blurquickreject.cpp (revision 0)
|
| +++ gm/blurquickreject.cpp (revision 0)
|
| @@ -0,0 +1,82 @@
|
| +/*
|
| + * Copyright 2013 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 "SkCanvas.h"
|
| +#include "SkBlurMaskFilter.h"
|
| +
|
| +// This GM tests out the quick reject bounds of the blur mask filter. It draws
|
| +// four blurred rects around a central clip. The blurred rect geometry outset
|
| +// by the blur radius does not overlap the clip rect so, if the blur clipping
|
| +// just uses the radius, they will be clipped out (and the result will differ
|
| +// from the result if quick reject were disabled. If the blur clipping uses
|
| +// the correct 3 sigma bound then the images with and without quick rejecting
|
| +// will be the same.
|
| +class BlurQuickRejectGM : public skiagm::GM {
|
| +public:
|
| + BlurQuickRejectGM() {}
|
| +
|
| +protected:
|
| + virtual SkString onShortName() SK_OVERRIDE {
|
| + return SkString("blurquickreject");
|
| + }
|
| +
|
| + virtual SkISize onISize() SK_OVERRIDE {
|
| + return SkISize::Make(kWidth, kHeight);
|
| + }
|
| +
|
| + virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
|
| + static const SkScalar kBlurRadius = SkIntToScalar(20);
|
| + static const SkScalar kBoxSize = SkIntToScalar(100);
|
| +
|
| + SkRect clipRect = SkRect::MakeXYWH(0, 0, kBoxSize, kBoxSize);
|
| + SkRect blurRects[] = {
|
| + { -kBoxSize - (kBlurRadius+1), 0, -(kBlurRadius+1), kBoxSize },
|
| + { 0, -kBoxSize - (kBlurRadius+1), kBoxSize, -(kBlurRadius+1) },
|
| + { kBoxSize+kBlurRadius+1, 0, 2*kBoxSize+kBlurRadius+1, kBoxSize },
|
| + { 0, kBoxSize+kBlurRadius+1, kBoxSize, 2*kBoxSize+kBlurRadius+1 }
|
| + };
|
| + SkColor colors[] = {
|
| + SK_ColorRED,
|
| + SK_ColorGREEN,
|
| + SK_ColorBLUE,
|
| + SK_ColorYELLOW,
|
| + };
|
| + SkASSERT(SK_ARRAY_COUNT(colors) == SK_ARRAY_COUNT(blurRects));
|
| +
|
| + SkPaint hairlinePaint;
|
| + hairlinePaint.setStyle(SkPaint::kStroke_Style);
|
| + hairlinePaint.setColor(SK_ColorWHITE);
|
| + hairlinePaint.setStrokeWidth(0);
|
| +
|
| + SkPaint blurPaint;
|
| + blurPaint.setFilterBitmap(true);
|
| + SkMaskFilter* mf = SkBlurMaskFilter::Create(kBlurRadius,
|
| + SkBlurMaskFilter::kNormal_BlurStyle);
|
| + blurPaint.setMaskFilter(mf)->unref();
|
| +
|
| + canvas->clear(SK_ColorBLACK);
|
| + canvas->save();
|
| + canvas->translate(kBoxSize, kBoxSize);
|
| + canvas->drawRect(clipRect, hairlinePaint);
|
| + canvas->clipRect(clipRect);
|
| + for (int i = 0; i < SK_ARRAY_COUNT(blurRects); ++i) {
|
| + blurPaint.setColor(colors[i]);
|
| + canvas->drawRect(blurRects[i], blurPaint);
|
| + canvas->drawRect(blurRects[i], hairlinePaint);
|
| + }
|
| + canvas->restore();
|
| + }
|
| +
|
| +private:
|
| + static const int kWidth = 300;
|
| + static const int kHeight = 300;
|
| +
|
| + typedef GM INHERITED;
|
| +};
|
| +
|
| +DEF_GM( return new BlurQuickRejectGM(); )
|
|
|
| Property changes on: gm\blurquickreject.cpp
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|