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 SkPaintPart_DEFINED 9 #define SkPaintPart_DEFINED 10 11 #include "SkDisplayable.h" 12 #include "SkMemberInfo.h" 13 #include "SkPaint.h" 14 #include "SkShader.h" 15 #include "SkTypeface.h" 16 #include "SkXfermode.h" 17 18 class SkDrawPaint; 19 class SkDrawMatrix; 20 21 class SkPaintPart : public SkDisplayable { 22 public: 23 SkPaintPart(); 24 virtual bool add() = 0; 25 virtual SkDisplayable* getParent() const; 26 virtual bool setParent(SkDisplayable* parent); 27 #ifdef SK_DEBUG isPaintPart()28 virtual bool isPaintPart() const { return true; } 29 #endif 30 protected: 31 SkDrawPaint* fPaint; 32 }; 33 34 class SkDrawMaskFilter : public SkPaintPart { 35 DECLARE_EMPTY_MEMBER_INFO(MaskFilter); 36 virtual SkMaskFilter* getMaskFilter(); 37 protected: 38 bool add() override; 39 }; 40 41 class SkDrawPathEffect : public SkPaintPart { 42 DECLARE_EMPTY_MEMBER_INFO(PathEffect); 43 virtual SkPathEffect* getPathEffect(); 44 protected: 45 bool add() override; 46 }; 47 48 class SkDrawShader : public SkPaintPart { 49 DECLARE_DRAW_MEMBER_INFO(Shader); 50 SkDrawShader(); 51 virtual SkShader* getShader(); 52 protected: 53 bool add() override; 54 SkMatrix* getMatrix(); // returns nullptr if matrix is nullptr 55 SkDrawMatrix* matrix; 56 int /*SkShader::TileMode*/ tileMode; 57 }; 58 59 class SkDrawTypeface : public SkPaintPart { 60 DECLARE_DRAW_MEMBER_INFO(Typeface); 61 SkDrawTypeface(); 62 #ifdef SK_DUMP_ENABLED 63 void dump(SkAnimateMaker *) override; 64 #endif getTypeface()65 SkTypeface* getTypeface() { 66 return SkTypeface::CreateFromName(fontName.c_str(), style); } 67 protected: 68 bool add() override; 69 SkString fontName; 70 SkTypeface::Style style; 71 }; 72 73 #endif // SkPaintPart_DEFINED 74