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 "src/core/SkMaskFilterBase.h"
12
13/** \class SkEmbossMaskFilter
14
15 This mask filter creates a 3D emboss look, by specifying a light and blur amount.
16*/
17class SkEmbossMaskFilter : public SkMaskFilterBase {
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 sk_sp<SkMaskFilter> Make(SkScalar blurSigma, const Light& light);
27
28 // overrides from SkMaskFilter
29 // This method is not exported to java.
30 SkMask::Format getFormat() const override;
31 // This method is not exported to java.
32 bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&,
33 SkIPoint* margin) const override;
34
35protected:
36 SkEmbossMaskFilter(SkScalar blurSigma, const Light& light);
37 void flatten(SkWriteBuffer&) const override;
38
39private:
40 SK_FLATTENABLE_HOOKS(SkEmbossMaskFilter)
41
42 Light fLight;
43 SkScalar fBlurSigma;
44
45 typedef SkMaskFilter INHERITED;
46};
47
48#endif
49