begin to hide details of SkPathEffect
BUG=skia: Change-Id: I155d2370ae894e6000b6a768d02cf06bf5b3de6e Reviewed-on: https://skia-review.googlesource.com/8977 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Mike Reed <reed@google.com>
This commit is contained in:
parent
eb090ef456
commit
a07741a75a
@ -424,7 +424,7 @@ static sk_sp<SkPathEffect> make_path_effect(bool canBeNull = true) {
|
||||
case 1: {
|
||||
sk_sp<SkPathEffect> a = make_path_effect(false);
|
||||
sk_sp<SkPathEffect> b = make_path_effect(false);
|
||||
pathEffect = SkComposePathEffect::Make(a, b);
|
||||
pathEffect = SkPathEffect::MakeCompose(a, b);
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
@ -473,7 +473,7 @@ static sk_sp<SkPathEffect> make_path_effect(bool canBeNull = true) {
|
||||
default: {
|
||||
sk_sp<SkPathEffect> a = make_path_effect(false);
|
||||
sk_sp<SkPathEffect> b = make_path_effect(false);
|
||||
pathEffect = SkSumPathEffect::Make(a, b);
|
||||
pathEffect = SkPathEffect::MakeCompose(a, b);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ static void compose_pe(SkPaint* paint) {
|
||||
sk_sp<SkPathEffect> corner = SkCornerPathEffect::Make(25);
|
||||
sk_sp<SkPathEffect> compose;
|
||||
if (pe) {
|
||||
compose = SkComposePathEffect::Make(sk_ref_sp(pe), corner);
|
||||
compose = SkPathEffect::MakeCompose(sk_ref_sp(pe), corner);
|
||||
} else {
|
||||
compose = corner;
|
||||
}
|
||||
|
@ -18,4 +18,5 @@ android_framework_defines = [
|
||||
"SK_SUPPORT_EXOTIC_CLIPOPS",
|
||||
"SK_SUPPORT_LEGACY_CANVAS_HELPERS",
|
||||
"SK_SUPPORT_LEGACY_PAINT_TEXTDECORATION",
|
||||
"SK_SUPPORT_LEGACY_PATHEFFECT_SUBCLASSES",
|
||||
]
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/*
|
||||
* Copyright 2006 The Android Open Source Project
|
||||
*
|
||||
@ -6,7 +5,6 @@
|
||||
* found in the LICENSE file.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef SkPathEffect_DEFINED
|
||||
#define SkPathEffect_DEFINED
|
||||
|
||||
@ -28,6 +26,9 @@ class SkStrokeRec;
|
||||
*/
|
||||
class SK_API SkPathEffect : public SkFlattenable {
|
||||
public:
|
||||
static sk_sp<SkPathEffect> MakeSum(sk_sp<SkPathEffect> first, sk_sp<SkPathEffect> second);
|
||||
static sk_sp<SkPathEffect> MakeCompose(sk_sp<SkPathEffect> outer, sk_sp<SkPathEffect> inner);
|
||||
|
||||
/**
|
||||
* Given a src path (input) and a stroke-rec (input and output), apply
|
||||
* this effect to the src path, returning the new path in dst, and return
|
||||
@ -138,6 +139,8 @@ public:
|
||||
virtual bool exposedInAndroidJavaAPI() const { return false; }
|
||||
#endif
|
||||
|
||||
SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
|
||||
|
||||
protected:
|
||||
SkPathEffect() {}
|
||||
|
||||
@ -149,6 +152,8 @@ private:
|
||||
typedef SkFlattenable INHERITED;
|
||||
};
|
||||
|
||||
#ifdef SK_SUPPORT_LEGACY_PATHEFFECT_SUBCLASSES
|
||||
|
||||
/** \class SkPairPathEffect
|
||||
|
||||
Common baseclass for Compose and Sum. This subclass manages two pathEffects,
|
||||
@ -211,6 +216,7 @@ private:
|
||||
// illegal
|
||||
SkComposePathEffect(const SkComposePathEffect&);
|
||||
SkComposePathEffect& operator=(const SkComposePathEffect&);
|
||||
friend class SkPathEffect;
|
||||
|
||||
typedef SkPairPathEffect INHERITED;
|
||||
};
|
||||
@ -255,8 +261,10 @@ private:
|
||||
// illegal
|
||||
SkSumPathEffect(const SkSumPathEffect&);
|
||||
SkSumPathEffect& operator=(const SkSumPathEffect&);
|
||||
friend class SkPathEffect;
|
||||
|
||||
typedef SkPairPathEffect INHERITED;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -599,6 +599,7 @@ DEFINES_ALL = [
|
||||
"SK_NO_ANALYTIC_AA",
|
||||
"SK_SUPPORT_LEGACY_BITMAP_SETPIXELREF",
|
||||
"SK_SUPPORT_LEGACY_CLIPOP_EXOTIC_NAMES",
|
||||
"SK_SUPPORT_LEGACY_PATHEFFECT_SUBCLASSES",
|
||||
]
|
||||
|
||||
################################################################################
|
||||
|
@ -490,7 +490,7 @@ protected:
|
||||
gPhase, SkPath1DPathEffect::kRotate_Style);
|
||||
auto inner = SkDiscretePathEffect::Make(SkIntToScalar(2),
|
||||
SkIntToScalar(1)/10); // SkCornerPathEffect(SkIntToScalar(2));
|
||||
return SkComposePathEffect::Make(outer, inner);
|
||||
return SkPathEffect::MakeCompose(outer, inner);
|
||||
}
|
||||
|
||||
sk_sp<SkShader> shaderTest() {
|
||||
|
@ -422,7 +422,7 @@ static sk_sp<SkPathEffect> make_path_effect(bool canBeNull = true) {
|
||||
pathEffect = SkArcToPathEffect::Make(make_scalar(true));
|
||||
break;
|
||||
case 1:
|
||||
pathEffect = SkComposePathEffect::Make(make_path_effect(false),
|
||||
pathEffect = SkPathEffect::MakeCompose(make_path_effect(false),
|
||||
make_path_effect(false));
|
||||
break;
|
||||
case 2:
|
||||
@ -452,7 +452,7 @@ static sk_sp<SkPathEffect> make_path_effect(bool canBeNull = true) {
|
||||
break;
|
||||
case 8:
|
||||
default:
|
||||
pathEffect = SkSumPathEffect::Make(make_path_effect(false),
|
||||
pathEffect = SkPathEffect::MakeSum(make_path_effect(false),
|
||||
make_path_effect(false));
|
||||
break;
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ static sk_sp<SkPathEffect> make_pe(int flags, SkScalar phase) {
|
||||
|
||||
auto inner = SkCornerPathEffect::Make(SkIntToScalar(CORNER_RADIUS));
|
||||
|
||||
return SkComposePathEffect::Make(outer, inner);
|
||||
return SkPathEffect::MakeCompose(outer, inner);
|
||||
}
|
||||
|
||||
static sk_sp<SkPathEffect> make_warp_pe(SkScalar phase) {
|
||||
@ -61,7 +61,7 @@ static sk_sp<SkPathEffect> make_warp_pe(SkScalar phase) {
|
||||
path, 12, phase, SkPath1DPathEffect::kMorph_Style);
|
||||
auto inner = SkCornerPathEffect::Make(SkIntToScalar(CORNER_RADIUS));
|
||||
|
||||
return SkComposePathEffect::Make(outer, inner);
|
||||
return SkPathEffect::MakeCompose(outer, inner);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
|
@ -34,7 +34,7 @@ static void compose_pe(SkPaint* paint) {
|
||||
sk_sp<SkPathEffect> corner = SkCornerPathEffect::Make(25);
|
||||
sk_sp<SkPathEffect> compose;
|
||||
if (pe) {
|
||||
compose = SkComposePathEffect::Make(sk_ref_sp(pe), corner);
|
||||
compose = SkPathEffect::MakeCompose(sk_ref_sp(pe), corner);
|
||||
} else {
|
||||
compose = corner;
|
||||
}
|
||||
|
@ -36,18 +36,13 @@ void SkFlattenable::PrivateInitializer::InitCore() {
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLocalMatrixShader)
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkPictureShader)
|
||||
|
||||
// PathEffect
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkComposePathEffect)
|
||||
|
||||
// ImageFilter
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkMatrixImageFilter)
|
||||
|
||||
// ColorFilter
|
||||
SkColorFilter::InitializeFlattenables();
|
||||
|
||||
SkPathEffect::InitializeFlattenables();
|
||||
SkShader::InitializeFlattenables();
|
||||
|
||||
// Xfermode
|
||||
SkXfermode::InitializeFlattenables();
|
||||
|
||||
// Drawable
|
||||
|
@ -27,6 +27,121 @@ SkPathEffect::DashType SkPathEffect::asADash(DashInfo* info) const {
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef SK_SUPPORT_LEGACY_PATHEFFECT_SUBCLASSES
|
||||
|
||||
/** \class SkPairPathEffect
|
||||
|
||||
Common baseclass for Compose and Sum. This subclass manages two pathEffects,
|
||||
including flattening them. It does nothing in filterPath, and is only useful
|
||||
for managing the lifetimes of its two arguments.
|
||||
*/
|
||||
class SK_API SkPairPathEffect : public SkPathEffect {
|
||||
protected:
|
||||
SkPairPathEffect(sk_sp<SkPathEffect> pe0, sk_sp<SkPathEffect> pe1);
|
||||
|
||||
void flatten(SkWriteBuffer&) const override;
|
||||
|
||||
// these are visible to our subclasses
|
||||
sk_sp<SkPathEffect> fPE0;
|
||||
sk_sp<SkPathEffect> fPE1;
|
||||
|
||||
SK_TO_STRING_OVERRIDE()
|
||||
|
||||
private:
|
||||
typedef SkPathEffect INHERITED;
|
||||
};
|
||||
|
||||
/** \class SkComposePathEffect
|
||||
|
||||
This subclass of SkPathEffect composes its two arguments, to create
|
||||
a compound pathEffect.
|
||||
*/
|
||||
class SK_API SkComposePathEffect : public SkPairPathEffect {
|
||||
public:
|
||||
/** Construct a pathEffect whose effect is to apply first the inner pathEffect
|
||||
and the the outer pathEffect (e.g. outer(inner(path)))
|
||||
The reference counts for outer and inner are both incremented in the constructor,
|
||||
and decremented in the destructor.
|
||||
*/
|
||||
static sk_sp<SkPathEffect> Make(sk_sp<SkPathEffect> outer, sk_sp<SkPathEffect> inner) {
|
||||
if (!outer) {
|
||||
return inner;
|
||||
}
|
||||
if (!inner) {
|
||||
return outer;
|
||||
}
|
||||
return sk_sp<SkPathEffect>(new SkComposePathEffect(outer, inner));
|
||||
}
|
||||
|
||||
virtual bool filterPath(SkPath* dst, const SkPath& src,
|
||||
SkStrokeRec*, const SkRect*) const override;
|
||||
|
||||
SK_TO_STRING_OVERRIDE()
|
||||
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkComposePathEffect)
|
||||
|
||||
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
|
||||
bool exposedInAndroidJavaAPI() const override { return true; }
|
||||
#endif
|
||||
|
||||
protected:
|
||||
SkComposePathEffect(sk_sp<SkPathEffect> outer, sk_sp<SkPathEffect> inner)
|
||||
: INHERITED(outer, inner) {}
|
||||
|
||||
private:
|
||||
// illegal
|
||||
SkComposePathEffect(const SkComposePathEffect&);
|
||||
SkComposePathEffect& operator=(const SkComposePathEffect&);
|
||||
friend class SkPathEffect;
|
||||
|
||||
typedef SkPairPathEffect INHERITED;
|
||||
};
|
||||
|
||||
/** \class SkSumPathEffect
|
||||
|
||||
This subclass of SkPathEffect applies two pathEffects, one after the other.
|
||||
Its filterPath() returns true if either of the effects succeeded.
|
||||
*/
|
||||
class SK_API SkSumPathEffect : public SkPairPathEffect {
|
||||
public:
|
||||
/** Construct a pathEffect whose effect is to apply two effects, in sequence.
|
||||
(e.g. first(path) + second(path))
|
||||
The reference counts for first and second are both incremented in the constructor,
|
||||
and decremented in the destructor.
|
||||
*/
|
||||
static sk_sp<SkPathEffect> Make(sk_sp<SkPathEffect> first, sk_sp<SkPathEffect> second) {
|
||||
if (!first) {
|
||||
return second;
|
||||
}
|
||||
if (!second) {
|
||||
return first;
|
||||
}
|
||||
return sk_sp<SkPathEffect>(new SkSumPathEffect(first, second));
|
||||
}
|
||||
|
||||
virtual bool filterPath(SkPath* dst, const SkPath& src,
|
||||
SkStrokeRec*, const SkRect*) const override;
|
||||
|
||||
SK_TO_STRING_OVERRIDE()
|
||||
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSumPathEffect)
|
||||
|
||||
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
|
||||
bool exposedInAndroidJavaAPI() const override { return true; }
|
||||
#endif
|
||||
|
||||
protected:
|
||||
SkSumPathEffect(sk_sp<SkPathEffect> first, sk_sp<SkPathEffect> second)
|
||||
: INHERITED(first, second) {}
|
||||
|
||||
private:
|
||||
// illegal
|
||||
SkSumPathEffect(const SkSumPathEffect&);
|
||||
SkSumPathEffect& operator=(const SkSumPathEffect&);
|
||||
friend class SkPathEffect;
|
||||
|
||||
typedef SkPairPathEffect INHERITED;
|
||||
};
|
||||
#endif
|
||||
|
||||
SkPairPathEffect::SkPairPathEffect(sk_sp<SkPathEffect> pe0, sk_sp<SkPathEffect> pe1)
|
||||
: fPE0(std::move(pe0)), fPE1(std::move(pe1))
|
||||
{
|
||||
@ -106,3 +221,19 @@ void SkSumPathEffect::toString(SkString* str) const {
|
||||
str->appendf(")");
|
||||
}
|
||||
#endif
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
sk_sp<SkPathEffect> SkPathEffect::MakeSum(sk_sp<SkPathEffect> first, sk_sp<SkPathEffect> second) {
|
||||
return SkSumPathEffect::Make(std::move(first), std::move(second));
|
||||
}
|
||||
|
||||
sk_sp<SkPathEffect> SkPathEffect::MakeCompose(sk_sp<SkPathEffect> outer,
|
||||
sk_sp<SkPathEffect> inner) {
|
||||
return SkComposePathEffect::Make(std::move(outer), std::move(inner));
|
||||
}
|
||||
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkPathEffect)
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkComposePathEffect)
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSumPathEffect)
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
|
||||
|
@ -104,7 +104,6 @@ void SkFlattenable::PrivateInitializer::InitEffects() {
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkPath1DPathEffect)
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLine2DPathEffect)
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkPath2DPathEffect)
|
||||
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSumPathEffect)
|
||||
|
||||
// ImageFilter
|
||||
SkImageFilter::InitializeFlattenables();
|
||||
|
Loading…
Reference in New Issue
Block a user