aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--bench/DashBench.cpp14
-rw-r--r--experimental/PdfViewer/SkPdfGraphicsState.cpp6
-rw-r--r--gm/dashcubics.cpp2
-rw-r--r--gm/dashing.cpp6
-rw-r--r--gm/patheffects.cpp14
-rw-r--r--gm/texteffects.cpp6
-rw-r--r--include/core/SkPathEffect.h27
-rw-r--r--include/core/SkXfermode.h16
-rw-r--r--include/effects/Sk1DPathEffect.h10
-rw-r--r--include/effects/Sk2DPathEffect.h29
-rw-r--r--include/effects/SkAvoidXfermode.h9
-rw-r--r--include/effects/SkCornerPathEffect.h9
-rw-r--r--include/effects/SkDashPathEffect.h12
-rw-r--r--include/effects/SkDiscretePathEffect.h9
-rw-r--r--include/effects/SkPixelXorXfermode.h9
-rw-r--r--samplecode/SampleAll.cpp16
-rw-r--r--samplecode/SampleAvoid.cpp6
-rw-r--r--samplecode/SamplePathEffects.cpp15
-rw-r--r--samplecode/SamplePathUtils.cpp8
-rw-r--r--samplecode/SampleSlides.cpp22
-rw-r--r--src/animator/SkDrawDash.cpp2
-rw-r--r--src/animator/SkDrawDiscrete.cpp2
-rw-r--r--src/animator/SkDrawExtraPathEffect.cpp4
-rw-r--r--src/core/SkXfermode.cpp30
-rw-r--r--src/core/SkXfermode_proccoeff.h16
-rw-r--r--src/effects/SkArithmeticMode.cpp16
-rw-r--r--src/utils/debugger/SkDebugCanvas.cpp2
-rw-r--r--tests/DrawPathTest.cpp15
-rw-r--r--tests/XfermodeTest.cpp2
29 files changed, 221 insertions, 113 deletions
diff --git a/bench/DashBench.cpp b/bench/DashBench.cpp
index 2e4bc376bc..365eee9841 100644
--- a/bench/DashBench.cpp
+++ b/bench/DashBench.cpp
@@ -71,8 +71,8 @@ protected:
SkPath path;
this->makePath(&path);
- paint.setPathEffect(new SkDashPathEffect(fIntervals.begin(),
- fIntervals.count(), 0))->unref();
+ paint.setPathEffect(SkDashPathEffect::Create(fIntervals.begin(),
+ fIntervals.count(), 0))->unref();
if (fDoClip) {
SkRect r = path.getBounds();
@@ -186,7 +186,7 @@ public:
proc(&fPath);
SkScalar vals[] = { SkIntToScalar(4), SkIntToScalar(4) };
- fPE.reset(new SkDashPathEffect(vals, 2, 0));
+ fPE.reset(SkDashPathEffect::Create(vals, 2, 0));
}
protected:
@@ -224,7 +224,7 @@ public:
fIsRound = isRound;
SkScalar vals[] = { SK_Scalar1, SK_Scalar1 };
- fPE.reset(new SkDashPathEffect(vals, 2, 0));
+ fPE.reset(SkDashPathEffect::Create(vals, 2, 0));
}
protected:
@@ -263,7 +263,7 @@ public:
fDoAA = doAA;
SkScalar vals[] = { SkIntToScalar(dashLength), SkIntToScalar(dashLength) };
- fPathEffect.reset(new SkDashPathEffect(vals, 2, SK_Scalar1, false));
+ fPathEffect.reset(SkDashPathEffect::Create(vals, 2, SK_Scalar1, false));
}
protected:
@@ -323,8 +323,8 @@ public:
// deliberately pick intervals that won't be caught by asPoints(), so
// we can test the filterPath code-path.
const SkScalar intervals[] = { 2, 1, 1, 1 };
- fPathEffect.reset(new SkDashPathEffect(intervals,
- SK_ARRAY_COUNT(intervals), 0));
+ fPathEffect.reset(SkDashPathEffect::Create(intervals,
+ SK_ARRAY_COUNT(intervals), 0));
SkScalar cx = 640 / 2; // center X
SkScalar cy = 480 / 2; // center Y
diff --git a/experimental/PdfViewer/SkPdfGraphicsState.cpp b/experimental/PdfViewer/SkPdfGraphicsState.cpp
index b52f22ccc7..76c4120fa3 100644
--- a/experimental/PdfViewer/SkPdfGraphicsState.cpp
+++ b/experimental/PdfViewer/SkPdfGraphicsState.cpp
@@ -25,9 +25,9 @@ void SkPdfGraphicsState::applyGraphicsState(SkPaint* paint, bool stroking) {
paint->setStrokeWidth(SkDoubleToScalar(fLineWidth));
// TODO(edisonn): perf, avoid allocs of the intervals
if (fDashArrayLength > 0) {
- paint->setPathEffect(new SkDashPathEffect(fDashArray,
- fDashArrayLength,
- fDashPhase))->unref();
+ paint->setPathEffect(SkDashPathEffect::Create(fDashArray,
+ fDashArrayLength,
+ fDashPhase))->unref();
}
}
diff --git a/gm/dashcubics.cpp b/gm/dashcubics.cpp
index 5d874d4dc6..f99c0c34f4 100644
--- a/gm/dashcubics.cpp
+++ b/gm/dashcubics.cpp
@@ -43,7 +43,7 @@ protected:
SkParsePath::FromSVGString(d, &path);
SkScalar intervals[] = { 5, 10 };
- SkPathEffect* pe = new SkDashPathEffect(intervals, 2, 0);
+ SkPathEffect* pe = SkDashPathEffect::Create(intervals, 2, 0);
SkPaint paint;
paint.setAntiAlias(true);
diff --git a/gm/dashing.cpp b/gm/dashing.cpp
index fa88e9e0ab..f690852fbd 100644
--- a/gm/dashing.cpp
+++ b/gm/dashing.cpp
@@ -19,7 +19,7 @@ static void drawline(SkCanvas* canvas, int on, int off, const SkPaint& paint,
SkIntToScalar(off),
};
- p.setPathEffect(new SkDashPathEffect(intervals, 2, 0))->unref();
+ p.setPathEffect(SkDashPathEffect::Create(intervals, 2, 0))->unref();
canvas->drawLine(0, 0, finalX, 0, p);
}
@@ -155,7 +155,7 @@ protected:
vals[i] = SkIntToScalar(*intervals++);
}
SkScalar phase = vals[0] / 2;
- paint.setPathEffect(new SkDashPathEffect(vals, count, phase))->unref();
+ paint.setPathEffect(SkDashPathEffect::Create(vals, count, phase))->unref();
for (size_t x = 0; x < SK_ARRAY_COUNT(gProc); ++x) {
SkPath path;
@@ -202,7 +202,7 @@ protected:
SkScalar intervals[2] = { dashLength, dashLength };
- p.setPathEffect(new SkDashPathEffect(intervals, 2, phase, false))->unref();
+ p.setPathEffect(SkDashPathEffect::Create(intervals, 2, phase, false))->unref();
SkPoint pts[2];
diff --git a/gm/patheffects.cpp b/gm/patheffects.cpp
index a1fb675a3c..4c5cd4512a 100644
--- a/gm/patheffects.cpp
+++ b/gm/patheffects.cpp
@@ -17,10 +17,10 @@ namespace skiagm {
static void compose_pe(SkPaint* paint) {
SkPathEffect* pe = paint->getPathEffect();
- SkPathEffect* corner = new SkCornerPathEffect(25);
+ SkPathEffect* corner = SkCornerPathEffect::Create(25);
SkPathEffect* compose;
if (pe) {
- compose = new SkComposePathEffect(pe, corner);
+ compose = SkComposePathEffect::Create(pe, corner);
corner->unref();
} else {
compose = corner;
@@ -45,8 +45,8 @@ static void stroke_pe(SkPaint* paint) {
static void dash_pe(SkPaint* paint) {
SkScalar inter[] = { 20, 10, 10, 10 };
paint->setStrokeWidth(12);
- paint->setPathEffect(new SkDashPathEffect(inter, SK_ARRAY_COUNT(inter),
- 0))->unref();
+ paint->setPathEffect(SkDashPathEffect::Create(inter, SK_ARRAY_COUNT(inter),
+ 0))->unref();
compose_pe(paint);
}
@@ -69,7 +69,7 @@ static void one_d_pe(SkPaint* paint) {
path.offset(SkIntToScalar(-6), 0);
scale(&path, 1.5f);
- paint->setPathEffect(new SkPath1DPathEffect(path, SkIntToScalar(21), 0,
+ paint->setPathEffect(SkPath1DPathEffect::Create(path, SkIntToScalar(21), 0,
SkPath1DPathEffect::kRotate_Style))->unref();
compose_pe(paint);
}
@@ -83,7 +83,7 @@ static void fill_pe(SkPaint* paint) {
}
static void discrete_pe(SkPaint* paint) {
- paint->setPathEffect(new SkDiscretePathEffect(10, 4))->unref();
+ paint->setPathEffect(SkDiscretePathEffect::Create(10, 4))->unref();
}
static SkPathEffect* MakeTileEffect() {
@@ -93,7 +93,7 @@ static SkPathEffect* MakeTileEffect() {
SkPath path;
path.addCircle(0, 0, SkIntToScalar(5));
- return new SkPath2DPathEffect(m, path);
+ return SkPath2DPathEffect::Create(m, path);
}
static void tile_pe(SkPaint* paint) {
diff --git a/gm/texteffects.cpp b/gm/texteffects.cpp
index 094fe7b8a1..cf9ec5accc 100644
--- a/gm/texteffects.cpp
+++ b/gm/texteffects.cpp
@@ -77,7 +77,7 @@ static void r4(SkLayerRasterizer* rast, SkPaint& p) {
static void r5(SkLayerRasterizer* rast, SkPaint& p) {
rast->addLayer(p);
- p.setPathEffect(new SkDiscretePathEffect(SK_Scalar1*4, SK_Scalar1*3))->unref();
+ p.setPathEffect(SkDiscretePathEffect::Create(SK_Scalar1*4, SK_Scalar1*3))->unref();
p.setXfermodeMode(SkXfermode::kSrcOut_Mode);
rast->addLayer(p);
}
@@ -98,7 +98,7 @@ static void r6(SkLayerRasterizer* rast, SkPaint& p) {
static SkPathEffect* MakeDotEffect(SkScalar radius, const SkMatrix& matrix) {
SkPath path;
path.addCircle(0, 0, radius);
- return new SkPath2DPathEffect(matrix, path);
+ return SkPath2DPathEffect::Create(matrix, path);
}
static void r7(SkLayerRasterizer* rast, SkPaint& p) {
@@ -132,7 +132,7 @@ static void r9(SkLayerRasterizer* rast, SkPaint& p) {
SkMatrix lattice;
lattice.setScale(SK_Scalar1, SK_Scalar1*6, 0, 0);
lattice.postRotate(SkIntToScalar(30), 0, 0);
- p.setPathEffect(new SkLine2DPathEffect(SK_Scalar1*2, lattice))->unref();
+ p.setPathEffect(SkLine2DPathEffect::Create(SK_Scalar1*2, lattice))->unref();
p.setXfermodeMode(SkXfermode::kClear_Mode);
rast->addLayer(p);
diff --git a/include/core/SkPathEffect.h b/include/core/SkPathEffect.h
index 3f38f3a101..86ccf86a92 100644
--- a/include/core/SkPathEffect.h
+++ b/include/core/SkPathEffect.h
@@ -31,8 +31,6 @@ class SK_API SkPathEffect : public SkFlattenable {
public:
SK_DECLARE_INST_COUNT(SkPathEffect)
- SkPathEffect() {}
-
/**
* 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
@@ -109,6 +107,7 @@ public:
SK_DEFINE_FLATTENABLE_TYPE(SkPathEffect)
protected:
+ SkPathEffect() {}
SkPathEffect(SkReadBuffer& buffer) : INHERITED(buffer) {}
private:
@@ -127,10 +126,10 @@ private:
*/
class SkPairPathEffect : public SkPathEffect {
public:
- SkPairPathEffect(SkPathEffect* pe0, SkPathEffect* pe1);
virtual ~SkPairPathEffect();
protected:
+ SkPairPathEffect(SkPathEffect* pe0, SkPathEffect* pe1);
SkPairPathEffect(SkReadBuffer&);
virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
@@ -153,8 +152,9 @@ public:
The reference counts for outer and inner are both incremented in the constructor,
and decremented in the destructor.
*/
- SkComposePathEffect(SkPathEffect* outer, SkPathEffect* inner)
- : INHERITED(outer, inner) {}
+ static SkComposePathEffect* Create(SkPathEffect* outer, SkPathEffect* inner) {
+ return SkNEW_ARGS(SkComposePathEffect, (outer, inner));
+ }
virtual bool filterPath(SkPath* dst, const SkPath& src,
SkStrokeRec*, const SkRect*) const SK_OVERRIDE;
@@ -164,6 +164,12 @@ public:
protected:
SkComposePathEffect(SkReadBuffer& buffer) : INHERITED(buffer) {}
+#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
+public:
+#endif
+ SkComposePathEffect(SkPathEffect* outer, SkPathEffect* inner)
+ : INHERITED(outer, inner) {}
+
private:
// illegal
SkComposePathEffect(const SkComposePathEffect&);
@@ -184,8 +190,9 @@ public:
The reference counts for first and second are both incremented in the constructor,
and decremented in the destructor.
*/
- SkSumPathEffect(SkPathEffect* first, SkPathEffect* second)
- : INHERITED(first, second) {}
+ static SkSumPathEffect* Create(SkPathEffect* first, SkPathEffect* second) {
+ return SkNEW_ARGS(SkSumPathEffect, (first, second));
+ }
virtual bool filterPath(SkPath* dst, const SkPath& src,
SkStrokeRec*, const SkRect*) const SK_OVERRIDE;
@@ -195,6 +202,12 @@ public:
protected:
SkSumPathEffect(SkReadBuffer& buffer) : INHERITED(buffer) {}
+#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
+public:
+#endif
+ SkSumPathEffect(SkPathEffect* first, SkPathEffect* second)
+ : INHERITED(first, second) {}
+
private:
// illegal
SkSumPathEffect(const SkSumPathEffect&);
diff --git a/include/core/SkXfermode.h b/include/core/SkXfermode.h
index 31b8081f85..86c08dd6b7 100644
--- a/include/core/SkXfermode.h
+++ b/include/core/SkXfermode.h
@@ -32,8 +32,6 @@ class SK_API SkXfermode : public SkFlattenable {
public:
SK_DECLARE_INST_COUNT(SkXfermode)
- SkXfermode() {}
-
virtual void xfer32(SkPMColor dst[], const SkPMColor src[], int count,
const SkAlpha aa[]) const;
virtual void xfer16(uint16_t dst[], const SkPMColor src[], int count,
@@ -230,6 +228,11 @@ protected:
*/
virtual SkPMColor xferColor(SkPMColor src, SkPMColor dst) const;
+#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
+public:
+#endif
+ SkXfermode() {}
+
private:
enum {
kModeCount = kLastMode + 1
@@ -250,7 +253,9 @@ private:
*/
class SkProcXfermode : public SkXfermode {
public:
- SkProcXfermode(SkXfermodeProc proc) : fProc(proc) {}
+ static SkProcXfermode* Create(SkXfermodeProc proc) {
+ return SkNEW_ARGS(SkProcXfermode, (proc));
+ }
// overrides from SkXfermode
virtual void xfer32(SkPMColor dst[], const SkPMColor src[], int count,
@@ -276,6 +281,11 @@ protected:
return fProc;
}
+#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
+public:
+#endif
+ SkProcXfermode(SkXfermodeProc proc) : fProc(proc) {}
+
private:
SkXfermodeProc fProc;
diff --git a/include/effects/Sk1DPathEffect.h b/include/effects/Sk1DPathEffect.h
index 4ac8f73b26..ce49460e65 100644
--- a/include/effects/Sk1DPathEffect.h
+++ b/include/effects/Sk1DPathEffect.h
@@ -52,7 +52,10 @@ public:
@param style how to transform path at each point (based on the current
position and tangent)
*/
- SkPath1DPathEffect(const SkPath& path, SkScalar advance, SkScalar phase, Style);
+ static SkPath1DPathEffect* Create(const SkPath& path, SkScalar advance, SkScalar phase,
+ Style style) {
+ return SkNEW_ARGS(SkPath1DPathEffect, (path, advance, phase, style));
+ }
virtual bool filterPath(SkPath*, const SkPath&,
SkStrokeRec*, const SkRect*) const SK_OVERRIDE;
@@ -67,6 +70,11 @@ protected:
virtual SkScalar begin(SkScalar contourLength) const SK_OVERRIDE;
virtual SkScalar next(SkPath*, SkScalar, SkPathMeasure&) const SK_OVERRIDE;
+#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
+public:
+#endif
+ SkPath1DPathEffect(const SkPath& path, SkScalar advance, SkScalar phase, Style);
+
private:
SkPath fPath; // copied from constructor
SkScalar fAdvance; // copied from constructor
diff --git a/include/effects/Sk2DPathEffect.h b/include/effects/Sk2DPathEffect.h
index 859b5cd952..f037e33508 100644
--- a/include/effects/Sk2DPathEffect.h
+++ b/include/effects/Sk2DPathEffect.h
@@ -14,7 +14,9 @@
class SK_API Sk2DPathEffect : public SkPathEffect {
public:
- Sk2DPathEffect(const SkMatrix& mat);
+ static Sk2DPathEffect* Create(const SkMatrix& mat) {
+ return SkNEW_ARGS(Sk2DPathEffect, (mat));
+ }
virtual bool filterPath(SkPath*, const SkPath&,
SkStrokeRec*, const SkRect*) const SK_OVERRIDE;
@@ -44,6 +46,11 @@ protected:
Sk2DPathEffect(SkReadBuffer&);
virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
+public:
+#endif
+ Sk2DPathEffect(const SkMatrix& mat);
+
private:
SkMatrix fMatrix, fInverse;
bool fMatrixIsInvertible;
@@ -58,8 +65,9 @@ private:
class SK_API SkLine2DPathEffect : public Sk2DPathEffect {
public:
- SkLine2DPathEffect(SkScalar width, const SkMatrix& matrix)
- : Sk2DPathEffect(matrix), fWidth(width) {}
+ static SkLine2DPathEffect* Create(SkScalar width, const SkMatrix& matrix) {
+ return SkNEW_ARGS(SkLine2DPathEffect, (width, matrix));
+ }
virtual bool filterPath(SkPath* dst, const SkPath& src,
SkStrokeRec*, const SkRect*) const SK_OVERRIDE;
@@ -73,6 +81,12 @@ protected:
virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
+public:
+#endif
+ SkLine2DPathEffect(SkScalar width, const SkMatrix& matrix)
+ : Sk2DPathEffect(matrix), fWidth(width) {}
+
private:
SkScalar fWidth;
@@ -85,7 +99,9 @@ public:
* Stamp the specified path to fill the shape, using the matrix to define
* the latice.
*/
- SkPath2DPathEffect(const SkMatrix&, const SkPath&);
+ static SkPath2DPathEffect* Create(const SkMatrix& matrix, const SkPath& path) {
+ return SkNEW_ARGS(SkPath2DPathEffect, (matrix, path));
+ }
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPath2DPathEffect)
@@ -95,6 +111,11 @@ protected:
virtual void next(const SkPoint&, int u, int v, SkPath*) const SK_OVERRIDE;
+#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
+public:
+#endif
+ SkPath2DPathEffect(const SkMatrix&, const SkPath&);
+
private:
SkPath fPath;
diff --git a/include/effects/SkAvoidXfermode.h b/include/effects/SkAvoidXfermode.h
index afc3fc9d70..2fa20b9834 100644
--- a/include/effects/SkAvoidXfermode.h
+++ b/include/effects/SkAvoidXfermode.h
@@ -37,7 +37,9 @@ public:
Tolerance near 0: draw only on colors that are nearly identical to the op-color
Tolerance near 255: draw on any colors even remotely similar to the op-color
*/
- SkAvoidXfermode(SkColor opColor, U8CPU tolerance, Mode mode);
+ static SkAvoidXfermode* Create(SkColor opColor, U8CPU tolerance, Mode mode) {
+ return SkNEW_ARGS(SkAvoidXfermode, (opColor, tolerance, mode));
+ }
// overrides from SkXfermode
virtual void xfer32(SkPMColor dst[], const SkPMColor src[], int count,
@@ -54,6 +56,11 @@ protected:
SkAvoidXfermode(SkReadBuffer&);
virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
+public:
+#endif
+ SkAvoidXfermode(SkColor opColor, U8CPU tolerance, Mode mode);
+
private:
SkColor fOpColor;
uint32_t fDistMul; // x.14
diff --git a/include/effects/SkCornerPathEffect.h b/include/effects/SkCornerPathEffect.h
index dcb7c9f736..c77505be39 100644
--- a/include/effects/SkCornerPathEffect.h
+++ b/include/effects/SkCornerPathEffect.h
@@ -20,7 +20,9 @@ public:
/** radius must be > 0 to have an effect. It specifies the distance from each corner
that should be "rounded".
*/
- SkCornerPathEffect(SkScalar radius);
+ static SkCornerPathEffect* Create(SkScalar radius) {
+ return SkNEW_ARGS(SkCornerPathEffect, (radius));
+ }
virtual ~SkCornerPathEffect();
virtual bool filterPath(SkPath* dst, const SkPath& src,
@@ -32,6 +34,11 @@ protected:
SkCornerPathEffect(SkReadBuffer&);
virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
+public:
+#endif
+ SkCornerPathEffect(SkScalar radius);
+
private:
SkScalar fRadius;
diff --git a/include/effects/SkDashPathEffect.h b/include/effects/SkDashPathEffect.h
index 818e073924..a1c5482653 100644
--- a/include/effects/SkDashPathEffect.h
+++ b/include/effects/SkDashPathEffect.h
@@ -36,8 +36,10 @@ public:
Note: only affects stroked paths.
*/
- SkDashPathEffect(const SkScalar intervals[], int count, SkScalar phase,
- bool scaleToFit = false);
+ static SkDashPathEffect* Create(const SkScalar intervals[], int count,
+ SkScalar phase, bool scaleToFit = false) {
+ return SkNEW_ARGS(SkDashPathEffect, (intervals, count, phase, scaleToFit));
+ }
virtual ~SkDashPathEffect();
virtual bool filterPath(SkPath* dst, const SkPath& src,
@@ -55,6 +57,12 @@ protected:
SkDashPathEffect(SkReadBuffer&);
virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
+public:
+#endif
+ SkDashPathEffect(const SkScalar intervals[], int count, SkScalar phase,
+ bool scaleToFit = false);
+
private:
SkScalar* fIntervals;
int32_t fCount;
diff --git a/include/effects/SkDiscretePathEffect.h b/include/effects/SkDiscretePathEffect.h
index 60eb85274c..126b408218 100644
--- a/include/effects/SkDiscretePathEffect.h
+++ b/include/effects/SkDiscretePathEffect.h
@@ -20,7 +20,9 @@ public:
away from the original path by a maximum of deviation.
Note: works on filled or framed paths
*/
- SkDiscretePathEffect(SkScalar segLength, SkScalar deviation);
+ static SkDiscretePathEffect* Create(SkScalar segLength, SkScalar deviation) {
+ return SkNEW_ARGS(SkDiscretePathEffect, (segLength, deviation));
+ }
virtual bool filterPath(SkPath* dst, const SkPath& src,
SkStrokeRec*, const SkRect*) const SK_OVERRIDE;
@@ -31,6 +33,11 @@ protected:
SkDiscretePathEffect(SkReadBuffer&);
virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
+#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
+public:
+#endif
+ SkDiscretePathEffect(SkScalar segLength, SkScalar deviation);
+
private:
SkScalar fSegLength, fPerterb;
diff --git a/include/effects/SkPixelXorXfermode.h b/include/effects/SkPixelXorXfermode.h
index 9472d9426e..cfd59ecce0 100644
--- a/include/effects/SkPixelXorXfermode.h
+++ b/include/effects/SkPixelXorXfermode.h
@@ -17,7 +17,9 @@
*/
class SK_API SkPixelXorXfermode : public SkXfermode {
public:
- SkPixelXorXfermode(SkColor opColor) : fOpColor(opColor) {}
+ static SkPixelXorXfermode* Create(SkColor opColor) {
+ return SkNEW_ARGS(SkPixelXorXfermode, (opColor));
+ }
SK_DEVELOPER_TO_STRING()
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPixelXorXfermode)
@@ -29,6 +31,11 @@ protected:
// override from SkXfermode
virtual SkPMColor xferColor(SkPMColor src, SkPMColor dst) const;
+#ifdef SK_SUPPORT_LEGACY_PUBLICEFFECTCONSTRUCTORS
+public:
+#endif
+ SkPixelXorXfermode(SkColor opColor) : fOpColor(opColor) {}
+
private:
SkColor fOpColor;
diff --git a/samplecode/SampleAll.cpp b/samplecode/SampleAll.cpp
index 6410670fed..bb5aadd1d8 100644
--- a/samplecode/SampleAll.cpp
+++ b/samplecode/SampleAll.cpp
@@ -144,7 +144,7 @@ static void r4(SkLayerRasterizer* rast, SkPaint& p) {
static void r5(SkLayerRasterizer* rast, SkPaint& p) {
rast->addLayer(p);
- p.setPathEffect(new SkDiscretePathEffect(SK_Scalar1*4, SK_Scalar1*3))->unref();
+ p.setPathEffect(SkDiscretePathEffect::Create(SK_Scalar1*4, SK_Scalar1*3))->unref();
p.setXfermodeMode(SkXfermode::kSrcOut_Mode);
rast->addLayer(p);
}
@@ -217,7 +217,7 @@ static void r9(SkLayerRasterizer* rast, SkPaint& p) {
SkMatrix lattice;
lattice.setScale(SK_Scalar1, SK_Scalar1*6, 0, 0);
lattice.postRotate(SkIntToScalar(30), 0, 0);
- p.setPathEffect(new SkLine2DPathEffect(SK_Scalar1*2, lattice))->unref();
+ p.setPathEffect(SkLine2DPathEffect::Create(SK_Scalar1*2, lattice))->unref();
p.setXfermodeMode(SkXfermode::kClear_Mode);
rast->addLayer(p);
@@ -550,11 +550,11 @@ SkCornerPathEffect.h:28:class SkCornerPathEffect : public SkPathEffect {
path.lineTo(SkIntToScalar(gXY[i]), SkIntToScalar(gXY[i+1]));
path.close();
path.offset(SkIntToScalar(-6), 0);
- SkPathEffect* outer = new SkPath1DPathEffect(path, SkIntToScalar(12),
+ SkPathEffect* outer = SkPath1DPathEffect::Create(path, SkIntToScalar(12),
gPhase, SkPath1DPathEffect::kRotate_Style);
- SkPathEffect* inner = new SkDiscretePathEffect(SkIntToScalar(2),
+ SkPathEffect* inner = SkDiscretePathEffect::Create(SkIntToScalar(2),
SkIntToScalar(1)/10); // SkCornerPathEffect(SkIntToScalar(2));
- SkPathEffect* result = new SkComposePathEffect(outer, inner);
+ SkPathEffect* result = SkComposePathEffect::Create(outer, inner);
outer->unref();
inner->unref();
return result;
@@ -627,12 +627,12 @@ SkCornerPathEffect.h:28:class SkCornerPathEffect : public SkPathEffect {
canvas->restore();
if (1) {
- SkAvoidXfermode mode(SK_ColorWHITE, 0xFF,
- SkAvoidXfermode::kTargetColor_Mode);
+ SkAutoTUnref<SkAvoidXfermode> mode(SkAvoidXfermode::Create(SK_ColorWHITE, 0xFF,
+ SkAvoidXfermode::kTargetColor_Mode));
SkPaint paint;
x += SkIntToScalar(20);
SkRect r = { x, 0, x + SkIntToScalar(360), SkIntToScalar(700) };
- paint.setXfermode(&mode);
+ paint.setXfermode(mode);
paint.setColor(SK_ColorGREEN);
paint.setAntiAlias(true);
canvas->drawOval(r, paint);
diff --git a/samplecode/SampleAvoid.cpp b/samplecode/SampleAvoid.cpp
index 879481b41c..aa7ca0e8ef 100644
--- a/samplecode/SampleAvoid.cpp
+++ b/samplecode/SampleAvoid.cpp
@@ -78,9 +78,9 @@ protected:
frameP.setStyle(SkPaint::kStroke_Style);
for (size_t i = 0; i < SK_ARRAY_COUNT(gData); i++) {
- SkAvoidXfermode mode(SK_ColorGREEN, gData[i].fTolerance,
- gData[i].fMode);
- paint.setXfermode(&mode);
+ SkAutoTUnref<SkAvoidXfermode> mode(SkAvoidXfermode::Create(
+ SK_ColorGREEN, gData[i].fTolerance, gData[i].fMode));
+ paint.setXfermode(mode);
int div = 3;
SkRect rr = { 0, 0, r.width()/div, r.height()/div };
rr.offset(r.width()/4 - rr.width()/2, r.height()/4 - rr.height()/2);
diff --git a/samplecode/SamplePathEffects.cpp b/samplecode/SamplePathEffects.cpp
index ac77f210de..2a1a49b949 100644
--- a/samplecode/SamplePathEffects.cpp
+++ b/samplecode/SamplePathEffects.cpp
@@ -29,7 +29,7 @@ static const int gXY[] = {
static SkPathEffect* make_pe(int flags) {
if (flags == 1)
- return new SkCornerPathEffect(SkIntToScalar(CORNER_RADIUS));
+ return SkCornerPathEffect::Create(SkIntToScalar(CORNER_RADIUS));
SkPath path;
path.moveTo(SkIntToScalar(gXY[0]), SkIntToScalar(gXY[1]));
@@ -38,14 +38,14 @@ static SkPathEffect* make_pe(int flags) {
path.close();
path.offset(SkIntToScalar(-6), 0);
- SkPathEffect* outer = new SkPath1DPathEffect(path, SkIntToScalar(12), gPhase, SkPath1DPathEffect::kRotate_Style);
+ SkPathEffect* outer = SkPath1DPathEffect::Create(path, SkIntToScalar(12), gPhase, SkPath1DPathEffect::kRotate_Style);
if (flags == 2)
return outer;
- SkPathEffect* inner = new SkCornerPathEffect(SkIntToScalar(CORNER_RADIUS));
+ SkPathEffect* inner = SkCornerPathEffect::Create(SkIntToScalar(CORNER_RADIUS));
- SkPathEffect* pe = new SkComposePathEffect(outer, inner);
+ SkPathEffect* pe = SkComposePathEffect::Create(outer, inner);
outer->unref();
inner->unref();
return pe;
@@ -59,10 +59,11 @@ static SkPathEffect* make_warp_pe() {
path.close();
path.offset(SkIntToScalar(-6), 0);
- SkPathEffect* outer = new SkPath1DPathEffect(path, SkIntToScalar(12), gPhase, SkPath1DPathEffect::kMorph_Style);
- SkPathEffect* inner = new SkCornerPathEffect(SkIntToScalar(CORNER_RADIUS));
+ SkPathEffect* outer = SkPath1DPathEffect::Create(
+ path, SkIntToScalar(12), gPhase, SkPath1DPathEffect::kMorph_Style);
+ SkPathEffect* inner = SkCornerPathEffect::Create(SkIntToScalar(CORNER_RADIUS));
- SkPathEffect* pe = new SkComposePathEffect(outer, inner);
+ SkPathEffect* pe = SkComposePathEffect::Create(outer, inner);
outer->unref();
inner->unref();
return pe;
diff --git a/samplecode/SamplePathUtils.cpp b/samplecode/SamplePathUtils.cpp
index 09ab7738e9..503a6eaa25 100644
--- a/samplecode/SamplePathUtils.cpp
+++ b/samplecode/SamplePathUtils.cpp
@@ -65,14 +65,14 @@ protected:
virtual void onDrawContent(SkCanvas* canvas) {
SkScalar intervals[8] = { .5f, .3f, .5f, .3f, .5f, .3f, .5f, .3f };
- SkDashPathEffect dash(intervals, 2, fPhase);
- SkCornerPathEffect corner(.25f);
- SkComposePathEffect compose(&dash, &corner);
+ SkAutoTUnref<SkDashPathEffect> dash(SkDashPathEffect::Create(intervals, 2, fPhase));
+ SkAutoTUnref<SkCornerPathEffect> corner(SkCornerPathEffect::Create(.25f));
+ SkAutoTUnref<SkComposePathEffect> compose(SkComposePathEffect::Create(dash, corner));
SkPaint outlinePaint;
outlinePaint.setAntiAlias(true); // dashed paint for bitmap
outlinePaint.setStyle(SkPaint::kStroke_Style);
- outlinePaint.setPathEffect(&compose);
+ outlinePaint.setPathEffect(compose);
canvas->scale(10.0f, 10.0f); // scales up
diff --git a/samplecode/SampleSlides.cpp b/samplecode/SampleSlides.cpp
index 26cfc7d1a3..914283aab0 100644
--- a/samplecode/SampleSlides.cpp
+++ b/samplecode/SampleSlides.cpp
@@ -31,10 +31,10 @@ typedef void (*SlideProc)(SkCanvas*);
static void compose_pe(SkPaint* paint) {
SkPathEffect* pe = paint->getPathEffect();
- SkPathEffect* corner = new SkCornerPathEffect(25);
+ SkPathEffect* corner = SkCornerPathEffect::Create(25);
SkPathEffect* compose;
if (pe) {
- compose = new SkComposePathEffect(pe, corner);
+ compose = SkComposePathEffect::Create(pe, corner);
corner->unref();
} else {
compose = corner;
@@ -59,8 +59,8 @@ static void stroke_pe(SkPaint* paint) {
static void dash_pe(SkPaint* paint) {
SkScalar inter[] = { 20, 10, 10, 10 };
paint->setStrokeWidth(12);
- paint->setPathEffect(new SkDashPathEffect(inter, SK_ARRAY_COUNT(inter),
- 0))->unref();
+ paint->setPathEffect(SkDashPathEffect::Create(inter, SK_ARRAY_COUNT(inter),
+ 0))->unref();
compose_pe(paint);
}
@@ -83,8 +83,8 @@ static void one_d_pe(SkPaint* paint) {
path.offset(SkIntToScalar(-6), 0);
scale(&path, 1.5f);
- paint->setPathEffect(new SkPath1DPathEffect(path, SkIntToScalar(21), 0,
- SkPath1DPathEffect::kRotate_Style))->unref();
+ paint->setPathEffect(SkPath1DPathEffect::Create(path, SkIntToScalar(21), 0,
+ SkPath1DPathEffect::kRotate_Style))->unref();
compose_pe(paint);
}
@@ -97,7 +97,7 @@ static void fill_pe(SkPaint* paint) {
}
static void discrete_pe(SkPaint* paint) {
- paint->setPathEffect(new SkDiscretePathEffect(10, 4))->unref();
+ paint->setPathEffect(SkDiscretePathEffect::Create(10, 4))->unref();
}
static SkPathEffect* MakeTileEffect() {
@@ -107,7 +107,7 @@ static SkPathEffect* MakeTileEffect() {
SkPath path;
path.addCircle(0, 0, SkIntToScalar(5));
- return new SkPath2DPathEffect(m, path);
+ return SkPath2DPathEffect::Create(m, path);
}
static void tile_pe(SkPaint* paint) {
@@ -547,7 +547,7 @@ static void r5(SkLayerRasterizer* rast, SkPaint& p)
{
rast->addLayer(p);
- p.setPathEffect(new SkDiscretePathEffect(SK_Scalar1*4, SK_Scalar1*3))->unref();
+ p.setPathEffect(SkDiscretePathEffect::Create(SK_Scalar1*4, SK_Scalar1*3))->unref();
p.setXfermodeMode(SkXfermode::kSrcOut_Mode);
rast->addLayer(p);
}
@@ -569,7 +569,7 @@ static void r6(SkLayerRasterizer* rast, SkPaint& p)
static SkPathEffect* MakeDotEffect(SkScalar radius, const SkMatrix& matrix) {
SkPath path;
path.addCircle(0, 0, radius);
- return new SkPath2DPathEffect(matrix, path);
+ return SkPath2DPathEffect::Create(matrix, path);
}
static void r7(SkLayerRasterizer* rast, SkPaint& p)
@@ -606,7 +606,7 @@ static void r9(SkLayerRasterizer* rast, SkPaint& p)
SkMatrix lattice;
lattice.setScale(SK_Scalar1, SK_Scalar1*6, 0, 0);
lattice.postRotate(SkIntToScalar(30), 0, 0);
- p.setPathEffect(new SkLine2DPathEffect(SK_Scalar1*2, lattice))->unref();
+ p.setPathEffect(SkLine2DPathEffect::Create(SK_Scalar1*2, lattice))->unref();
p.setXfermodeMode(SkXfermode::kClear_Mode);
rast->addLayer(p);
diff --git a/src/animator/SkDrawDash.cpp b/src/animator/SkDrawDash.cpp
index 8e73aa1c2d..cfef30335b 100644
--- a/src/animator/SkDrawDash.cpp
+++ b/src/animator/SkDrawDash.cpp
@@ -31,5 +31,5 @@ SkPathEffect* SkDash::getPathEffect() {
int count = intervals.count();
if (count == 0)
return NULL;
- return new SkDashPathEffect(intervals.begin(), count, phase);
+ return SkDashPathEffect::Create(intervals.begin(), count, phase);
}
diff --git a/src/animator/SkDrawDiscrete.cpp b/src/animator/SkDrawDiscrete.cpp
index 18c3ee0f61..9376435950 100644
--- a/src/animator/SkDrawDiscrete.cpp
+++ b/src/animator/SkDrawDiscrete.cpp
@@ -30,5 +30,5 @@ SkPathEffect* SkDiscrete::getPathEffect() {
if (deviation <= 0 || segLength <= 0)
return NULL;
else
- return new SkDiscretePathEffect(segLength, deviation);
+ return SkDiscretePathEffect::Create(segLength, deviation);
}
diff --git a/src/animator/SkDrawExtraPathEffect.cpp b/src/animator/SkDrawExtraPathEffect.cpp
index 7b991d251e..4b911d11c4 100644
--- a/src/animator/SkDrawExtraPathEffect.cpp
+++ b/src/animator/SkDrawExtraPathEffect.cpp
@@ -371,7 +371,7 @@ bool SkDrawComposePathEffect::addChild(SkAnimateMaker& , SkDisplayable* child) {
SkPathEffect* SkDrawComposePathEffect::getPathEffect() {
SkPathEffect* e1 = effect1->getPathEffect();
SkPathEffect* e2 = effect2->getPathEffect();
- SkPathEffect* composite = new SkComposePathEffect(e1, e2);
+ SkPathEffect* composite = SkComposePathEffect::Create(e1, e2);
e1->unref();
e2->unref();
return composite;
@@ -401,7 +401,7 @@ SkDrawCornerPathEffect::~SkDrawCornerPathEffect() {
}
SkPathEffect* SkDrawCornerPathEffect::getPathEffect() {
- return new SkCornerPathEffect(radius);
+ return SkCornerPathEffect::Create(radius);
}
/////////
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp
index 66e0dea2f5..f5ac20b282 100644
--- a/src/core/SkXfermode.cpp
+++ b/src/core/SkXfermode.cpp
@@ -1444,7 +1444,9 @@ void SkProcCoeffXfermode::toString(SkString* str) const {
class SkClearXfermode : public SkProcCoeffXfermode {
public:
- SkClearXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kClear_Mode) {}
+ static SkClearXfermode* Create(const ProcCoeff& rec) {
+ return SkNEW_ARGS(SkClearXfermode, (rec));
+ }
virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
@@ -1453,6 +1455,7 @@ public:
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkClearXfermode)
private:
+ SkClearXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kClear_Mode) {}
SkClearXfermode(SkReadBuffer& buffer)
: SkProcCoeffXfermode(buffer) {}
@@ -1506,7 +1509,9 @@ void SkClearXfermode::toString(SkString* str) const {
class SkSrcXfermode : public SkProcCoeffXfermode {
public:
- SkSrcXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kSrc_Mode) {}
+ static SkSrcXfermode* Create(const ProcCoeff& rec) {
+ return SkNEW_ARGS(SkSrcXfermode, (rec));
+ }
virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
virtual void xferA8(SkAlpha*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
@@ -1515,6 +1520,7 @@ public:
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkSrcXfermode)
private:
+ SkSrcXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kSrc_Mode) {}
SkSrcXfermode(SkReadBuffer& buffer)
: SkProcCoeffXfermode(buffer) {}
@@ -1573,7 +1579,9 @@ void SkSrcXfermode::toString(SkString* str) const {
class SkDstInXfermode : public SkProcCoeffXfermode {
public:
- SkDstInXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstIn_Mode) {}
+ static SkDstInXfermode* Create(const ProcCoeff& rec) {
+ return SkNEW_ARGS(SkDstInXfermode, (rec));
+ }
virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
@@ -1581,6 +1589,7 @@ public:
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDstInXfermode)
private:
+ SkDstInXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstIn_Mode) {}
SkDstInXfermode(SkReadBuffer& buffer) : INHERITED(buffer) {}
typedef SkProcCoeffXfermode INHERITED;
@@ -1616,7 +1625,9 @@ void SkDstInXfermode::toString(SkString* str) const {
class SkDstOutXfermode : public SkProcCoeffXfermode {
public:
- SkDstOutXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstOut_Mode) {}
+ static SkDstOutXfermode* Create(const ProcCoeff& rec) {
+ return SkNEW_ARGS(SkDstOutXfermode, (rec));
+ }
virtual void xfer32(SkPMColor*, const SkPMColor*, int, const SkAlpha*) const SK_OVERRIDE;
@@ -1624,6 +1635,7 @@ public:
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDstOutXfermode)
private:
+ SkDstOutXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstOut_Mode) {}
SkDstOutXfermode(SkReadBuffer& buffer)
: INHERITED(buffer) {}
@@ -1712,23 +1724,23 @@ SkXfermode* SkXfermode::Create(Mode mode) {
// commonly used, so we call those out for their own subclasses here.
switch (mode) {
case kClear_Mode:
- xfer = SkNEW_ARGS(SkClearXfermode, (rec));
+ xfer = SkClearXfermode::Create(rec);
break;
case kSrc_Mode:
- xfer = SkNEW_ARGS(SkSrcXfermode, (rec));
+ xfer = SkSrcXfermode::Create(rec);
break;
case kSrcOver_Mode:
SkASSERT(false); // should not land here
break;
case kDstIn_Mode:
- xfer = SkNEW_ARGS(SkDstInXfermode, (rec));
+ xfer = SkDstInXfermode::Create(rec);
break;
case kDstOut_Mode:
- xfer = SkNEW_ARGS(SkDstOutXfermode, (rec));
+ xfer = SkDstOutXfermode::Create(rec);
break;
default:
// no special-case, just rely in the rec and its function-ptrs
- xfer = SkNEW_ARGS(SkProcCoeffXfermode, (rec, mode));
+ xfer = SkProcCoeffXfermode::Create(rec, mode);
break;
}
}
diff --git a/src/core/SkXfermode_proccoeff.h b/src/core/SkXfermode_proccoeff.h
index 1a2f7fcc7f..11121115f1 100644
--- a/src/core/SkXfermode_proccoeff.h
+++ b/src/core/SkXfermode_proccoeff.h
@@ -15,12 +15,8 @@ struct ProcCoeff {
class SkProcCoeffXfermode : public SkProcXfermode {
public:
- SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode)
- : INHERITED(rec.fProc) {
- fMode = mode;
- // these may be valid, or may be CANNOT_USE_COEFF
- fSrcCoeff = rec.fSC;
- fDstCoeff = rec.fDC;
+ static SkProcCoeffXfermode* Create(const ProcCoeff& rec, Mode mode) {
+ return SkNEW_ARGS(SkProcCoeffXfermode, (rec, mode));
}
virtual bool asMode(Mode* mode) const SK_OVERRIDE;
@@ -36,6 +32,14 @@ public:
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode)
protected:
+ SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode)
+ : INHERITED(rec.fProc) {
+ fMode = mode;
+ // these may be valid, or may be CANNOT_USE_COEFF
+ fSrcCoeff = rec.fSC;
+ fDstCoeff = rec.fDC;
+ }
+
SkProcCoeffXfermode(SkReadBuffer& buffer);
virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
diff --git a/src/effects/SkArithmeticMode.cpp b/src/effects/SkArithmeticMode.cpp
index 052b06507c..2121e3a81d 100644
--- a/src/effects/SkArithmeticMode.cpp
+++ b/src/effects/SkArithmeticMode.cpp
@@ -23,11 +23,8 @@ static const bool gUseUnpremul = false;
class SkArithmeticMode_scalar : public SkXfermode {
public:
- SkArithmeticMode_scalar(SkScalar k1, SkScalar k2, SkScalar k3, SkScalar k4) {
- fK[0] = k1;
- fK[1] = k2;
- fK[2] = k3;
- fK[3] = k4;
+ static SkArithmeticMode_scalar* Create(SkScalar k1, SkScalar k2, SkScalar k3, SkScalar k4) {
+ return SkNEW_ARGS(SkArithmeticMode_scalar, (k1, k2, k3, k4));
}
virtual void xfer32(SkPMColor dst[], const SkPMColor src[], int count,
@@ -41,6 +38,13 @@ public:
#endif
private:
+ SkArithmeticMode_scalar(SkScalar k1, SkScalar k2, SkScalar k3, SkScalar k4) {
+ fK[0] = k1;
+ fK[1] = k2;
+ fK[2] = k3;
+ fK[3] = k4;
+ }
+
SkArithmeticMode_scalar(SkReadBuffer& buffer) : INHERITED(buffer) {
fK[0] = buffer.readScalar();
fK[1] = buffer.readScalar();
@@ -216,7 +220,7 @@ SkXfermode* SkArithmeticMode::Create(SkScalar k1, SkScalar k2,
return SkNEW_ARGS(SkArithmeticMode_linear, (i2, i3, i4));
#endif
}
- return SkNEW_ARGS(SkArithmeticMode_scalar, (k1, k2, k3, k4));
+ return SkArithmeticMode_scalar::Create(k1, k2, k3, k4);
}
diff --git a/src/utils/debugger/SkDebugCanvas.cpp b/src/utils/debugger/SkDebugCanvas.cpp
index 32a6570954..07cb09f381 100644
--- a/src/utils/debugger/SkDebugCanvas.cpp
+++ b/src/utils/debugger/SkDebugCanvas.cpp
@@ -118,7 +118,7 @@ static SkPMColor OverdrawXferModeProc(SkPMColor src, SkPMColor dst) {
class SkOverdrawFilter : public SkDrawFilter {
public:
SkOverdrawFilter() {
- fXferMode = new SkProcXfermode(OverdrawXferModeProc);
+ fXferMode = SkProcXfermode::Create(OverdrawXferModeProc);
}
virtual ~SkOverdrawFilter() {
diff --git a/tests/DrawPathTest.cpp b/tests/DrawPathTest.cpp
index e7f70057b9..f7f7367983 100644
--- a/tests/DrawPathTest.cpp
+++ b/tests/DrawPathTest.cpp
@@ -202,7 +202,7 @@ static void test_crbug_140642() {
*/
const SkScalar vals[] = { 27734, 35660, 2157846850.0f, 247 };
- SkDashPathEffect dontAssert(vals, 4, -248.135982067f);
+ SkAutoTUnref<SkDashPathEffect> dontAssert(SkDashPathEffect::Create(vals, 4, -248.135982067f));
}
static void test_crbug_124652() {
@@ -212,8 +212,7 @@ static void test_crbug_124652() {
large values can "swamp" small ones.
*/
SkScalar intervals[2] = {837099584, 33450};
- SkAutoTUnref<SkDashPathEffect> dash(
- new SkDashPathEffect(intervals, 2, -10, false));
+ SkAutoTUnref<SkDashPathEffect> dash(SkDashPathEffect::Create(intervals, 2, -10, false));
}
static void test_bigcubic() {
@@ -254,12 +253,12 @@ static void test_infinite_dash(skiatest::Reporter* reporter) {
path.lineTo(5000000, 0);
SkScalar intervals[] = { 0.2f, 0.2f };
- SkDashPathEffect dash(intervals, 2, 0);
+ SkAutoTUnref<SkDashPathEffect> dash(SkDashPathEffect::Create(intervals, 2, 0));
SkPath filteredPath;
SkPaint paint;
paint.setStyle(SkPaint::kStroke_Style);
- paint.setPathEffect(&dash);
+ paint.setPathEffect(dash);
paint.getFillPath(path, &filteredPath);
// If we reach this, we passed.
@@ -274,15 +273,15 @@ static void test_crbug_165432(skiatest::Reporter* reporter) {
path.lineTo(10000000, 0);
SkScalar intervals[] = { 0.5f, 0.5f };
- SkDashPathEffect dash(intervals, 2, 0);
+ SkAutoTUnref<SkDashPathEffect> dash(SkDashPathEffect::Create(intervals, 2, 0));
SkPaint paint;
paint.setStyle(SkPaint::kStroke_Style);
- paint.setPathEffect(&dash);
+ paint.setPathEffect(dash);
SkPath filteredPath;
SkStrokeRec rec(paint);
- REPORTER_ASSERT(reporter, !dash.filterPath(&filteredPath, path, &rec, NULL));
+ REPORTER_ASSERT(reporter, !dash->filterPath(&filteredPath, path, &rec, NULL));
REPORTER_ASSERT(reporter, filteredPath.isEmpty());
}
diff --git a/tests/XfermodeTest.cpp b/tests/XfermodeTest.cpp
index 7ac12fb089..4afa522de7 100644
--- a/tests/XfermodeTest.cpp
+++ b/tests/XfermodeTest.cpp
@@ -37,7 +37,7 @@ static void test_asMode(skiatest::Reporter* reporter) {
}
}
- SkXfermode* bogusXfer = new SkProcXfermode(bogusXfermodeProc);
+ SkXfermode* bogusXfer = SkProcXfermode::Create(bogusXfermodeProc);
SkXfermode::Mode reportedMode = ILLEGAL_MODE;
REPORTER_ASSERT(reporter, !bogusXfer->asMode(&reportedMode));
REPORTER_ASSERT(reporter, reportedMode == ILLEGAL_MODE);