SkEmbossMaskFilter.h revision 7c9d0f3104408a64d52b84643f116179022d73bd
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        return SkNEW_ARGS(SkEmbossMaskFilter, (blurSigma, light));
28    }
29
30    // overrides from SkMaskFilter
31    //  This method is not exported to java.
32    virtual SkMask::Format getFormat() const SK_OVERRIDE;
33    //  This method is not exported to java.
34    virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&,
35                            SkIPoint* margin) const SK_OVERRIDE;
36
37    SkDEVCODE(virtual void toString(SkString* str) const SK_OVERRIDE;)
38    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkEmbossMaskFilter)
39
40protected:
41    SkEmbossMaskFilter(SkReadBuffer&);
42    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
43
44#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
45public:
46#endif
47    SkEmbossMaskFilter(SkScalar blurSigma, const Light& light);
48
49private:
50    Light       fLight;
51    SkScalar    fBlurSigma;
52
53    typedef SkMaskFilter INHERITED;
54};
55
56#endif
57