aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorSpace.cpp
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2017-12-12 14:09:31 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-12 19:34:29 +0000
commit36703d9d368050a20764b5336534bd718fd00a6e (patch)
treec452daef0a4d61f6550741cf79d2ee4c755750c2 /src/core/SkColorSpace.cpp
parent09757b29feeb1e7a4bc73dcf07c960e06f20cd66 (diff)
Push much of the SkColorSpace_Base interface up to SkColorSpace
Some pieces still remain, but the next step looks less mechanical, so I wanted to land this piece independently. Bug: skia: Change-Id: Ie63afcfa08af2f6e4996911fa2225c43441dbfb2 Reviewed-on: https://skia-review.googlesource.com/84120 Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/core/SkColorSpace.cpp')
-rw-r--r--src/core/SkColorSpace.cpp54
1 files changed, 33 insertions, 21 deletions
diff --git a/src/core/SkColorSpace.cpp b/src/core/SkColorSpace.cpp
index 5d22a18718..06ec26d101 100644
--- a/src/core/SkColorSpace.cpp
+++ b/src/core/SkColorSpace.cpp
@@ -235,27 +235,31 @@ sk_sp<SkColorSpace> SkColorSpace::MakeSRGBLinear() {
///////////////////////////////////////////////////////////////////////////////////////////////////
SkColorSpace::Type SkColorSpace::type() const {
- SkMatrix44 m(SkMatrix44::kUninitialized_Constructor);
- if (this->toXYZD50(&m)) {
- return m.isScale() ? kGray_Type : kRGB_Type;
+ const SkMatrix44* m = this->toXYZD50();
+ if (m) {
+ return m->isScale() ? kGray_Type : kRGB_Type;
}
- return as_CSB(this)->onIsCMYK() ? kCMYK_Type : kRGB_Type;
+ return this->onIsCMYK() ? kCMYK_Type : kRGB_Type;
+}
+
+SkGammaNamed SkColorSpace::gammaNamed() const {
+ return this->onGammaNamed();
}
bool SkColorSpace::gammaCloseToSRGB() const {
- return as_CSB(this)->onGammaCloseToSRGB();
+ return this->onGammaCloseToSRGB();
}
bool SkColorSpace::gammaIsLinear() const {
- return as_CSB(this)->onGammaIsLinear();
+ return this->onGammaIsLinear();
}
bool SkColorSpace::isNumericalTransferFn(SkColorSpaceTransferFn* fn) const {
- return as_CSB(this)->onIsNumericalTransferFn(fn);
+ return this->onIsNumericalTransferFn(fn);
}
bool SkColorSpace::toXYZD50(SkMatrix44* toXYZD50) const {
- const SkMatrix44* matrix = as_CSB(this)->toXYZD50();
+ const SkMatrix44* matrix = this->onToXYZD50();
if (matrix) {
*toXYZD50 = *matrix;
return true;
@@ -264,6 +268,18 @@ bool SkColorSpace::toXYZD50(SkMatrix44* toXYZD50) const {
return false;
}
+const SkMatrix44* SkColorSpace::toXYZD50() const {
+ return this->onToXYZD50();
+}
+
+const SkMatrix44* SkColorSpace::fromXYZD50() const {
+ return this->onFromXYZD50();
+}
+
+uint32_t SkColorSpace::toXYZD50Hash() const {
+ return this->onToXYZD50Hash();
+}
+
bool SkColorSpace::isSRGB() const {
return srgb() == this;
}
@@ -331,7 +347,7 @@ size_t SkColorSpace::writeToMemory(void* memory) const {
SkASSERT(SkColorSpace_Base::Type::kXYZ == as_CSB(this)->type());
const SkColorSpace_XYZ* thisXYZ = static_cast<const SkColorSpace_XYZ*>(this);
// If we have a named profile, only write the enum.
- const SkGammaNamed gammaNamed = thisXYZ->gammaNamed();
+ const SkGammaNamed gammaNamed = this->gammaNamed();
if (this == srgb()) {
if (memory) {
*((ColorSpaceHeader*) memory) = ColorSpaceHeader::Pack(
@@ -362,7 +378,7 @@ size_t SkColorSpace::writeToMemory(void* memory) const {
ColorSpaceHeader::Pack(k0_Version, 0, gammaNamed,
ColorSpaceHeader::kMatrix_Flag);
memory = SkTAddOffset<void>(memory, sizeof(ColorSpaceHeader));
- thisXYZ->toXYZD50()->as3x4RowMajorf((float*) memory);
+ this->toXYZD50()->as3x4RowMajorf((float*) memory);
}
return sizeof(ColorSpaceHeader) + 12 * sizeof(float);
}
@@ -377,7 +393,7 @@ size_t SkColorSpace::writeToMemory(void* memory) const {
if (memory) {
*((ColorSpaceHeader*) memory) =
- ColorSpaceHeader::Pack(k0_Version, 0, thisXYZ->fGammaNamed,
+ ColorSpaceHeader::Pack(k0_Version, 0, gammaNamed,
ColorSpaceHeader::kTransferFn_Flag);
memory = SkTAddOffset<void>(memory, sizeof(ColorSpaceHeader));
@@ -390,7 +406,7 @@ size_t SkColorSpace::writeToMemory(void* memory) const {
*(((float*) memory) + 6) = gammas->params(0).fG;
memory = SkTAddOffset<void>(memory, 7 * sizeof(float));
- thisXYZ->fToXYZD50.as3x4RowMajorf((float*) memory);
+ this->toXYZD50()->as3x4RowMajorf((float*) memory);
}
return sizeof(ColorSpaceHeader) + 19 * sizeof(float);
@@ -517,21 +533,17 @@ bool SkColorSpace::Equals(const SkColorSpace* src, const SkColorSpace* dst) {
return false;
}
- // profiles are mandatory for A2B0 color spaces
- SkASSERT(as_CSB(src)->type() == SkColorSpace_Base::Type::kXYZ);
- const SkColorSpace_XYZ* srcXYZ = static_cast<const SkColorSpace_XYZ*>(src);
- const SkColorSpace_XYZ* dstXYZ = static_cast<const SkColorSpace_XYZ*>(dst);
-
- if (srcXYZ->gammaNamed() != dstXYZ->gammaNamed()) {
+ // Profiles are mandatory for A2B0 color spaces, so these must be XYZ
+ if (src->gammaNamed() != dst->gammaNamed()) {
return false;
}
- switch (srcXYZ->gammaNamed()) {
+ switch (src->gammaNamed()) {
case kSRGB_SkGammaNamed:
case k2Dot2Curve_SkGammaNamed:
case kLinear_SkGammaNamed:
- if (srcXYZ->toXYZD50Hash() == dstXYZ->toXYZD50Hash()) {
- SkASSERT(*srcXYZ->toXYZD50() == *dstXYZ->toXYZD50() && "Hash collision");
+ if (src->toXYZD50Hash() == dst->toXYZD50Hash()) {
+ SkASSERT(*src->toXYZD50() == *dst->toXYZD50() && "Hash collision");
return true;
}
return false;