SkMatrixImageFilter::SkMatrixImageFilter(const SkMatrix& transform,
SkFilterQuality filterQuality,
- SkImageFilter* input)
- : INHERITED(1, &input)
+ sk_sp<SkImageFilter> input)
+ : INHERITED(&input, 1, nullptr)
, fTransform(transform)
, fFilterQuality(filterQuality) {
}
-SkMatrixImageFilter* SkMatrixImageFilter::Create(const SkMatrix& transform,
- SkFilterQuality filterQuality,
- SkImageFilter* input) {
- return new SkMatrixImageFilter(transform, filterQuality, input);
+sk_sp<SkImageFilter> SkMatrixImageFilter::Make(const SkMatrix& transform,
+ SkFilterQuality filterQuality,
+ sk_sp<SkImageFilter> input) {
+ return sk_sp<SkImageFilter>(new SkMatrixImageFilter(transform,
+ filterQuality,
+ std::move(input)));
}
-SkFlattenable* SkMatrixImageFilter::CreateProc(SkReadBuffer& buffer) {
+sk_sp<SkFlattenable> SkMatrixImageFilter::CreateProc(SkReadBuffer& buffer) {
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
SkMatrix matrix;
buffer.readMatrix(&matrix);
SkFilterQuality quality = static_cast<SkFilterQuality>(buffer.readInt());
- return Create(matrix, quality, common.getInput(0).get());
+ return Make(matrix, quality, common.getInput(0));
}
void SkMatrixImageFilter::flatten(SkWriteBuffer& buffer) const {
SkIRect dstBounds;
dstRect.roundOut(&dstBounds);
- const SkImageInfo info = SkImageInfo::MakeN32Premul(dstBounds.width(), dstBounds.height());
-
- sk_sp<SkSpecialSurface> surf(input->makeSurface(info));
+ sk_sp<SkSpecialSurface> surf(input->makeSurface(ctx.outputProperties(), dstBounds.size()));
if (!surf) {
return nullptr;
}
canvas->concat(matrix);
SkPaint paint;
+ paint.setAntiAlias(true);
paint.setXfermodeMode(SkXfermode::kSrc_Mode);
paint.setFilterQuality(fFilterQuality);