diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/include/effects/SkBlurDrawLooper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/include/effects/SkBlurDrawLooper.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,86 @@ +/* + * Copyright 2008 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + +#ifndef SkBlurDrawLooper_DEFINED +#define SkBlurDrawLooper_DEFINED + +#include "SkDrawLooper.h" +#include "SkColor.h" + +class SkMaskFilter; +class SkColorFilter; + +/** \class SkBlurDrawLooper + This class draws a shadow of the object (possibly offset), and then draws + the original object in its original position. + should there be an option to just draw the shadow/blur layer? webkit? +*/ +class SK_API SkBlurDrawLooper : public SkDrawLooper { +public: + enum BlurFlags { + kNone_BlurFlag = 0x00, + /** + The blur layer's dx/dy/radius aren't affected by the canvas + transform. + */ + kIgnoreTransform_BlurFlag = 0x01, + kOverrideColor_BlurFlag = 0x02, + kHighQuality_BlurFlag = 0x04, + /** mask for all blur flags */ + kAll_BlurFlag = 0x07 + }; + + SkBlurDrawLooper(SkColor color, SkScalar sigma, SkScalar dx, SkScalar dy, + uint32_t flags = kNone_BlurFlag); + +// SK_ATTR_DEPRECATED("use sigma version") + SkBlurDrawLooper(SkScalar radius, SkScalar dx, SkScalar dy, SkColor color, + uint32_t flags = kNone_BlurFlag); + virtual ~SkBlurDrawLooper(); + + virtual SkDrawLooper::Context* createContext(SkCanvas*, void* storage) const SK_OVERRIDE; + + virtual size_t contextSize() const SK_OVERRIDE { return sizeof(BlurDrawLooperContext); } + + SK_TO_STRING_OVERRIDE() + SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurDrawLooper) + +protected: + SkBlurDrawLooper(SkReadBuffer&); + virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; + +private: + SkMaskFilter* fBlur; + SkColorFilter* fColorFilter; + SkScalar fDx, fDy; + SkColor fBlurColor; + uint32_t fBlurFlags; + + enum State { + kBeforeEdge, + kAfterEdge, + kDone + }; + + class BlurDrawLooperContext : public SkDrawLooper::Context { + public: + explicit BlurDrawLooperContext(const SkBlurDrawLooper* looper); + + virtual bool next(SkCanvas* canvas, SkPaint* paint) SK_OVERRIDE; + + private: + const SkBlurDrawLooper* fLooper; + State fState; + }; + + void init(SkScalar sigma, SkScalar dx, SkScalar dy, SkColor color, uint32_t flags); + + typedef SkDrawLooper INHERITED; +}; + +#endif