Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
blurquickreject.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2013 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/gm.h"
14#include "include/core/SkRect.h"
16#include "include/core/SkSize.h"
19#include "src/core/SkBlurMask.h"
20
21// This GM tests out the quick reject bounds of the blur mask filter. It draws
22// four blurred rects around a central clip. The blurred rect geometry outset
23// by the blur radius does not overlap the clip rect so, if the blur clipping
24// just uses the radius, they will be clipped out (and the result will differ
25// from the result if quick reject were disabled. If the blur clipping uses
26// the correct 3 sigma bound then the images with and without quick rejecting
27// will be the same.
29public:
31
32protected:
33 SkString getName() const override { return SkString("blurquickreject"); }
34
35 SkISize getISize() override { return SkISize::Make(kWidth, kHeight); }
36
37 void onDraw(SkCanvas* canvas) override {
38 constexpr SkScalar kBlurRadius = SkIntToScalar(20);
39 constexpr SkScalar kBoxSize = SkIntToScalar(100);
40
41 SkRect clipRect = SkRect::MakeXYWH(0, 0, kBoxSize, kBoxSize);
42 SkRect blurRects[] = {
43 { -kBoxSize - (kBlurRadius+1), 0, -(kBlurRadius+1), kBoxSize },
44 { 0, -kBoxSize - (kBlurRadius+1), kBoxSize, -(kBlurRadius+1) },
45 { kBoxSize+kBlurRadius+1, 0, 2*kBoxSize+kBlurRadius+1, kBoxSize },
46 { 0, kBoxSize+kBlurRadius+1, kBoxSize, 2*kBoxSize+kBlurRadius+1 }
47 };
48 SkColor colors[] = {
53 };
54 SkASSERT(std::size(colors) == std::size(blurRects));
55
56 SkPaint hairlinePaint;
57 hairlinePaint.setStyle(SkPaint::kStroke_Style);
58 hairlinePaint.setColor(SK_ColorWHITE);
59 hairlinePaint.setStrokeWidth(0);
60
61 SkPaint blurPaint;
64
65 canvas->clear(SK_ColorBLACK);
66 canvas->save();
67 canvas->translate(kBoxSize, kBoxSize);
68 canvas->drawRect(clipRect, hairlinePaint);
69 canvas->clipRect(clipRect);
70 for (size_t i = 0; i < std::size(blurRects); ++i) {
71 blurPaint.setColor(colors[i]);
72 canvas->drawRect(blurRects[i], blurPaint);
73 canvas->drawRect(blurRects[i], hairlinePaint);
74 }
75 canvas->restore();
76 }
77
78private:
79 inline static constexpr int kWidth = 300;
80 inline static constexpr int kHeight = 300;
81
82 using INHERITED = GM;
83};
84
85DEF_GM( return new BlurQuickRejectGM(); )
#define SkASSERT(cond)
Definition SkAssert.h:116
@ kNormal_SkBlurStyle
fuzzy inside and outside
Definition SkBlurTypes.h:12
constexpr SkColor SK_ColorYELLOW
Definition SkColor.h:139
uint32_t SkColor
Definition SkColor.h:37
constexpr SkColor SK_ColorBLUE
Definition SkColor.h:135
constexpr SkColor SK_ColorRED
Definition SkColor.h:126
constexpr SkColor SK_ColorBLACK
Definition SkColor.h:103
constexpr SkColor SK_ColorGREEN
Definition SkColor.h:131
constexpr SkColor SK_ColorWHITE
Definition SkColor.h:122
#define SkIntToScalar(x)
Definition SkScalar.h:57
static constexpr int kBoxSize
void onDraw(SkCanvas *canvas) override
SkISize getISize() override
SkString getName() const override
static SkScalar SK_SPI ConvertRadiusToSigma(SkScalar radius)
void drawRect(const SkRect &rect, const SkPaint &paint)
void clipRect(const SkRect &rect, SkClipOp op, bool doAntiAlias)
void restore()
Definition SkCanvas.cpp:465
void translate(SkScalar dx, SkScalar dy)
void clear(SkColor color)
Definition SkCanvas.h:1199
int save()
Definition SkCanvas.cpp:451
static sk_sp< SkMaskFilter > MakeBlur(SkBlurStyle style, SkScalar sigma, bool respectCTM=true)
void setStyle(Style style)
Definition SkPaint.cpp:105
void setColor(SkColor color)
Definition SkPaint.cpp:119
@ kStroke_Style
set to stroke geometry
Definition SkPaint.h:194
void setMaskFilter(sk_sp< SkMaskFilter > maskFilter)
void setStrokeWidth(SkScalar width)
Definition SkPaint.cpp:159
GM(SkColor backgroundColor=SK_ColorWHITE)
Definition gm.cpp:81
float SkScalar
Definition extension.cpp:12
#define DEF_GM(CODE)
Definition gm.h:40
static constexpr SkISize Make(int32_t w, int32_t h)
Definition SkSize.h:20
static constexpr SkRect MakeXYWH(float x, float y, float w, float h)
Definition SkRect.h:659