diff options
author | Brian Osman <brianosman@google.com> | 2017-12-12 14:09:31 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-12-12 19:34:29 +0000 |
commit | 36703d9d368050a20764b5336534bd718fd00a6e (patch) | |
tree | c452daef0a4d61f6550741cf79d2ee4c755750c2 /src/core/SkColorSpace.cpp | |
parent | 09757b29feeb1e7a4bc73dcf07c960e06f20cd66 (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.cpp | 54 |
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; |