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