aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/core/SkShader.h13
-rw-r--r--src/core/SkColorFilterShader.cpp2
-rw-r--r--src/core/SkColorSpaceXformer.cpp6
-rw-r--r--src/core/SkColorSpaceXformer.h11
-rw-r--r--src/core/SkComposeShader.cpp5
-rw-r--r--src/core/SkComposeShader.h5
-rw-r--r--src/core/SkLightingShader.cpp3
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));
}