1f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com/*
25bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Copyright 2008 The Android Open Source Project
3f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com *
45bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Use of this source code is governed by a BSD-style license that can be
55bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * found in the LICENSE file.
6f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com */
7f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
85bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com
9f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#ifndef SkBlurDrawLooper_DEFINED
10f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#define SkBlurDrawLooper_DEFINED
11f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
12f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#include "SkDrawLooper.h"
13f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#include "SkColor.h"
14f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
15f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comclass SkMaskFilter;
162f025217e36f6e99b091fa3fb2cc556335341264senorblanco@chromium.orgclass SkColorFilter;
17f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
18f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com/** \class SkBlurDrawLooper
19f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    This class draws a shadow of the object (possibly offset), and then draws
20f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    the original object in its original position.
21f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    should there be an option to just draw the shadow/blur layer? webkit?
22f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com*/
232083387d719b933797044ad07efd3bb67f99a5c5ctguil@chromium.orgclass SK_API SkBlurDrawLooper : public SkDrawLooper {
24f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.compublic:
25407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org    enum BlurFlags {
26407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org        kNone_BlurFlag = 0x00,
271fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com        /**
281fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com            The blur layer's dx/dy/radius aren't affected by the canvas
29407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org            transform.
30407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org        */
312f025217e36f6e99b091fa3fb2cc556335341264senorblanco@chromium.org        kIgnoreTransform_BlurFlag   = 0x01,
322f025217e36f6e99b091fa3fb2cc556335341264senorblanco@chromium.org        kOverrideColor_BlurFlag     = 0x02,
332f025217e36f6e99b091fa3fb2cc556335341264senorblanco@chromium.org        kHighQuality_BlurFlag       = 0x04,
34407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org        /** mask for all blur flags */
353d4c0be4d95d483774f1eaea3856558015ad0038senorblanco@chromium.org        kAll_BlurFlag               = 0x07
36407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org    };
37407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org
381fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com    SkBlurDrawLooper(SkScalar radius, SkScalar dx, SkScalar dy, SkColor color,
39407a8748a8df544c190c36271a96f1f7c2142038senorblanco@chromium.org                     uint32_t flags = kNone_BlurFlag);
40f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    virtual ~SkBlurDrawLooper();
41f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
42f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    // overrides from SkDrawLooper
438196794a85b76ca1310e2fa0a54c2b6a02091397reed@google.com    virtual void init(SkCanvas*);
448196794a85b76ca1310e2fa0a54c2b6a02091397reed@google.com    virtual bool next(SkCanvas*, SkPaint* paint);
45f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
4673a0acf852ca3685211bc3d64c82f4c4035fa980robertphillips@google.com    SK_DEVELOPER_TO_STRING()
4714f592f823cedde633bf7d468c3a14b02ee56674djsollen@google.com    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurDrawLooper)
48f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
49f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comprotected:
50f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    SkBlurDrawLooper(SkFlattenableReadBuffer&);
51e133d6ad314603114c7ef80423391f65cbb599d7djsollen@google.com    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
52f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
53f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.comprivate:
54f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    SkMaskFilter*   fBlur;
552f025217e36f6e99b091fa3fb2cc556335341264senorblanco@chromium.org    SkColorFilter*  fColorFilter;
56f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    SkScalar        fDx, fDy;
57f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    SkColor         fBlurColor;
581fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com    uint32_t        fBlurFlags;
59f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
60f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    enum State {
61f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        kBeforeEdge,
62f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        kAfterEdge,
63f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com        kDone
64f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    };
65f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    State   fState;
661fde19f3b72345b473a1a9bd64729237a388813frmistry@google.com
67f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com    typedef SkDrawLooper INHERITED;
68f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com};
69f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com
70f0d6bf5df07d5ce620678074da0c05aacc28e44reed@android.com#endif
71