Home | History | Annotate | Download | only in effects
      1 /*
      2  * Copyright 2008 The Android Open Source Project
      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 
      9 #ifndef SkBlurDrawLooper_DEFINED
     10 #define SkBlurDrawLooper_DEFINED
     11 
     12 #include "SkDrawLooper.h"
     13 #include "SkColor.h"
     14 
     15 class SkMaskFilter;
     16 class SkColorFilter;
     17 
     18 /** \class SkBlurDrawLooper
     19     This class draws a shadow of the object (possibly offset), and then draws
     20     the original object in its original position.
     21     should there be an option to just draw the shadow/blur layer? webkit?
     22 */
     23 class SK_API SkBlurDrawLooper : public SkDrawLooper {
     24 public:
     25     enum BlurFlags {
     26         kNone_BlurFlag = 0x00,
     27         /**
     28             The blur layer's dx/dy/radius aren't affected by the canvas
     29             transform.
     30         */
     31         kIgnoreTransform_BlurFlag   = 0x01,
     32         kOverrideColor_BlurFlag     = 0x02,
     33         kHighQuality_BlurFlag       = 0x04,
     34         /** mask for all blur flags */
     35         kAll_BlurFlag               = 0x07
     36     };
     37 
     38     SkBlurDrawLooper(SkColor color, SkScalar sigma, SkScalar dx, SkScalar dy,
     39                      uint32_t flags = kNone_BlurFlag);
     40 
     41 //    SK_ATTR_DEPRECATED("use sigma version")
     42     SkBlurDrawLooper(SkScalar radius, SkScalar dx, SkScalar dy, SkColor color,
     43                      uint32_t flags = kNone_BlurFlag);
     44     virtual ~SkBlurDrawLooper();
     45 
     46     // overrides from SkDrawLooper
     47     virtual void init(SkCanvas*);
     48     virtual bool next(SkCanvas*, SkPaint* paint);
     49 
     50     SK_DEVELOPER_TO_STRING()
     51     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurDrawLooper)
     52 
     53 protected:
     54     SkBlurDrawLooper(SkFlattenableReadBuffer&);
     55     virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
     56 
     57 private:
     58     SkMaskFilter*   fBlur;
     59     SkColorFilter*  fColorFilter;
     60     SkScalar        fDx, fDy;
     61     SkColor         fBlurColor;
     62     uint32_t        fBlurFlags;
     63 
     64     enum State {
     65         kBeforeEdge,
     66         kAfterEdge,
     67         kDone
     68     };
     69     State   fState;
     70 
     71     void init(SkScalar sigma, SkScalar dx, SkScalar dy, SkColor color, uint32_t flags);
     72 
     73     typedef SkDrawLooper INHERITED;
     74 };
     75 
     76 #endif
     77