2 * Copyright 2008 The Android Open Source Project
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
9 #ifndef SkBlurDrawLooper_DEFINED
10 #define SkBlurDrawLooper_DEFINED
12 #include "SkDrawLooper.h"
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?
23 class SK_API SkBlurDrawLooper : public SkDrawLooper {
26 kNone_BlurFlag = 0x00,
28 The blur layer's dx/dy/radius aren't affected by the canvas
31 kIgnoreTransform_BlurFlag = 0x01,
32 kOverrideColor_BlurFlag = 0x02,
33 kHighQuality_BlurFlag = 0x04,
34 /** mask for all blur flags */
38 static SkBlurDrawLooper* Create(SkColor color, SkScalar sigma, SkScalar dx, SkScalar dy,
39 uint32_t flags = kNone_BlurFlag) {
40 return SkNEW_ARGS(SkBlurDrawLooper, (color, sigma, dx, dy, flags));
43 virtual ~SkBlurDrawLooper();
45 virtual SkDrawLooper::Context* createContext(SkCanvas*, void* storage) const SK_OVERRIDE;
47 virtual size_t contextSize() const SK_OVERRIDE { return sizeof(BlurDrawLooperContext); }
49 SK_TO_STRING_OVERRIDE()
50 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurDrawLooper)
53 SkBlurDrawLooper(SkColor color, SkScalar sigma, SkScalar dx, SkScalar dy,
56 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
57 SkBlurDrawLooper(SkReadBuffer&);
59 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
61 virtual bool asABlurShadow(BlurShadowRec*) const SK_OVERRIDE;
65 SkColorFilter* fColorFilter;
66 SkScalar fDx, fDy, fSigma;
76 class BlurDrawLooperContext : public SkDrawLooper::Context {
78 explicit BlurDrawLooperContext(const SkBlurDrawLooper* looper);
80 virtual bool next(SkCanvas* canvas, SkPaint* paint) SK_OVERRIDE;
83 const SkBlurDrawLooper* fLooper;
87 void init(SkScalar sigma, SkScalar dx, SkScalar dy, SkColor color, uint32_t flags);
90 typedef SkDrawLooper INHERITED;