00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef SkPathEffect_DEFINED
00018 #define SkPathEffect_DEFINED
00019
00020 #include "SkFlattenable.h"
00021
00022 class SkPath;
00023
00032 class SkPathEffect : public SkFlattenable {
00033 public:
00034
00035 SkPathEffect() {}
00036
00043 virtual bool filterPath(SkPath* dst, const SkPath& src, SkScalar* width) = 0;
00044
00045 private:
00046
00047 SkPathEffect(const SkPathEffect&);
00048 SkPathEffect& operator=(const SkPathEffect&);
00049 };
00050
00057 class SkPairPathEffect : public SkPathEffect {
00058 public:
00059 SkPairPathEffect(SkPathEffect* pe0, SkPathEffect* pe1);
00060 virtual ~SkPairPathEffect();
00061
00062 protected:
00063 SkPairPathEffect(SkFlattenableReadBuffer&);
00064 virtual void flatten(SkFlattenableWriteBuffer&);
00065
00066 SkPathEffect* fPE0, *fPE1;
00067
00068 private:
00069 typedef SkPathEffect INHERITED;
00070 };
00071
00077 class SkComposePathEffect : public SkPairPathEffect {
00078 public:
00084 SkComposePathEffect(SkPathEffect* outer, SkPathEffect* inner)
00085 : INHERITED(outer, inner) {}
00086
00087
00088
00089
00090 virtual bool filterPath(SkPath* dst, const SkPath& src, SkScalar* width);
00091
00092 protected:
00093 virtual Factory getFactory() { return CreateProc; }
00094
00095 private:
00096 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
00097 return SkNEW_ARGS(SkComposePathEffect, (buffer));
00098 }
00099 SkComposePathEffect(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
00100
00101
00102 SkComposePathEffect(const SkComposePathEffect&);
00103 SkComposePathEffect& operator=(const SkComposePathEffect&);
00104
00105 typedef SkPairPathEffect INHERITED;
00106 };
00107
00113 class SkSumPathEffect : public SkPairPathEffect {
00114 public:
00120 SkSumPathEffect(SkPathEffect* first, SkPathEffect* second)
00121 : INHERITED(first, second) {}
00122
00123
00124
00125 virtual bool filterPath(SkPath* dst, const SkPath& src, SkScalar* width);
00126
00127 protected:
00128 virtual Factory getFactory() { return CreateProc; }
00129
00130 private:
00131 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
00132 return SkNEW_ARGS(SkSumPathEffect, (buffer));
00133 }
00134 SkSumPathEffect(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
00135
00136
00137 SkSumPathEffect(const SkSumPathEffect&);
00138 SkSumPathEffect& operator=(const SkSumPathEffect&);
00139
00140 typedef SkPairPathEffect INHERITED;
00141 };
00142
00143 #endif
00144