From: reed Date: Thu, 10 Mar 2016 14:36:49 +0000 (-0800) Subject: sk_sp versions of newWithColorFilter and newWithLocalMatrix X-Git-Tag: submit/tizen/20180928.044319~129^2~1533 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=150835e779ceb24e2b540f58958cbff2a0ab9942;p=platform%2Fupstream%2FlibSkiaSharp.git sk_sp versions of newWithColorFilter and newWithLocalMatrix BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1782703002 Review URL: https://codereview.chromium.org/1782703002 --- diff --git a/gm/colorfilterimagefilter.cpp b/gm/colorfilterimagefilter.cpp index b0f67bff30..fa33a9c5cb 100644 --- a/gm/colorfilterimagefilter.cpp +++ b/gm/colorfilterimagefilter.cpp @@ -212,7 +212,7 @@ DEF_SIMPLE_GM(colorfiltershader, canvas, 800, 800) { for (int x = -1; x < filters.count(); ++x) { SkColorFilter* filter = x >= 0 ? filters[x] : nullptr; - paint.setShader(shader->newWithColorFilter(filter))->unref(); + paint.setShader(shader->makeWithColorFilter(filter)); canvas->drawRect(r, paint); canvas->translate(150, 0); } diff --git a/gm/perlinnoise.cpp b/gm/perlinnoise.cpp index 7e6f70e5de..92f0f963c3 100644 --- a/gm/perlinnoise.cpp +++ b/gm/perlinnoise.cpp @@ -154,7 +154,7 @@ protected: SkMatrix lm; lm.setScale(2, 2); - paint.setShader(paint.getShader()->newWithLocalMatrix(lm))->unref(); + paint.setShader(paint.getShader()->makeWithLocalMatrix(lm)); r.fRight += r.width(); r.fBottom += r.height(); diff --git a/include/core/SkShader.h b/include/core/SkShader.h index 3e4093645c..0bcb98a07e 100644 --- a/include/core/SkShader.h +++ b/include/core/SkShader.h @@ -323,13 +323,13 @@ public: * Return a shader that will apply the specified localMatrix to this shader. * The specified matrix will be applied before any matrix associated with this shader. */ - SkShader* newWithLocalMatrix(const SkMatrix&) const; + sk_sp makeWithLocalMatrix(const SkMatrix&) const; /** * Create a new shader that produces the same colors as invoking this shader and then applying * the colorfilter. */ - SkShader* newWithColorFilter(SkColorFilter*) const; + sk_sp makeWithColorFilter(SkColorFilter*) const; ////////////////////////////////////////////////////////////////////////// // Factory methods for stock shaders @@ -359,6 +359,13 @@ public: static SkShader* CreateComposeShader(SkShader* dst, SkShader* src, SkXfermode* xfer); static SkShader* CreatePictureShader(const SkPicture* src, TileMode tmx, TileMode tmy, const SkMatrix* localMatrix, const SkRect* tile); + + SkShader* newWithLocalMatrix(const SkMatrix& matrix) const { + return this->makeWithLocalMatrix(matrix).release(); + } + SkShader* newWithColorFilter(SkColorFilter* filter) const { + return this->makeWithColorFilter(filter).release(); + } #endif /** diff --git a/samplecode/SamplePatch.cpp b/samplecode/SamplePatch.cpp index c9ecb70990..3ce350ac47 100644 --- a/samplecode/SamplePatch.cpp +++ b/samplecode/SamplePatch.cpp @@ -289,14 +289,12 @@ protected: if (true) { SkMatrix m; m.setSkew(1, 0); - SkShader* s = paint.getShader()->newWithLocalMatrix(m); - paint.setShader(s)->unref(); + paint.setShader(paint.getShader()->makeWithLocalMatrix(m)); } if (true) { SkMatrix m; m.setRotate(fAngle); - SkShader* s = paint.getShader()->newWithLocalMatrix(m); - paint.setShader(s)->unref(); + paint.setShader(paint.getShader()->makeWithLocalMatrix(m)); } patch.setBounds(fSize1.fX, fSize1.fY); drawpatches(canvas, paint, nu, nv, &patch); diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp index 9fcab9c982..04897e3828 100644 --- a/src/core/SkBlitter.cpp +++ b/src/core/SkBlitter.cpp @@ -867,8 +867,8 @@ SkBlitter* SkBlitter::Choose(const SkPixmap& device, if (cf) { SkASSERT(shader); - shader = shader->newWithColorFilter(cf); - paint.writable()->setShader(shader)->unref(); + paint.writable()->setShader(shader->makeWithColorFilter(cf)); + shader = paint->getShader(); // blitters should ignore the presence/absence of a filter, since // if there is one, the shader will take care of it. } diff --git a/src/core/SkColorFilterShader.cpp b/src/core/SkColorFilterShader.cpp index f5a3b9c9e1..2e426a17ed 100644 --- a/src/core/SkColorFilterShader.cpp +++ b/src/core/SkColorFilterShader.cpp @@ -137,10 +137,10 @@ void SkColorFilterShader::toString(SkString* str) const { /////////////////////////////////////////////////////////////////////////////////////////////////// -SkShader* SkShader::newWithColorFilter(SkColorFilter* filter) const { +sk_sp SkShader::makeWithColorFilter(SkColorFilter* filter) const { SkShader* base = const_cast(this); if (!filter) { - return SkRef(base); + return sk_ref_sp(base); } - return new SkColorFilterShader(base, filter); + return sk_make_sp(base, filter); } diff --git a/src/core/SkLocalMatrixShader.cpp b/src/core/SkLocalMatrixShader.cpp index 42b378d61a..ddd6114ca8 100644 --- a/src/core/SkLocalMatrixShader.cpp +++ b/src/core/SkLocalMatrixShader.cpp @@ -14,7 +14,7 @@ SkFlattenable* SkLocalMatrixShader::CreateProc(SkReadBuffer& buffer) { if (!baseShader) { return nullptr; } - return baseShader->newWithLocalMatrix(lm); + return baseShader->makeWithLocalMatrix(lm).release(); } void SkLocalMatrixShader::flatten(SkWriteBuffer& buffer) const { @@ -47,9 +47,9 @@ void SkLocalMatrixShader::toString(SkString* str) const { } #endif -SkShader* SkShader::newWithLocalMatrix(const SkMatrix& localMatrix) const { +sk_sp SkShader::makeWithLocalMatrix(const SkMatrix& localMatrix) const { if (localMatrix.isIdentity()) { - return SkRef(const_cast(this)); + return sk_ref_sp(const_cast(this)); } const SkMatrix* lm = &localMatrix; @@ -63,5 +63,5 @@ SkShader* SkShader::newWithLocalMatrix(const SkMatrix& localMatrix) const { baseShader = proxy.get(); } - return new SkLocalMatrixShader(baseShader, *lm); + return sk_make_sp(baseShader, *lm); } diff --git a/tests/SkColor4fTest.cpp b/tests/SkColor4fTest.cpp index 62eed211df..0b5a4e05f7 100644 --- a/tests/SkColor4fTest.cpp +++ b/tests/SkColor4fTest.cpp @@ -125,8 +125,7 @@ static sk_sp make_grad_sh() { static sk_sp make_cf_sh() { SkAutoTUnref filter(make_mx_cf()); - sk_sp shader(make_color_sh()); - return sk_sp(shader->newWithColorFilter(filter)); + return make_color_sh()->makeWithColorFilter(filter); } static bool compare_spans(const SkPM4f span4f[], const SkPMColor span4b[], int count,