Skia
2DGraphicsLibrary
 All Classes 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 GrDrawContext;
22 class GrPaint;
23 class GrRenderTarget;
24 class GrTextureProvider;
25 class SkBitmap;
26 class SkBlitter;
27 class SkCachedData;
28 class SkMatrix;
29 class SkPath;
30 class SkRasterClip;
31 class SkRRect;
32 
44 class SK_API SkMaskFilter : public SkFlattenable {
45 public:
49  virtual SkMask::Format getFormat() const = 0;
50 
64  virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&,
65  SkIPoint* margin) const;
66 
67 #if SK_SUPPORT_GPU
68 
78  virtual bool asFragmentProcessor(GrFragmentProcessor**, GrTexture*, const SkMatrix& ctm) const;
79 
106  virtual bool canFilterMaskGPU(const SkRRect& devRRect,
107  const SkIRect& clipBounds,
108  const SkMatrix& ctm,
109  SkRect* maskRect) const;
110 
115  virtual bool directFilterMaskGPU(GrTextureProvider* texProvider,
116  GrDrawContext* drawContext,
117  GrPaint* grp,
118  const GrClip&,
119  const SkMatrix& viewMatrix,
120  const SkStrokeRec& strokeRec,
121  const SkPath& path) const;
126  virtual bool directFilterRRectMaskGPU(GrContext*,
127  GrDrawContext* drawContext,
128  GrPaint* grp,
129  const GrClip&,
130  const SkMatrix& viewMatrix,
131  const SkStrokeRec& strokeRec,
132  const SkRRect& rrect,
133  const SkRRect& devRRect) const;
134 
142  virtual bool filterMaskGPU(GrTexture* src,
143  const SkMatrix& ctm,
144  const SkIRect& maskRect,
145  GrTexture** result) const;
146 #endif
147 
159  virtual void computeFastBounds(const SkRect& src, SkRect* dest) const;
160 
161  struct BlurRec {
162  SkScalar fSigma;
163  SkBlurStyle fStyle;
164  SkBlurQuality fQuality;
165  };
171  virtual bool asABlur(BlurRec*) const;
172 
173  SK_TO_STRING_PUREVIRT()
174  SK_DEFINE_FLATTENABLE_TYPE(SkMaskFilter)
175 
176 protected:
177  SkMaskFilter() {}
178 
179  enum FilterReturn {
180  kFalse_FilterReturn,
181  kTrue_FilterReturn,
182  kUnimplemented_FilterReturn
183  };
184 
185  class NinePatch : ::SkNoncopyable {
186  public:
187  NinePatch() : fCache(nullptr) { }
188  ~NinePatch();
189 
190  SkMask fMask; // fBounds must have [0,0] in its top-left
191  SkIRect fOuterRect; // width/height must be >= fMask.fBounds'
192  SkIPoint fCenter; // identifies center row/col for stretching
193  SkCachedData* fCache;
194  };
195 
211  virtual FilterReturn filterRectsToNine(const SkRect[], int count,
212  const SkMatrix&,
213  const SkIRect& clipBounds,
214  NinePatch*) const;
218  virtual FilterReturn filterRRectToNine(const SkRRect&, const SkMatrix&,
219  const SkIRect& clipBounds,
220  NinePatch*) const;
221 
222 private:
223  friend class SkDraw;
224 
230  bool filterPath(const SkPath& devPath, const SkMatrix& ctm, const SkRasterClip&, SkBlitter*,
231  SkStrokeRec::InitStyle) const;
232 
237  bool filterRRect(const SkRRect& devRRect, const SkMatrix& ctm, const SkRasterClip&,
238  SkBlitter*) const;
239 
240  typedef SkFlattenable INHERITED;
241 };
242 
243 #endif
Definition: SkMaskFilter.h:161
Provides custom fragment shader code.
Definition: GrFragmentProcessor.h:24
The SkRRect class represents a rounded rect with a potentially different radii for each corner...
Definition: SkRRect.h:48
The SkPath class encapsulates compound (multiple contour) geometric paths consisting of straight line...
Definition: SkPath.h:27
Definition: SkStrokeRec.h:16
Definition: GrTextureProvider.h:16
The SkMatrix class holds a 3x3 matrix for transforming coordinates.
Definition: SkMatrix.h:26
Definition: SkRefCnt.h:135
SkMask is used to describe alpha bitmaps, either 1bit, 8bit, or the 3-channel 3D format.
Definition: SkMask.h:19
GrClip is an abstract base class for applying a clip.
Definition: GrClip.h:22
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:41
Definition: GrDrawContext.h:51
SkMaskFilter is the base class for object that perform transformations on an alpha-channel mask befor...
Definition: SkMaskFilter.h:44
Definition: GrContext.h:48
Definition: SkDraw.h:30
The paint describes how color and coverage are computed at each pixel by GrContext draw functions and...
Definition: GrPaint.h:41
Format
Definition: SkMask.h:22
Definition: SkRect.h:390
Definition: SkMaskFilter.h:185
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