Revert "replace SkXfermode obj with SkBlendMode enum in paints"
[platform/upstream/libSkiaSharp.git] / src / core / SkMatrixImageFilter.cpp
index d66772c..12efc64 100644 (file)
 
 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 {
@@ -68,9 +70,7 @@ sk_sp<SkSpecialImage> SkMatrixImageFilter::onFilterImage(SkSpecialImage* source,
     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;
     }
@@ -84,6 +84,7 @@ sk_sp<SkSpecialImage> SkMatrixImageFilter::onFilterImage(SkSpecialImage* source,
     canvas->concat(matrix);
 
     SkPaint paint;
+    paint.setAntiAlias(true);
     paint.setXfermodeMode(SkXfermode::kSrc_Mode);
     paint.setFilterQuality(fFilterQuality);