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 "include/core/SkFlattenable.h" 12 #include "include/core/SkMaskFilter.h" 13 #include "include/core/SkRect.h" 14 #include "include/core/SkRefCnt.h" 15 #include "include/core/SkScalar.h" 16 #include "src/core/SkMask.h" 17 #include "src/core/SkMaskFilterBase.h" 18 19 #include <cstdint> 20 21 class SkMatrix; 22 class SkReadBuffer; 23 class SkWriteBuffer; 24 struct SkIPoint; 25 26 /** \class SkEmbossMaskFilter 27 28 This mask filter creates a 3D emboss look, by specifying a light and blur amount. 29 */ 30 class SkEmbossMaskFilter : public SkMaskFilterBase { 31 public: 32 struct Light { 33 SkScalar fDirection[3]; // x,y,z 34 uint16_t fPad; 35 uint8_t fAmbient; 36 uint8_t fSpecular; // exponent, 4.4 right now 37 }; 38 39 static sk_sp<SkMaskFilter> Make(SkScalar blurSigma, const Light& light); 40 41 // overrides from SkMaskFilter 42 // This method is not exported to java. 43 SkMask::Format getFormat() const override; 44 // This method is not exported to java. 45 bool filterMask(SkMaskBuilder* dst, const SkMask& src, const SkMatrix&, 46 SkIPoint* margin) const override; type()47 SkMaskFilterBase::Type type() const override { return SkMaskFilterBase::Type::kEmboss; } 48 49 protected: 50 SkEmbossMaskFilter(SkScalar blurSigma, const Light& light); 51 void flatten(SkWriteBuffer&) const override; 52 53 private: 54 SK_FLATTENABLE_HOOKS(SkEmbossMaskFilter) 55 56 Light fLight; 57 SkScalar fBlurSigma; 58 59 using INHERITED = SkMaskFilter; 60 }; 61 62 #endif 63