Flutter Engine
The Flutter Engine
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
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)
Definition: SkBlurMask.cpp:39
void drawRect(const SkRect &rect, const SkPaint &paint)
Definition: SkCanvas.cpp:1673
void clipRect(const SkRect &rect, SkClipOp op, bool doAntiAlias)
Definition: SkCanvas.cpp:1361
void restore()
Definition: SkCanvas.cpp:461
void translate(SkScalar dx, SkScalar dy)
Definition: SkCanvas.cpp:1278
void clear(SkColor color)
Definition: SkCanvas.h:1199
int save()
Definition: SkCanvas.cpp:447
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
Definition: gm.h:110
GM(SkColor backgroundColor=SK_ColorWHITE)
Definition: gm.cpp:81
float SkScalar
Definition: extension.cpp:12
#define DEF_GM(CODE)
Definition: gm.h:40
clipRect(r.rect, r.opAA.op(), r.opAA.aa())) template<> void Draw
PODArray< SkColor > colors
Definition: SkRecords.h:276
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
Definition: switches.h:259
Definition: SkSize.h:16
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