SkPathEffect.h revision 0456e0b7b85060e9b9597ce414c4c2b19aff4f58
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 28a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 48a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkPathEffect_DEFINED 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkPathEffect_DEFINED 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkFlattenable.h" 14fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#include "SkPaint.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkPath; 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 18fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.comclass SkStrokeRec { 19fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.compublic: 20fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com enum InitStyle { 21fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com kHairline_InitStyle, 22fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com kFill_InitStyle 23fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com }; 24fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com SkStrokeRec(InitStyle style); 25fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 26fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com SkStrokeRec(const SkStrokeRec&); 27fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com explicit SkStrokeRec(const SkPaint&); 28fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 29fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com enum Style { 30fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com kHairline_Style, 31fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com kFill_Style, 32fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com kStroke_Style, 33fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com kStrokeAndFill_Style 34fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com }; 35fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 36fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com Style getStyle() const; 37fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com SkScalar getWidth() const { return fWidth; } 38fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com SkScalar getMiter() const { return fMiterLimit; } 39fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com SkPaint::Cap getCap() const { return fCap; } 40fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com SkPaint::Join getJoin() const { return fJoin; } 41fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 42fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com bool isHairlineStyle() const { 43fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com return kHairline_Style == this->getStyle(); 44fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com } 45fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 46fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com bool isFillStyle() const { 47fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com return kFill_Style == this->getStyle(); 48fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com } 49fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 508b06f1a7ff6d5a59387a90433064550de20787eereed@google.com void setFillStyle(); 518b06f1a7ff6d5a59387a90433064550de20787eereed@google.com void setHairlineStyle(); 528b06f1a7ff6d5a59387a90433064550de20787eereed@google.com /** 538b06f1a7ff6d5a59387a90433064550de20787eereed@google.com * Specify the strokewidth, and optionally if you want stroke + fill. 548b06f1a7ff6d5a59387a90433064550de20787eereed@google.com * Note, if width==0, then this request is taken to mean: 558b06f1a7ff6d5a59387a90433064550de20787eereed@google.com * strokeAndFill==true -> new style will be Fill 568b06f1a7ff6d5a59387a90433064550de20787eereed@google.com * strokeAndFill==false -> new style will be Hairline 578b06f1a7ff6d5a59387a90433064550de20787eereed@google.com */ 588b06f1a7ff6d5a59387a90433064550de20787eereed@google.com void setStrokeStyle(SkScalar width, bool strokeAndFill = false); 59fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 60fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com void setStrokeParams(SkPaint::Cap cap, SkPaint::Join join, SkScalar miterLimit) { 61fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com fCap = cap; 62fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com fJoin = join; 63fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com fMiterLimit = miterLimit; 64fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com } 65fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 66fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com /** 67fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * Returns true if this specifes any thick stroking, i.e. applyToPath() 68fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * will return true. 69fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com */ 70fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com bool needToApply() const { 71fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com Style style = this->getStyle(); 72fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com return (kStroke_Style == style) || (kStrokeAndFill_Style == style); 73fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com } 74fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 75fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com /** 76fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * Apply these stroke parameters to the src path, returning the result 77fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * in dst. 78fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * 79fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * If there was no change (i.e. style == hairline or fill) this returns 80fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * false and dst is unchanged. Otherwise returns true and the result is 81fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * stored in dst. 82fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * 83fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * src and dst may be the same path. 84fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com */ 85fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com bool applyToPath(SkPath* dst, const SkPath& src) const; 86fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 87fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.comprivate: 88fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com SkScalar fWidth; 89fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com SkScalar fMiterLimit; 90fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com SkPaint::Cap fCap; 91fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com SkPaint::Join fJoin; 92fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com bool fStrokeAndFill; 93fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com}; 94fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** \class SkPathEffect 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPathEffect is the base class for objects in the SkPaint that affect 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com the geometry of a drawing primitive before it is transformed by the 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas' matrix and drawn. 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Dashing is implemented as a subclass of SkPathEffect. 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com*/ 1037ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.orgclass SK_API SkPathEffect : public SkFlattenable { 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1050456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.com SK_DECLARE_INST_COUNT(SkPathEffect) 1060456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.com 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPathEffect() {} 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 109fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com /** 110fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * Given a src path (input) and a stroke-rec (input and output), apply 111fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * this effect to the src path, returning the new path in dst, and return 112fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * true. If this effect cannot be applied, return false and ignore dst 113fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * and stroke-rec. 114fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * 115fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * The stroke-rec specifies the initial request for stroking (if any). 116fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * The effect can treat this as input only, or it can choose to change 117fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * the rec as well. For example, the effect can decide to change the 118fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * stroke's width or join, or the effect can change the rec from stroke 119fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * to fill (or fill to stroke) in addition to returning a new (dst) path. 120fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * 121fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * If this method returns true, the caller will apply (as needed) the 122fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com * resulting stroke-rec to dst and then draw. 123fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com */ 124fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com virtual bool filterPath(SkPath* dst, const SkPath& src, SkStrokeRec*) = 0; 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 126e4f10a70807166484e5a6303a5cd0034e5e87abareed@google.com /** 127e4f10a70807166484e5a6303a5cd0034e5e87abareed@google.com * Compute a conservative bounds for its effect, given the src bounds. 128e4f10a70807166484e5a6303a5cd0034e5e87abareed@google.com * The baseline implementation just assigns src to dst. 129e4f10a70807166484e5a6303a5cd0034e5e87abareed@google.com */ 130e4f10a70807166484e5a6303a5cd0034e5e87abareed@google.com virtual void computeFastBounds(SkRect* dst, const SkRect& src); 131e4f10a70807166484e5a6303a5cd0034e5e87abareed@google.com 132ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.comprotected: 133ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com SkPathEffect(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {} 134ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com 1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // illegal 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPathEffect(const SkPathEffect&); 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPathEffect& operator=(const SkPathEffect&); 139ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com 140ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com typedef SkFlattenable INHERITED; 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** \class SkPairPathEffect 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Common baseclass for Compose and Sum. This subclass manages two pathEffects, 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com including flattening them. It does nothing in filterPath, and is only useful 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for managing the lifetimes of its two arguments. 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com*/ 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkPairPathEffect : public SkPathEffect { 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPairPathEffect(SkPathEffect* pe0, SkPathEffect* pe1); 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkPairPathEffect(); 1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPairPathEffect(SkFlattenableReadBuffer&); 15654924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 15754924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // these are visible to our subclasses 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPathEffect* fPE0, *fPE1; 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkPathEffect INHERITED; 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** \class SkComposePathEffect 1668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com This subclass of SkPathEffect composes its two arguments, to create 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com a compound pathEffect. 1698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com*/ 1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkComposePathEffect : public SkPairPathEffect { 1718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 1728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com /** Construct a pathEffect whose effect is to apply first the inner pathEffect 1738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com and the the outer pathEffect (e.g. outer(inner(path))) 1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com The reference counts for outer and inner are both incremented in the constructor, 1758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com and decremented in the destructor. 1768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 1778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkComposePathEffect(SkPathEffect* outer, SkPathEffect* inner) 1788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com : INHERITED(outer, inner) {} 1798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 180fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com virtual bool filterPath(SkPath* dst, const SkPath& src, SkStrokeRec*) SK_OVERRIDE; 1818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 182ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkComposePathEffect) 1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 18454924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.comprotected: 1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkComposePathEffect(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {} 1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 18754924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.comprivate: 1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // illegal 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkComposePathEffect(const SkComposePathEffect&); 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkComposePathEffect& operator=(const SkComposePathEffect&); 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkPairPathEffect INHERITED; 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** \class SkSumPathEffect 1968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com This subclass of SkPathEffect applies two pathEffects, one after the other. 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Its filterPath() returns true if either of the effects succeeded. 1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com*/ 2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkSumPathEffect : public SkPairPathEffect { 2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 2028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com /** Construct a pathEffect whose effect is to apply two effects, in sequence. 2038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com (e.g. first(path) + second(path)) 2048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com The reference counts for first and second are both incremented in the constructor, 2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com and decremented in the destructor. 2068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkSumPathEffect(SkPathEffect* first, SkPathEffect* second) 2088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com : INHERITED(first, second) {} 2098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 210fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com virtual bool filterPath(SkPath* dst, const SkPath& src, SkStrokeRec*) SK_OVERRIDE; 2118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 212ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSumPathEffect) 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 21454924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.comprotected: 2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkSumPathEffect(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {} 2168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 21754924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.comprivate: 2188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // illegal 2198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkSumPathEffect(const SkSumPathEffect&); 2208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkSumPathEffect& operator=(const SkSumPathEffect&); 2218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkPairPathEffect INHERITED; 2238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 2248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 227