| Index: src/core/SkLocalMatrixImageFilter.cpp
|
| diff --git a/src/core/SkLocalMatrixImageFilter.cpp b/src/core/SkLocalMatrixImageFilter.cpp
|
| index d1b5715b7fe19c541aaad6e04bbe5f21ce80827d..15f2f0ef007cbc91ce713897b1f013e97d523cd8 100644
|
| --- a/src/core/SkLocalMatrixImageFilter.cpp
|
| +++ b/src/core/SkLocalMatrixImageFilter.cpp
|
| @@ -10,9 +10,21 @@
|
| #include "SkSpecialImage.h"
|
| #include "SkString.h"
|
|
|
| -SkLocalMatrixImageFilter::SkLocalMatrixImageFilter(const SkMatrix& localM,
|
| - sk_sp<SkImageFilter> input)
|
| - : INHERITED(&input, 1, nullptr)
|
| +SkImageFilter* SkLocalMatrixImageFilter::Create(const SkMatrix& localM, SkImageFilter* input) {
|
| + if (!input) {
|
| + return nullptr;
|
| + }
|
| + if (localM.getType() & (SkMatrix::kAffine_Mask | SkMatrix::kPerspective_Mask)) {
|
| + return nullptr;
|
| + }
|
| + if (localM.isIdentity()) {
|
| + return SkRef(input);
|
| + }
|
| + return new SkLocalMatrixImageFilter(localM, input);
|
| +}
|
| +
|
| +SkLocalMatrixImageFilter::SkLocalMatrixImageFilter(const SkMatrix& localM, SkImageFilter* input)
|
| + : INHERITED(1, &input)
|
| , fLocalM(localM) {
|
| }
|
|
|
| @@ -20,8 +32,7 @@
|
| SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1);
|
| SkMatrix lm;
|
| buffer.readMatrix(&lm);
|
| - return SkLocalMatrixImageFilter::Make(lm,
|
| - sk_ref_sp<SkImageFilter>(common.getInput(0))).release();
|
| + return SkLocalMatrixImageFilter::Create(lm, common.getInput(0));
|
| }
|
|
|
| void SkLocalMatrixImageFilter::flatten(SkWriteBuffer& buffer) const {
|
|
|