Update MagnifierImageFilter to sk_sp
authorrobertphillips <robertphillips@google.com>
Thu, 7 Apr 2016 14:34:15 +0000 (07:34 -0700)
committerCommit bot <commit-bot@chromium.org>
Thu, 7 Apr 2016 14:34:15 +0000 (07:34 -0700)
TBR=reed@google.com

GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1864843002

Review URL: https://codereview.chromium.org/1864843002

bench/MagnifierBench.cpp
fuzz/FilterFuzz.cpp
gm/imagemagnifier.cpp
include/effects/SkMagnifierImageFilter.h
samplecode/SampleFilterFuzz.cpp
src/effects/SkMagnifierImageFilter.cpp

index 6185059..98deade 100644 (file)
@@ -38,11 +38,11 @@ protected:
         const int h = fIsSmall ? FILTER_HEIGHT_SMALL : FILTER_HEIGHT_LARGE;
         SkPaint paint;
         paint.setImageFilter(
-            SkMagnifierImageFilter::Create(
+            SkMagnifierImageFilter::Make(
                 SkRect::MakeXYWH(SkIntToScalar(w / 4),
                                  SkIntToScalar(h / 4),
                                  SkIntToScalar(w / 2),
-                                 SkIntToScalar(h / 2)), 100))->unref();
+                                 SkIntToScalar(h / 2)), 100, nullptr));
 
         for (int i = 0; i < loops; i++) {
             canvas->drawBitmap(fCheckerboard, 0, 0, &paint);
index 12ae50d..ebb9de8 100644 (file)
@@ -579,8 +579,9 @@ static sk_sp<SkImageFilter> make_image_filter(bool canBeNull) {
                                          make_image_filter());
         break;
     case MAGNIFIER:
-        filter = sk_sp<SkImageFilter>(SkMagnifierImageFilter::Create(make_rect(),
-                                                                     make_scalar(true)));
+        filter = SkMagnifierImageFilter::Make(make_rect(),
+                                              make_scalar(true), 
+                                              make_image_filter());
         break;
     case DOWN_SAMPLE:
         filter = SkDownSampleImageFilter::Make(make_scalar(), make_image_filter());
index 7363981..5697aa2 100644 (file)
 DEF_SIMPLE_GM_BG(imagemagnifier, canvas, WIDTH, HEIGHT, SK_ColorBLACK) {
         SkPaint filterPaint;
         filterPaint.setImageFilter(
-            SkMagnifierImageFilter::Create(
+            SkMagnifierImageFilter::Make(
                 SkRect::MakeXYWH(SkIntToScalar(100), SkIntToScalar(100),
                                  SkIntToScalar(WIDTH / 2),
                                  SkIntToScalar(HEIGHT / 2)),
-                100))->unref();
+                100, nullptr));
         canvas->saveLayer(nullptr, &filterPaint);
         const char* str = "The quick brown fox jumped over the lazy dog.";
         SkRandom rand;
index bea03ad..739f1ee 100644 (file)
 
 class SK_API SkMagnifierImageFilter : public SkImageFilter {
 public:
-    static SkImageFilter* Create(const SkRect& src, SkScalar inset, SkImageFilter* input = NULL);
+    static sk_sp<SkImageFilter> Make(const SkRect& src, SkScalar inset, sk_sp<SkImageFilter> input);
 
     SK_TO_STRING_OVERRIDE()
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMagnifierImageFilter)
 
+#ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR
+    static SkImageFilter* Create(const SkRect& src, SkScalar inset,
+                                 SkImageFilter* input = nullptr) {
+        return Make(src, inset, sk_ref_sp<SkImageFilter>(input)).release();
+    }
+#endif
+
 protected:
-    SkMagnifierImageFilter(const SkRect& srcRect, SkScalar inset, SkImageFilter* input);
+    SkMagnifierImageFilter(const SkRect& srcRect, SkScalar inset, sk_sp<SkImageFilter> input);
     void flatten(SkWriteBuffer&) const override;
 
     bool onFilterImageDeprecated(Proxy*, const SkBitmap& src, const Context&,
index 8f83c3e..a7f4163 100644 (file)
@@ -582,8 +582,9 @@ static sk_sp<SkImageFilter> make_image_filter(bool canBeNull) {
                                          make_image_filter());
         break;
     case MAGNIFIER:
-        filter = sk_sp<SkImageFilter>(SkMagnifierImageFilter::Create(make_rect(), 
-                                                                     make_scalar(true)));
+        filter = SkMagnifierImageFilter::Make(make_rect(),
+                                              make_scalar(true),
+                                              make_image_filter());
         break;
     case DOWN_SAMPLE:
         filter = SkDownSampleImageFilter::Make(make_scalar(), make_image_filter());
index dfd7f04..616aaaf 100644 (file)
@@ -232,8 +232,8 @@ void GrMagnifierEffect::onComputeInvariantOutput(GrInvariantOutput* inout) const
 
 ////////////////////////////////////////////////////////////////////////////////
 
-SkImageFilter* SkMagnifierImageFilter::Create(const SkRect& srcRect, SkScalar inset,
-                                              SkImageFilter* input) {
+sk_sp<SkImageFilter> SkMagnifierImageFilter::Make(const SkRect& srcRect, SkScalar inset,
+                                                  sk_sp<SkImageFilter> input) {
 
     if (!SkScalarIsFinite(inset) || !SkIsValidRect(srcRect)) {
         return nullptr;
@@ -242,13 +242,15 @@ SkImageFilter* SkMagnifierImageFilter::Create(const SkRect& srcRect, SkScalar in
     if (srcRect.fLeft < 0 || srcRect.fTop < 0) {
         return nullptr;
     }
-    return new SkMagnifierImageFilter(srcRect, inset, input);
+    return sk_sp<SkImageFilter>(new SkMagnifierImageFilter(srcRect, inset, std::move(input)));
 }
 
 
 SkMagnifierImageFilter::SkMagnifierImageFilter(const SkRect& srcRect, SkScalar inset,
-                                               SkImageFilter* input)
-    : INHERITED(1, &input), fSrcRect(srcRect), fInset(inset) {
+                                               sk_sp<SkImageFilter> input)
+    : INHERITED(&input, 1, nullptr)
+    , fSrcRect(srcRect)
+    , fInset(inset) {
     SkASSERT(srcRect.x() >= 0 && srcRect.y() >= 0 && inset >= 0);
 }
 
@@ -285,7 +287,7 @@ sk_sp<SkFlattenable> SkMagnifierImageFilter::CreateProc(SkReadBuffer& buffer) {
     SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
     SkRect src;
     buffer.readRect(&src);
-    return sk_sp<SkFlattenable>(Create(src, buffer.readScalar(), common.getInput(0).get()));
+    return Make(src, buffer.readScalar(), common.getInput(0));
 }
 
 void SkMagnifierImageFilter::flatten(SkWriteBuffer& buffer) const {