1
2/*
3 * Copyright 2006 The Android Open Source Project
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9
10#ifndef SkPaintParts_DEFINED
11#define SkPaintParts_DEFINED
12
13#include "SkDisplayable.h"
14#include "SkMemberInfo.h"
15#include "SkPaint.h"
16#include "SkShader.h"
17#include "SkTypeface.h"
18#include "SkXfermode.h"
19
20class SkDrawPaint;
21class SkDrawMatrix;
22
23class SkPaintPart : public SkDisplayable {
24public:
25    SkPaintPart();
26    virtual bool add() = 0;
27    virtual SkDisplayable* getParent() const;
28    virtual bool setParent(SkDisplayable* parent);
29#ifdef SK_DEBUG
30    virtual bool isPaintPart() const { return true; }
31#endif
32protected:
33    SkDrawPaint* fPaint;
34};
35
36class SkDrawMaskFilter : public SkPaintPart {
37    DECLARE_EMPTY_MEMBER_INFO(MaskFilter);
38    virtual SkMaskFilter* getMaskFilter();
39protected:
40    virtual bool add();
41};
42
43class SkDrawPathEffect : public SkPaintPart {
44    DECLARE_EMPTY_MEMBER_INFO(PathEffect);
45    virtual SkPathEffect* getPathEffect();
46protected:
47    virtual bool add();
48};
49
50class SkDrawShader : public SkPaintPart {
51    DECLARE_DRAW_MEMBER_INFO(Shader);
52    SkDrawShader();
53    virtual SkShader* getShader();
54protected:
55    virtual bool add();
56    void addPostlude(SkShader* shader);
57    SkDrawMatrix* matrix;
58    int /*SkShader::TileMode*/ tileMode;
59};
60
61class SkDrawTypeface  : public SkPaintPart {
62    DECLARE_DRAW_MEMBER_INFO(Typeface);
63    SkDrawTypeface();
64#ifdef SK_DUMP_ENABLED
65    virtual void dump(SkAnimateMaker *);
66#endif
67    SkTypeface* getTypeface() {
68        return SkTypeface::CreateFromName(fontName.c_str(), style); }
69protected:
70    virtual bool add();
71    SkString fontName;
72    SkTypeface::Style style;
73};
74
75#endif // SkPaintParts_DEFINED
76