Skia
2DGraphicsLibrary
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SkMaskFilter.h
1 
2 /*
3  * Copyright 2006 The Android Open Source Project
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 
10 #ifndef SkMaskFilter_DEFINED
11 #define SkMaskFilter_DEFINED
12 
13 #include "SkBlurTypes.h"
14 #include "SkFlattenable.h"
15 #include "SkMask.h"
16 #include "SkPaint.h"
17 #include "SkStrokeRec.h"
18 
19 class GrClip;
20 class GrContext;
21 class GrRenderTargetContext;
22 class GrPaint;
23 class GrFragmentProcessor;
24 class GrRenderTarget;
25 class GrResourceProvider;
26 class GrTexture;
27 class GrTextureProxy;
28 class SkBitmap;
29 class SkBlitter;
30 class SkCachedData;
31 class SkMatrix;
32 class SkPath;
33 class SkRasterClip;
34 class SkRRect;
35 
47 class SK_API SkMaskFilter : public SkFlattenable {
48 public:
52  virtual SkMask::Format getFormat() const = 0;
53 
67  virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&,
68  SkIPoint* margin) const;
69 
70 #if SK_SUPPORT_GPU
71 
81  virtual bool asFragmentProcessor(GrFragmentProcessor**) const { return false; }
82 
109  virtual bool canFilterMaskGPU(const SkRRect& devRRect,
110  const SkIRect& clipBounds,
111  const SkMatrix& ctm,
112  SkRect* maskRect) const;
113 
118  virtual bool directFilterMaskGPU(GrContext*,
119  GrRenderTargetContext* renderTargetContext,
120  GrPaint&& paint,
121  const GrClip&,
122  const SkMatrix& viewMatrix,
123  const SkStrokeRec& strokeRec,
124  const SkPath& path) const;
129  virtual bool directFilterRRectMaskGPU(GrContext*,
130  GrRenderTargetContext* renderTargetContext,
131  GrPaint&& paint,
132  const GrClip&,
133  const SkMatrix& viewMatrix,
134  const SkStrokeRec& strokeRec,
135  const SkRRect& rrect,
136  const SkRRect& devRRect) const;
137 
145  virtual sk_sp<GrTextureProxy> filterMaskGPU(GrContext*,
146  sk_sp<GrTextureProxy> srcProxy,
147  const SkMatrix& ctm,
148  const SkIRect& maskRect) const;
149 #endif
150 
162  virtual void computeFastBounds(const SkRect& src, SkRect* dest) const;
163 
164  struct BlurRec {
165  SkScalar fSigma;
166  SkBlurStyle fStyle;
167  SkBlurQuality fQuality;
168  };
174  virtual bool asABlur(BlurRec*) const;
175 
176  SK_TO_STRING_PUREVIRT()
177  SK_DEFINE_FLATTENABLE_TYPE(SkMaskFilter)
178 
179 protected:
180  SkMaskFilter() {}
181 
182  enum FilterReturn {
183  kFalse_FilterReturn,
184  kTrue_FilterReturn,
185  kUnimplemented_FilterReturn
186  };
187 
188  class NinePatch : ::SkNoncopyable {
189  public:
190  NinePatch() : fCache(nullptr) { }
191  ~NinePatch();
192 
193  SkMask fMask; // fBounds must have [0,0] in its top-left
194  SkIRect fOuterRect; // width/height must be >= fMask.fBounds'
195  SkIPoint fCenter; // identifies center row/col for stretching
196  SkCachedData* fCache;
197  };
198 
214  virtual FilterReturn filterRectsToNine(const SkRect[], int count,
215  const SkMatrix&,
216  const SkIRect& clipBounds,
217  NinePatch*) const;
221  virtual FilterReturn filterRRectToNine(const SkRRect&, const SkMatrix&,
222  const SkIRect& clipBounds,
223  NinePatch*) const;
224 
225 private:
226  friend class SkDraw;
227 
233  bool filterPath(const SkPath& devPath, const SkMatrix& ctm, const SkRasterClip&, SkBlitter*,
234  SkStrokeRec::InitStyle) const;
235 
240  bool filterRRect(const SkRRect& devRRect, const SkMatrix& ctm, const SkRasterClip&,
241  SkBlitter*) const;
242 
243  typedef SkFlattenable INHERITED;
244 };
245 
246 #endif
Definition: SkMaskFilter.h:164
The SkRRect class represents a rounded rect with a potentially different radii for each corner...
Definition: SkRRect.h:47
The SkPath class encapsulates compound (multiple contour) geometric paths consisting of straight line...
Definition: SkPath.h:25
Definition: SkStrokeRec.h:16
The SkMatrix class holds a 3x3 matrix for transforming coordinates.
Definition: SkMatrix.h:28
Definition: SkRefCnt.h:125
SkMask is used to describe alpha bitmaps, either 1bit, 8bit, or the 3-channel 3D format.
Definition: SkMask.h:19
SkFlattenable is the base class for objects that need to be flattened into a data stream for either t...
Definition: SkFlattenable.h:70
The SkBitmap class specifies a raster bitmap.
Definition: SkBitmap.h:37
Shared pointer class to wrap classes that support a ref()/unref() interface.
Definition: SkRefCnt.h:246
virtual bool asFragmentProcessor(GrFragmentProcessor **) const
Returns true if the filter can be expressed a single-pass GrProcessor without requiring an explicit i...
Definition: SkMaskFilter.h:81
SkMaskFilter is the base class for object that perform transformations on an alpha-channel mask befor...
Definition: SkMaskFilter.h:47
Definition: GrContext.h:47
Format
Definition: SkMask.h:22
Definition: SkRect.h:404
Definition: SkMaskFilter.h:188
GrRenderTarget represents a 2D buffer of pixels that can be rendered to.
Definition: GrRenderTarget.h:26
SkIRect holds four 32 bit integer coordinates for a rectangle.
Definition: SkRect.h:20
Definition: GrTexture.h:19
SkIPoint holds two 32 bit integer coordinates.
Definition: SkPoint.h:40