blob: 453a618f2561f35972e2cb427ec3e09340918bb4 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
reed@android.com8a1c16f2008-12-17 15:59:43 +00002/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00003 * Copyright 2008 The Android Open Source Project
reed@android.com8a1c16f2008-12-17 15:59:43 +00004 *
epoger@google.comec3ed6a2011-07-28 14:26:00 +00005 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
reed@android.com8a1c16f2008-12-17 15:59:43 +00007 */
8
epoger@google.comec3ed6a2011-07-28 14:26:00 +00009
reed@android.com8a1c16f2008-12-17 15:59:43 +000010#ifndef SkBlurDrawLooper_DEFINED
11#define SkBlurDrawLooper_DEFINED
12
13#include "SkDrawLooper.h"
14#include "SkColor.h"
15
16class SkMaskFilter;
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000017class SkColorFilter;
reed@android.com8a1c16f2008-12-17 15:59:43 +000018
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*/
ctguil@chromium.org7ffb1b22011-03-15 21:27:08 +000024class SK_API SkBlurDrawLooper : public SkDrawLooper {
reed@android.com8a1c16f2008-12-17 15:59:43 +000025public:
senorblanco@chromium.org038aff62010-12-06 23:45:58 +000026 enum BlurFlags {
27 kNone_BlurFlag = 0x00,
28 /**
29 The blur layer's dx/dy/radius aren't affected by the canvas
30 transform.
31 */
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000032 kIgnoreTransform_BlurFlag = 0x01,
33 kOverrideColor_BlurFlag = 0x02,
34 kHighQuality_BlurFlag = 0x04,
senorblanco@chromium.org038aff62010-12-06 23:45:58 +000035 /** mask for all blur flags */
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000036 kAll_BlurFlag = 0x07
senorblanco@chromium.org038aff62010-12-06 23:45:58 +000037 };
38
39 SkBlurDrawLooper(SkScalar radius, SkScalar dx, SkScalar dy, SkColor color,
40 uint32_t flags = kNone_BlurFlag);
reed@android.com8a1c16f2008-12-17 15:59:43 +000041 virtual ~SkBlurDrawLooper();
42
43 // overrides from SkDrawLooper
reed@google.com4e2b3d32011-04-07 14:18:59 +000044 virtual void init(SkCanvas*);
45 virtual bool next(SkCanvas*, SkPaint* paint);
reed@android.com8a1c16f2008-12-17 15:59:43 +000046
djsollen@google.comba28d032012-03-26 17:57:35 +000047 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurDrawLooper)
reed@android.com8a1c16f2008-12-17 15:59:43 +000048
49protected:
50 SkBlurDrawLooper(SkFlattenableReadBuffer&);
51 // overrides from SkFlattenable
52 virtual void flatten(SkFlattenableWriteBuffer& );
reed@android.com8a1c16f2008-12-17 15:59:43 +000053
54private:
reed@android.com8a1c16f2008-12-17 15:59:43 +000055 SkMaskFilter* fBlur;
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000056 SkColorFilter* fColorFilter;
reed@android.com8a1c16f2008-12-17 15:59:43 +000057 SkScalar fDx, fDy;
58 SkColor fBlurColor;
senorblanco@chromium.org038aff62010-12-06 23:45:58 +000059 uint32_t fBlurFlags;
reed@android.com8a1c16f2008-12-17 15:59:43 +000060
61 enum State {
62 kBeforeEdge,
63 kAfterEdge,
64 kDone
65 };
66 State fState;
67
68 typedef SkDrawLooper INHERITED;
69};
70
71#endif