diff options
-rw-r--r-- | include/core/SkShader.h | 13 | ||||
-rw-r--r-- | src/core/SkColorFilterShader.cpp | 2 | ||||
-rw-r--r-- | src/core/SkColorSpaceXformer.cpp | 6 | ||||
-rw-r--r-- | src/core/SkColorSpaceXformer.h | 11 | ||||
-rw-r--r-- | src/core/SkComposeShader.cpp | 5 | ||||
-rw-r--r-- | src/core/SkComposeShader.h | 5 | ||||
-rw-r--r-- | src/core/SkLightingShader.cpp | 3 |
7 files changed, 24 insertions, 21 deletions
diff --git a/include/core/SkShader.h b/include/core/SkShader.h index 4749dc77af..cee7933d67 100644 --- a/include/core/SkShader.h +++ b/include/core/SkShader.h @@ -511,17 +511,12 @@ protected: } private: - // This is essentially const, but not officially so it can be modified in - // constructors. + // This is essentially const, but not officially so it can be modified in constructors. SkMatrix fLocalMatrix; - // So the SkLocalMatrixShader can whack fLocalMatrix in its SkReadBuffer constructor. - friend class SkLocalMatrixShader; - friend class SkBitmapProcLegacyShader; // for computeTotalInverse() - friend class SkComposeShader; - friend class SkColorFilterShader; - friend class SkColorSpaceXformer; - friend class SkLightingShaderImpl; + friend class SkLocalMatrixShader; // sets fLocalMatrix in SkReadBuffer constructor + friend class SkBitmapProcLegacyShader; // calls computeTotalInverse() + friend class SkColorSpaceXformer; // calls makeColorSpace() typedef SkFlattenable INHERITED; }; diff --git a/src/core/SkColorFilterShader.cpp b/src/core/SkColorFilterShader.cpp index bfe74611cd..6569e1379a 100644 --- a/src/core/SkColorFilterShader.cpp +++ b/src/core/SkColorFilterShader.cpp @@ -64,7 +64,7 @@ SkShader::Context* SkColorFilterShader::onMakeContext(const ContextRec& rec, } sk_sp<SkShader> SkColorFilterShader::onMakeColorSpace(SkColorSpaceXformer* xformer) const { - return fShader->makeColorSpace(xformer)->makeWithColorFilter(xformer->apply(fFilter.get())); + return xformer->apply(fShader.get())->makeWithColorFilter(xformer->apply(fFilter.get())); } SkColorFilterShader::FilterShaderContext::FilterShaderContext( diff --git a/src/core/SkColorSpaceXformer.cpp b/src/core/SkColorSpaceXformer.cpp index a51e2e6b41..f5f22a18b1 100644 --- a/src/core/SkColorSpaceXformer.cpp +++ b/src/core/SkColorSpaceXformer.cpp @@ -52,6 +52,10 @@ sk_sp<SkImageFilter> SkColorSpaceXformer::apply(const SkImageFilter* imageFilter return imageFilter->makeColorSpace(this); } +sk_sp<SkShader> SkColorSpaceXformer::apply(const SkShader* shader) { + return shader->makeColorSpace(this); +} + void SkColorSpaceXformer::apply(SkColor* xformed, const SkColor* srgb, int n) { SkAssertResult(fFromSRGB->apply(SkColorSpaceXform::kBGRA_8888_ColorFormat, xformed, SkColorSpaceXform::kBGRA_8888_ColorFormat, srgb, @@ -73,7 +77,7 @@ SkPaint SkColorSpaceXformer::apply(const SkPaint& src) { } if (auto shader = src.getShader()) { - dst.setShader(shader->makeColorSpace(this)); + dst.setShader(this->apply(shader)); } if (auto cf = src.getColorFilter()) { diff --git a/src/core/SkColorSpaceXformer.h b/src/core/SkColorSpaceXformer.h index 914e83932b..92d9260fa7 100644 --- a/src/core/SkColorSpaceXformer.h +++ b/src/core/SkColorSpaceXformer.h @@ -16,11 +16,12 @@ class SkColorSpaceXformer : public SkNoncopyable { public: static std::unique_ptr<SkColorSpaceXformer> Make(sk_sp<SkColorSpace> dst); - sk_sp<SkImage> apply(const SkImage* src); - sk_sp<SkImage> apply(const SkBitmap& bitmap); - sk_sp<SkColorFilter> apply(const SkColorFilter* filter); - sk_sp<SkImageFilter> apply(const SkImageFilter* filter); - SkPaint apply(const SkPaint& src); + sk_sp<SkImage> apply(const SkImage*); + sk_sp<SkImage> apply(const SkBitmap&); + sk_sp<SkColorFilter> apply(const SkColorFilter*); + sk_sp<SkImageFilter> apply(const SkImageFilter*); + sk_sp<SkShader> apply(const SkShader*); + SkPaint apply(const SkPaint&); void apply(SkColor dst[], const SkColor src[], int n); SkColor apply(SkColor srgb); diff --git a/src/core/SkComposeShader.cpp b/src/core/SkComposeShader.cpp index dd95c3edb3..9cb16addc6 100644 --- a/src/core/SkComposeShader.cpp +++ b/src/core/SkComposeShader.cpp @@ -96,6 +96,11 @@ SkShader::Context* SkComposeShader::onMakeContext( return alloc->make<ComposeShaderContext>(*this, rec, contextA, contextB); } +sk_sp<SkShader> SkComposeShader::onMakeColorSpace(SkColorSpaceXformer* xformer) const { + return SkShader::MakeComposeShader(xformer->apply(fShaderA.get()), + xformer->apply(fShaderB.get()), fMode); +} + SkComposeShader::ComposeShaderContext::ComposeShaderContext( const SkComposeShader& shader, const ContextRec& rec, SkShader::Context* contextA, SkShader::Context* contextB) diff --git a/src/core/SkComposeShader.h b/src/core/SkComposeShader.h index d5905b7846..be39393923 100644 --- a/src/core/SkComposeShader.h +++ b/src/core/SkComposeShader.h @@ -70,10 +70,7 @@ protected: SkComposeShader(SkReadBuffer&); void flatten(SkWriteBuffer&) const override; Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override; - sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override { - return SkShader::MakeComposeShader(fShaderA->makeColorSpace(xformer), - fShaderB->makeColorSpace(xformer), fMode); - } + sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override; private: sk_sp<SkShader> fShaderA; diff --git a/src/core/SkLightingShader.cpp b/src/core/SkLightingShader.cpp index 0442913025..ca370b0a3a 100644 --- a/src/core/SkLightingShader.cpp +++ b/src/core/SkLightingShader.cpp @@ -9,6 +9,7 @@ #include "SkBitmapProcShader.h" #include "SkBitmapProcState.h" #include "SkColor.h" +#include "SkColorSpaceXformer.h" #include "SkEmptyShader.h" #include "SkLightingShader.h" #include "SkMathPriv.h" @@ -458,7 +459,7 @@ SkShader::Context* SkLightingShaderImpl::onMakeContext( sk_sp<SkShader> SkLightingShaderImpl::onMakeColorSpace(SkColorSpaceXformer* xformer) const { sk_sp<SkShader> xformedDiffuseShader = - fDiffuseShader ? fDiffuseShader->makeColorSpace(xformer) : nullptr; + fDiffuseShader ? xformer->apply(fDiffuseShader.get()) : nullptr; return SkLightingShader::Make(std::move(xformedDiffuseShader), fNormalSource, fLights->makeColorSpace(xformer)); } |