Index: src/core/SkLocalMatrixImageFilter.h |
diff --git a/src/core/SkLocalMatrixImageFilter.h b/src/core/SkLocalMatrixImageFilter.h |
index 412b391e18b18281eb717fbe018b935a8f08797e..eb112b0f0dc58fae145afd5b81023053c81846ea 100644 |
--- a/src/core/SkLocalMatrixImageFilter.h |
+++ b/src/core/SkLocalMatrixImageFilter.h |
@@ -16,11 +16,28 @@ |
*/ |
class SkLocalMatrixImageFilter : public SkImageFilter { |
public: |
- static SkImageFilter* Create(const SkMatrix& localM, SkImageFilter* input); |
+ static sk_sp<SkImageFilter> Make(const SkMatrix& localM, sk_sp<SkImageFilter> input) { |
+ if (!input) { |
+ return nullptr; |
+ } |
+ if (localM.getType() & (SkMatrix::kAffine_Mask | SkMatrix::kPerspective_Mask)) { |
+ return nullptr; |
+ } |
+ if (localM.isIdentity()) { |
+ return input; |
+ } |
+ return sk_sp<SkImageFilter>(new SkLocalMatrixImageFilter(localM, input)); |
+ } |
SK_TO_STRING_OVERRIDE() |
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLocalMatrixImageFilter) |
+#ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR |
+ static SkImageFilter* Create(const SkMatrix& localM, SkImageFilter* input) { |
+ return Make(localM, sk_sp<SkImageFilter>(SkSafeRef(input))).release(); |
+ } |
+#endif |
+ |
protected: |
void flatten(SkWriteBuffer&) const override; |
sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&, |
@@ -28,7 +45,7 @@ protected: |
SkIRect onFilterBounds(const SkIRect& src, const SkMatrix&, MapDirection) const override; |
private: |
- SkLocalMatrixImageFilter(const SkMatrix& localM, SkImageFilter* input); |
+ SkLocalMatrixImageFilter(const SkMatrix& localM, sk_sp<SkImageFilter> input); |
SkMatrix fLocalM; |