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 :
47 0 : static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
48 0 : 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& );
57 0 : 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
|