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(SkScalar radius, SkScalar dx, SkScalar dy, SkColor color,
     39                      uint32_t flags = kNone_BlurFlag);
     40     virtual ~SkBlurDrawLooper();
     41 
     42     // overrides from SkDrawLooper
     43     virtual void init(SkCanvas*);
     44     virtual bool next(SkCanvas*, SkPaint* paint);
     45 
     46     SK_DEVELOPER_TO_STRING()
     47     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurDrawLooper)
     48 
     49 protected:
     50     SkBlurDrawLooper(SkFlattenableReadBuffer&);
     51     virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
     52 
     53 private:
     54     SkMaskFilter*   fBlur;
     55     SkColorFilter*  fColorFilter;
     56     SkScalar        fDx, fDy;
     57     SkColor         fBlurColor;
     58     uint32_t        fBlurFlags;
     59 
     60     enum State {
     61         kBeforeEdge,
     62         kAfterEdge,
     63         kDone
     64     };
     65     State   fState;
     66 
     67     typedef SkDrawLooper INHERITED;
     68 };
     69 
     70 #endif
     71