| 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
|
|
|