Home | History | Annotate | Download | only in effects
      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