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
This commit is contained in:
reed 2016-03-10 06:36:49 -08:00 committed by Commit bot
parent 51b56c9041
commit 150835e779
8 changed files with 23 additions and 19 deletions

View File

@ -212,7 +212,7 @@ DEF_SIMPLE_GM(colorfiltershader, canvas, 800, 800) {
for (int x = -1; x < filters.count(); ++x) { for (int x = -1; x < filters.count(); ++x) {
SkColorFilter* filter = x >= 0 ? filters[x] : nullptr; SkColorFilter* filter = x >= 0 ? filters[x] : nullptr;
paint.setShader(shader->newWithColorFilter(filter))->unref(); paint.setShader(shader->makeWithColorFilter(filter));
canvas->drawRect(r, paint); canvas->drawRect(r, paint);
canvas->translate(150, 0); canvas->translate(150, 0);
} }

View File

@ -154,7 +154,7 @@ protected:
SkMatrix lm; SkMatrix lm;
lm.setScale(2, 2); lm.setScale(2, 2);
paint.setShader(paint.getShader()->newWithLocalMatrix(lm))->unref(); paint.setShader(paint.getShader()->makeWithLocalMatrix(lm));
r.fRight += r.width(); r.fRight += r.width();
r.fBottom += r.height(); r.fBottom += r.height();

View File

@ -323,13 +323,13 @@ public:
* Return a shader that will apply the specified localMatrix to this shader. * 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. * The specified matrix will be applied before any matrix associated with this shader.
*/ */
SkShader* newWithLocalMatrix(const SkMatrix&) const; sk_sp<SkShader> makeWithLocalMatrix(const SkMatrix&) const;
/** /**
* Create a new shader that produces the same colors as invoking this shader and then applying * Create a new shader that produces the same colors as invoking this shader and then applying
* the colorfilter. * the colorfilter.
*/ */
SkShader* newWithColorFilter(SkColorFilter*) const; sk_sp<SkShader> makeWithColorFilter(SkColorFilter*) const;
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
// Factory methods for stock shaders // Factory methods for stock shaders
@ -359,6 +359,13 @@ public:
static SkShader* CreateComposeShader(SkShader* dst, SkShader* src, SkXfermode* xfer); static SkShader* CreateComposeShader(SkShader* dst, SkShader* src, SkXfermode* xfer);
static SkShader* CreatePictureShader(const SkPicture* src, TileMode tmx, TileMode tmy, static SkShader* CreatePictureShader(const SkPicture* src, TileMode tmx, TileMode tmy,
const SkMatrix* localMatrix, const SkRect* tile); 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 #endif
/** /**

View File

@ -289,14 +289,12 @@ protected:
if (true) { if (true) {
SkMatrix m; SkMatrix m;
m.setSkew(1, 0); m.setSkew(1, 0);
SkShader* s = paint.getShader()->newWithLocalMatrix(m); paint.setShader(paint.getShader()->makeWithLocalMatrix(m));
paint.setShader(s)->unref();
} }
if (true) { if (true) {
SkMatrix m; SkMatrix m;
m.setRotate(fAngle); m.setRotate(fAngle);
SkShader* s = paint.getShader()->newWithLocalMatrix(m); paint.setShader(paint.getShader()->makeWithLocalMatrix(m));
paint.setShader(s)->unref();
} }
patch.setBounds(fSize1.fX, fSize1.fY); patch.setBounds(fSize1.fX, fSize1.fY);
drawpatches(canvas, paint, nu, nv, &patch); drawpatches(canvas, paint, nu, nv, &patch);

View File

@ -867,8 +867,8 @@ SkBlitter* SkBlitter::Choose(const SkPixmap& device,
if (cf) { if (cf) {
SkASSERT(shader); SkASSERT(shader);
shader = shader->newWithColorFilter(cf); paint.writable()->setShader(shader->makeWithColorFilter(cf));
paint.writable()->setShader(shader)->unref(); shader = paint->getShader();
// blitters should ignore the presence/absence of a filter, since // blitters should ignore the presence/absence of a filter, since
// if there is one, the shader will take care of it. // if there is one, the shader will take care of it.
} }

View File

@ -137,10 +137,10 @@ void SkColorFilterShader::toString(SkString* str) const {
/////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////
SkShader* SkShader::newWithColorFilter(SkColorFilter* filter) const { sk_sp<SkShader> SkShader::makeWithColorFilter(SkColorFilter* filter) const {
SkShader* base = const_cast<SkShader*>(this); SkShader* base = const_cast<SkShader*>(this);
if (!filter) { if (!filter) {
return SkRef(base); return sk_ref_sp(base);
} }
return new SkColorFilterShader(base, filter); return sk_make_sp<SkColorFilterShader>(base, filter);
} }

View File

@ -14,7 +14,7 @@ SkFlattenable* SkLocalMatrixShader::CreateProc(SkReadBuffer& buffer) {
if (!baseShader) { if (!baseShader) {
return nullptr; return nullptr;
} }
return baseShader->newWithLocalMatrix(lm); return baseShader->makeWithLocalMatrix(lm).release();
} }
void SkLocalMatrixShader::flatten(SkWriteBuffer& buffer) const { void SkLocalMatrixShader::flatten(SkWriteBuffer& buffer) const {
@ -47,9 +47,9 @@ void SkLocalMatrixShader::toString(SkString* str) const {
} }
#endif #endif
SkShader* SkShader::newWithLocalMatrix(const SkMatrix& localMatrix) const { sk_sp<SkShader> SkShader::makeWithLocalMatrix(const SkMatrix& localMatrix) const {
if (localMatrix.isIdentity()) { if (localMatrix.isIdentity()) {
return SkRef(const_cast<SkShader*>(this)); return sk_ref_sp(const_cast<SkShader*>(this));
} }
const SkMatrix* lm = &localMatrix; const SkMatrix* lm = &localMatrix;
@ -63,5 +63,5 @@ SkShader* SkShader::newWithLocalMatrix(const SkMatrix& localMatrix) const {
baseShader = proxy.get(); baseShader = proxy.get();
} }
return new SkLocalMatrixShader(baseShader, *lm); return sk_make_sp<SkLocalMatrixShader>(baseShader, *lm);
} }

View File

@ -125,8 +125,7 @@ static sk_sp<SkShader> make_grad_sh() {
static sk_sp<SkShader> make_cf_sh() { static sk_sp<SkShader> make_cf_sh() {
SkAutoTUnref<SkColorFilter> filter(make_mx_cf()); SkAutoTUnref<SkColorFilter> filter(make_mx_cf());
sk_sp<SkShader> shader(make_color_sh()); return make_color_sh()->makeWithColorFilter(filter);
return sk_sp<SkShader>(shader->newWithColorFilter(filter));
} }
static bool compare_spans(const SkPM4f span4f[], const SkPMColor span4b[], int count, static bool compare_spans(const SkPM4f span4f[], const SkPMColor span4b[], int count,