| Index: src/core/SkComposeShader.cpp
|
| diff --git a/src/core/SkComposeShader.cpp b/src/core/SkComposeShader.cpp
|
| index b6ba3729d1ba641b936d55d85f57811ace7e6fc5..4d3e4e57ba8f9b60dbda7bd5a212eeb43816c617 100644
|
| --- a/src/core/SkComposeShader.cpp
|
| +++ b/src/core/SkComposeShader.cpp
|
| @@ -16,9 +16,10 @@
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkComposeShader::SkComposeShader(SkShader* sA, SkShader* sB, SkXfermode* mode) {
|
| - fShaderA = sA; sA->ref();
|
| - fShaderB = sB; sB->ref();
|
| +SkComposeShader::SkComposeShader(sk_sp<SkShader> sA, sk_sp<SkShader> sB, SkXfermode* mode)
|
| + : fShaderA(std::move(sA))
|
| + , fShaderB(std::move(sB))
|
| +{
|
| // mode may be null
|
| fMode = mode;
|
| SkSafeRef(mode);
|
| @@ -26,8 +27,6 @@ SkComposeShader::SkComposeShader(SkShader* sA, SkShader* sB, SkXfermode* mode) {
|
|
|
| SkComposeShader::~SkComposeShader() {
|
| SkSafeUnref(fMode);
|
| - fShaderB->unref();
|
| - fShaderA->unref();
|
| }
|
|
|
| size_t SkComposeShader::onContextSize(const ContextRec& rec) const {
|
| @@ -54,18 +53,18 @@ private:
|
| #define SkAutoAlphaRestore(...) SK_REQUIRE_LOCAL_VAR(SkAutoAlphaRestore)
|
|
|
| SkFlattenable* SkComposeShader::CreateProc(SkReadBuffer& buffer) {
|
| - SkAutoTUnref<SkShader> shaderA(buffer.readShader());
|
| - SkAutoTUnref<SkShader> shaderB(buffer.readShader());
|
| + sk_sp<SkShader> shaderA(buffer.readShader());
|
| + sk_sp<SkShader> shaderB(buffer.readShader());
|
| SkAutoTUnref<SkXfermode> mode(buffer.readXfermode());
|
| - if (!shaderA.get() || !shaderB.get()) {
|
| + if (!shaderA || !shaderB) {
|
| return nullptr;
|
| }
|
| - return new SkComposeShader(shaderA, shaderB, mode);
|
| + return new SkComposeShader(std::move(shaderA), std::move(shaderB), mode);
|
| }
|
|
|
| void SkComposeShader::flatten(SkWriteBuffer& buffer) const {
|
| - buffer.writeFlattenable(fShaderA);
|
| - buffer.writeFlattenable(fShaderB);
|
| + buffer.writeFlattenable(fShaderA.get());
|
| + buffer.writeFlattenable(fShaderB.get());
|
| buffer.writeFlattenable(fMode);
|
| }
|
|
|
| @@ -119,8 +118,8 @@ SkComposeShader::ComposeShaderContext::~ComposeShaderContext() {
|
|
|
| bool SkComposeShader::asACompose(ComposeRec* rec) const {
|
| if (rec) {
|
| - rec->fShaderA = fShaderA;
|
| - rec->fShaderB = fShaderB;
|
| + rec->fShaderA = fShaderA.get();
|
| + rec->fShaderB = fShaderB.get();
|
| rec->fMode = fMode;
|
| }
|
| return true;
|
| @@ -255,14 +254,16 @@ void SkComposeShader::toString(SkString* str) const {
|
|
|
| ///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkShader* SkShader::CreateComposeShader(SkShader* dst, SkShader* src, SkXfermode* xfer) {
|
| +sk_sp<SkShader> SkShader::MakeComposeShader(sk_sp<SkShader> dst, sk_sp<SkShader> src,
|
| + SkXfermode* xfer) {
|
| if (!dst || !src) {
|
| return nullptr;
|
| }
|
| - return new SkComposeShader(dst, src, xfer);
|
| + return sk_make_sp<SkComposeShader>(std::move(dst), std::move(src), xfer);
|
| }
|
|
|
| -SkShader* SkShader::CreateComposeShader(SkShader* dst, SkShader* src, SkXfermode::Mode mode) {
|
| +sk_sp<SkShader> SkShader::MakeComposeShader(sk_sp<SkShader> dst, sk_sp<SkShader> src,
|
| + SkXfermode::Mode mode) {
|
| SkAutoTUnref<SkXfermode> xfer(SkXfermode::Create(mode));
|
| - return CreateComposeShader(dst, src, xfer);
|
| + return MakeComposeShader(std::move(dst), std::move(src), xfer);
|
| }
|
|
|