1/*
2 * Copyright 2006 The Android Open Source Project
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkEmbossMaskFilter_DEFINED
9#define SkEmbossMaskFilter_DEFINED
10
11#include "SkMaskFilter.h"
12
13/** \class SkEmbossMaskFilter
14
15    This mask filter creates a 3D emboss look, by specifying a light and blur amount.
16*/
17class SK_API SkEmbossMaskFilter : public SkMaskFilter {
18public:
19    struct Light {
20        SkScalar    fDirection[3];  // x,y,z
21        uint16_t    fPad;
22        uint8_t     fAmbient;
23        uint8_t     fSpecular;      // exponent, 4.4 right now
24    };
25
26    static SkEmbossMaskFilter* Create(SkScalar blurSigma, const Light& light);
27
28    // overrides from SkMaskFilter
29    //  This method is not exported to java.
30    virtual SkMask::Format getFormat() const SK_OVERRIDE;
31    //  This method is not exported to java.
32    virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&,
33                            SkIPoint* margin) const SK_OVERRIDE;
34
35    SK_TO_STRING_OVERRIDE()
36    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkEmbossMaskFilter)
37
38protected:
39    SkEmbossMaskFilter(SkScalar blurSigma, const Light& light);
40    explicit SkEmbossMaskFilter(SkReadBuffer&);
41    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
42
43private:
44    Light       fLight;
45    SkScalar    fBlurSigma;
46
47    typedef SkMaskFilter INHERITED;
48};
49
50#endif
51