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