SkShader* refAs... to sk_sp<SkShader> makeAs...
authorBen Wagner <bungeman@google.com>
Mon, 24 Oct 2016 15:36:21 +0000 (11:36 -0400)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Mon, 24 Oct 2016 16:40:01 +0000 (16:40 +0000)
There appear to be no existing overriders of the refAs.. method outside
Skia.

Change-Id: Iab174e83023093b4d7fc0bd8907666b66ddb1eea
Reviewed-on: https://skia-review.googlesource.com/3746
Reviewed-by: Ben Wagner <benjaminwagner@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>

gyp/skia_for_android_framework_defines.gypi
include/core/SkShader.h
public.bzl
src/core/SkLocalMatrixShader.cpp
src/core/SkLocalMatrixShader.h
src/core/SkShader.cpp

index 54ab773bc014e52210640cb1e6b2de63865b091d..9b59fb097a508669e789ab074eb570801961eb2b 100644 (file)
@@ -23,6 +23,7 @@
       'SK_SUPPORT_LEGACY_CLIP_REGIONOPS',
       'SK_SUPPORT_LEGACY_SHADER_ISABITMAP',
       'SK_SUPPORT_LEGACY_COLOR_SPACE_FACTORIES',
+      'SK_SUPPORT_LEGACY_SHADER_ASALOCALMATRIXSHADER',
     ],
   },
 }
index 161e6081dd5bcdbf36455a82dab99237e133717b..c31ce73f7583340e56da5ee0e3a066a69f4310c7 100644 (file)
@@ -469,6 +469,7 @@ public:
     static sk_sp<SkShader> MakePictureShader(sk_sp<SkPicture> src, TileMode tmx, TileMode tmy,
                                              const SkMatrix* localMatrix, const SkRect* tile);
 
+#ifdef SK_SUPPORT_LEGACY_SHADER_ASALOCALMATRIXSHADER
     /**
      *  If this shader can be represented by another shader + a localMatrix, return that shader
      *  and, if not NULL, the localMatrix. If not, return NULL and ignore the localMatrix parameter.
@@ -476,7 +477,15 @@ public:
      *  Note: the returned shader (if not NULL) will have been ref'd, and it is the responsibility
      *  of the caller to balance that with unref() when they are done.
      */
-    virtual SkShader* refAsALocalMatrixShader(SkMatrix* localMatrix) const;
+    SkShader* refAsALocalMatrixShader(SkMatrix* localMatrix) const {
+        return this->makeAsALocalMatrixShader(localMatrix).release();
+    }
+#endif
+    /**
+     *  If this shader can be represented by another shader + a localMatrix, return that shader and
+     *  the localMatrix. If not, return nullptr and ignore the localMatrix parameter.
+     */
+    virtual sk_sp<SkShader> makeAsALocalMatrixShader(SkMatrix* localMatrix) const;
 
     SK_TO_STRING_VIRT()
     SK_DEFINE_FLATTENABLE_TYPE(SkShader)
index 9308ecf2494af4a4d55c4b7b1858b44bd050b918..b27336be1a4a38b88b0e9c787bc69528ad5280b1 100644 (file)
@@ -614,6 +614,7 @@ DEFINES_ALL = [
     "SK_SUPPORT_LEGACY_SHADER_ISABITMAP",
     "SK_SUPPORT_LEGACY_XFERMODE_OBJECT",
     "SK_SUPPORT_LEGACY_COLOR_SPACE_FACTORIES",
+    "SK_SUPPORT_LEGACY_SHADER_ASALOCALMATRIXSHADER",
 ]
 
 ################################################################################
index cdd7533273c42bf1b75f8cd9b3db8b6d40572340..506fd3e71a48318d011ee8d07fd4f8a04a0193ba 100644 (file)
@@ -70,14 +70,16 @@ sk_sp<SkShader> SkShader::makeWithLocalMatrix(const SkMatrix& localMatrix) const
 
     const SkMatrix* lm = &localMatrix;
 
-    SkShader* baseShader = const_cast<SkShader*>(this);
+    sk_sp<SkShader> baseShader;
     SkMatrix otherLocalMatrix;
-    SkAutoTUnref<SkShader> proxy(this->refAsALocalMatrixShader(&otherLocalMatrix));
+    sk_sp<SkShader> proxy(this->makeAsALocalMatrixShader(&otherLocalMatrix));
     if (proxy) {
         otherLocalMatrix.preConcat(localMatrix);
         lm = &otherLocalMatrix;
-        baseShader = proxy.get();
+        baseShader = proxy;
+    } else {
+        baseShader = sk_ref_sp(const_cast<SkShader*>(this));
     }
 
-    return sk_make_sp<SkLocalMatrixShader>(baseShader, *lm);
+    return sk_make_sp<SkLocalMatrixShader>(std::move(baseShader), *lm);
 }
index 849d9af91dac383c3c4fcd0ddc1b6da71df9d84d..6bffb491fb852b2862db4146039aecdee7b30c4a 100644 (file)
@@ -16,9 +16,9 @@ class GrFragmentProcessor;
 
 class SkLocalMatrixShader : public SkShader {
 public:
-    SkLocalMatrixShader(SkShader* proxy, const SkMatrix& localMatrix)
+    SkLocalMatrixShader(sk_sp<SkShader> proxy, const SkMatrix& localMatrix)
     : INHERITED(&localMatrix)
-    , fProxyShader(SkRef(proxy))
+    , fProxyShader(std::move(proxy))
     {}
 
     GradientType asAGradient(GradientInfo* info) const override {
@@ -29,11 +29,11 @@ public:
     sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override;
 #endif
 
-    SkShader* refAsALocalMatrixShader(SkMatrix* localMatrix) const override {
+    sk_sp<SkShader> makeAsALocalMatrixShader(SkMatrix* localMatrix) const override {
         if (localMatrix) {
             *localMatrix = this->getLocalMatrix();
         }
-        return SkRef(fProxyShader.get());
+        return fProxyShader;
     }
 
     SK_TO_STRING_OVERRIDE()
@@ -58,7 +58,7 @@ protected:
 #endif
 
 private:
-    SkAutoTUnref<SkShader> fProxyShader;
+    sk_sp<SkShader> fProxyShader;
 
     typedef SkShader INHERITED;
 };
index 15d7f4cda47ce68147d07019ee91083d4165d8e3..c452d078af4acb42041eb212e2bbedaea7fcfec9 100644 (file)
@@ -230,7 +230,7 @@ sk_sp<GrFragmentProcessor> SkShader::asFragmentProcessor(const AsFPArgs&) const
 }
 #endif
 
-SkShader* SkShader::refAsALocalMatrixShader(SkMatrix*) const {
+sk_sp<SkShader> SkShader::makeAsALocalMatrixShader(SkMatrix*) const {
     return nullptr;
 }