Home | History | Annotate | Download | only in effects
      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 "SkMaskFilterBase.h"
     12 
     13 /** \class SkEmbossMaskFilter
     14 
     15     This mask filter creates a 3D emboss look, by specifying a light and blur amount.
     16 */
     17 class SK_API SkEmbossMaskFilter : public SkMaskFilterBase {
     18 public:
     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 
     35     SK_TO_STRING_OVERRIDE()
     36     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkEmbossMaskFilter)
     37 
     38 protected:
     39     SkEmbossMaskFilter(SkScalar blurSigma, const Light& light);
     40     void flatten(SkWriteBuffer&) const override;
     41 
     42 private:
     43     Light       fLight;
     44     SkScalar    fBlurSigma;
     45 
     46     typedef SkMaskFilter INHERITED;
     47 };
     48 
     49 #endif
     50