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);
}
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();
* 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<SkShader> 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<SkShader> makeWithColorFilter(SkColorFilter*) const;
//////////////////////////////////////////////////////////////////////////
// Factory methods for stock shaders
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
/**
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);
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.
}
///////////////////////////////////////////////////////////////////////////////////////////////////
-SkShader* SkShader::newWithColorFilter(SkColorFilter* filter) const {
+sk_sp<SkShader> SkShader::makeWithColorFilter(SkColorFilter* filter) const {
SkShader* base = const_cast<SkShader*>(this);
if (!filter) {
- return SkRef(base);
+ return sk_ref_sp(base);
}
- return new SkColorFilterShader(base, filter);
+ return sk_make_sp<SkColorFilterShader>(base, filter);
}
if (!baseShader) {
return nullptr;
}
- return baseShader->newWithLocalMatrix(lm);
+ return baseShader->makeWithLocalMatrix(lm).release();
}
void SkLocalMatrixShader::flatten(SkWriteBuffer& buffer) const {
}
#endif
-SkShader* SkShader::newWithLocalMatrix(const SkMatrix& localMatrix) const {
+sk_sp<SkShader> SkShader::makeWithLocalMatrix(const SkMatrix& localMatrix) const {
if (localMatrix.isIdentity()) {
- return SkRef(const_cast<SkShader*>(this));
+ return sk_ref_sp(const_cast<SkShader*>(this));
}
const SkMatrix* lm = &localMatrix;
baseShader = proxy.get();
}
- return new SkLocalMatrixShader(baseShader, *lm);
+ return sk_make_sp<SkLocalMatrixShader>(baseShader, *lm);
}
static sk_sp<SkShader> make_cf_sh() {
SkAutoTUnref<SkColorFilter> filter(make_mx_cf());
- sk_sp<SkShader> shader(make_color_sh());
- return sk_sp<SkShader>(shader->newWithColorFilter(filter));
+ return make_color_sh()->makeWithColorFilter(filter);
}
static bool compare_spans(const SkPM4f span4f[], const SkPMColor span4b[], int count,