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 SkBlurMask_DEFINED 11 #define SkBlurMask_DEFINED 12 13 #include "SkShader.h" 14 #include "SkMask.h" 15 16 class SkBlurMask { 17 public: 18 enum Style { 19 kNormal_Style, //!< fuzzy inside and outside 20 kSolid_Style, //!< solid inside, fuzzy outside 21 kOuter_Style, //!< nothing inside, fuzzy outside 22 kInner_Style, //!< fuzzy inside, nothing outside 23 24 kStyleCount 25 }; 26 27 enum Quality { 28 kLow_Quality, //!< box blur 29 kHigh_Quality //!< three pass box blur (similar to gaussian) 30 }; 31 32 static bool BlurRect(SkMask *dst, const SkRect &src, 33 SkScalar radius, Style style, 34 SkIPoint *margin = NULL, 35 SkMask::CreateMode createMode=SkMask::kComputeBoundsAndRenderImage_CreateMode); 36 static bool Blur(SkMask* dst, const SkMask& src, 37 SkScalar radius, Style style, Quality quality, 38 SkIPoint* margin = NULL); 39 40 // the "ground truth" blur does a gaussian convolution; it's slow 41 // but useful for comparison purposes. 42 43 static bool BlurGroundTruth(SkMask* dst, const SkMask& src, 44 SkScalar provided_radius, Style style, 45 SkIPoint* margin = NULL); 46 47 // scale factor for the blur radius to match the behavior of the all existing blur 48 // code (both on the CPU and the GPU). This magic constant is 1/sqrt(3). 49 // TODO: get rid of this fudge factor and move any required fudging up into 50 // the calling library 51 static const SkScalar kBlurRadiusFudgeFactor; 52 53 }; 54 55 #endif 56