Index: include/effects/SkMergeImageFilter.h |
diff --git a/include/effects/SkMergeImageFilter.h b/include/effects/SkMergeImageFilter.h |
index 3bf649d97ded9c0e8412f905d6f773f955eb528f..e85cc1f97fd45a8aadd134b28f0b482a1ff9a56a 100644 |
--- a/include/effects/SkMergeImageFilter.h |
+++ b/include/effects/SkMergeImageFilter.h |
@@ -16,30 +16,51 @@ class SK_API SkMergeImageFilter : public SkImageFilter { |
public: |
~SkMergeImageFilter() override; |
- static SkImageFilter* Create(SkImageFilter* first, SkImageFilter* second, |
- SkXfermode::Mode mode = SkXfermode::kSrcOver_Mode, |
- const CropRect* cropRect = NULL) { |
- SkImageFilter* inputs[2] = { first, second }; |
+ static sk_sp<SkImageFilter> Make(sk_sp<SkImageFilter> first, sk_sp<SkImageFilter> second, |
+ SkXfermode::Mode mode = SkXfermode::kSrcOver_Mode, |
+ const CropRect* cropRect = nullptr) { |
+ sk_sp<SkImageFilter> inputs[2] = { first, second }; |
SkXfermode::Mode modes[2] = { mode, mode }; |
- return new SkMergeImageFilter(inputs, 2, modes, cropRect); |
+ return sk_sp<SkImageFilter>(new SkMergeImageFilter(inputs, 2, modes, cropRect)); |
} |
- static SkImageFilter* Create(SkImageFilter* filters[], int count, |
- const SkXfermode::Mode modes[] = NULL, |
- const CropRect* cropRect = NULL) { |
- return new SkMergeImageFilter(filters, count, modes, cropRect); |
+ static sk_sp<SkImageFilter> Make(sk_sp<SkImageFilter> filters[], |
+ int count, |
+ const SkXfermode::Mode modes[] = nullptr, |
+ const CropRect* cropRect = nullptr) { |
+ return sk_sp<SkImageFilter>(new SkMergeImageFilter(filters, count, modes, cropRect)); |
} |
SK_TO_STRING_OVERRIDE() |
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMergeImageFilter) |
+#ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR |
+ static SkImageFilter* Create(SkImageFilter* first, SkImageFilter* second, |
+ SkXfermode::Mode mode = SkXfermode::kSrcOver_Mode, |
+ const CropRect* cropRect = nullptr) { |
+ return Make(sk_ref_sp<SkImageFilter>(first), |
+ sk_ref_sp<SkImageFilter>(second), |
+ mode, cropRect).release(); |
+ } |
+ |
+ static SkImageFilter* Create(SkImageFilter* filters[], int count, |
+ const SkXfermode::Mode modes[] = nullptr, |
+ const CropRect* cropRect = nullptr) { |
+ SkAutoTDeleteArray<sk_sp<SkImageFilter>> temp(new sk_sp<SkImageFilter>[count]); |
+ for (int i = 0; i < count; ++i) { |
+ temp[i] = sk_ref_sp<SkImageFilter>(filters[i]); |
+ } |
+ return Make(temp.get(), count, modes, cropRect).release(); |
+ } |
+#endif |
+ |
protected: |
void flatten(SkWriteBuffer&) const override; |
sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&, |
SkIPoint* offset) const override; |
private: |
- SkMergeImageFilter(SkImageFilter* filters[], int count, const SkXfermode::Mode modes[], |
+ SkMergeImageFilter(sk_sp<SkImageFilter> filters[], int count, const SkXfermode::Mode modes[], |
const CropRect* cropRect); |
uint8_t* fModes; // SkXfermode::Mode |