/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkColorSpace_XYZ_DEFINED #define SkColorSpace_XYZ_DEFINED #include "SkColorSpace.h" #include "SkData.h" #include "SkGammas.h" #include "SkOnce.h" class SkColorSpace_XYZ : public SkColorSpace { public: const SkMatrix44* onToXYZD50() const override { return &fToXYZD50; } uint32_t onToXYZD50Hash() const override { return fToXYZD50Hash; } const SkMatrix44* onFromXYZD50() const override; bool onGammaCloseToSRGB() const override; bool onGammaIsLinear() const override; bool onIsNumericalTransferFn(SkColorSpaceTransferFn* coeffs) const override; const SkData* onProfileData() const override { return fProfileData.get(); } sk_sp makeLinearGamma() const override; sk_sp makeSRGBGamma() const override; sk_sp makeColorSpin() const override; SkGammaNamed onGammaNamed() const override { return fGammaNamed; } const SkGammas* gammas() const { return fGammas.get(); } void toDstGammaTables(const uint8_t* tables[3], sk_sp* storage, int numTables) const; SkColorSpace_XYZ(SkGammaNamed gammaNamed, const SkMatrix44& toXYZ); SkColorSpace_XYZ(SkGammaNamed gammaNamed, sk_sp gammas, const SkMatrix44& toXYZ, sk_sp profileData); private: sk_sp fProfileData; const SkGammaNamed fGammaNamed; sk_sp fGammas; const SkMatrix44 fToXYZD50; uint32_t fToXYZD50Hash; mutable SkMatrix44 fFromXYZD50; mutable SkOnce fFromXYZOnce; friend class SkColorSpace; friend class ColorSpaceXformTest; }; #endif