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 "SkMaskFilter.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 SkMaskFilter {
     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 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 
     38 protected:
     39     SkEmbossMaskFilter(SkScalar blurSigma, const Light& light);
     40 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
     41     explicit SkEmbossMaskFilter(SkReadBuffer&);
     42 #endif
     43     virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
     44 
     45 private:
     46     Light       fLight;
     47     SkScalar    fBlurSigma;
     48 
     49     typedef SkMaskFilter INHERITED;
     50 };
     51 
     52 #endif
     53