1 /* 2 * Copyright 2016 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkColorSpace_XYZ_DEFINED 9 #define SkColorSpace_XYZ_DEFINED 10 11 #include "SkColorSpace.h" 12 #include "SkData.h" 13 #include "SkGammas.h" 14 #include "SkOnce.h" 15 16 class SkColorSpace_XYZ : public SkColorSpace { 17 public: 18 const SkMatrix44* onToXYZD50() const override { return &fToXYZD50; } 19 uint32_t onToXYZD50Hash() const override { return fToXYZD50Hash; } 20 21 const SkMatrix44* onFromXYZD50() const override; 22 23 bool onGammaCloseToSRGB() const override; 24 bool onGammaIsLinear() const override; 25 bool onIsNumericalTransferFn(SkColorSpaceTransferFn* coeffs) const override; 26 27 const SkData* onProfileData() const override { return fProfileData.get(); } 28 29 sk_sp<SkColorSpace> makeLinearGamma() const override; 30 sk_sp<SkColorSpace> makeSRGBGamma() const override; 31 sk_sp<SkColorSpace> makeColorSpin() const override; 32 33 SkGammaNamed onGammaNamed() const override { return fGammaNamed; } 34 35 const SkGammas* gammas() const { return fGammas.get(); } 36 37 void toDstGammaTables(const uint8_t* tables[3], sk_sp<SkData>* storage, int numTables) const; 38 39 SkColorSpace_XYZ(SkGammaNamed gammaNamed, const SkMatrix44& toXYZ); 40 41 SkColorSpace_XYZ(SkGammaNamed gammaNamed, sk_sp<SkGammas> gammas, 42 const SkMatrix44& toXYZ, sk_sp<SkData> profileData); 43 44 private: 45 sk_sp<SkData> fProfileData; 46 47 const SkGammaNamed fGammaNamed; 48 sk_sp<SkGammas> fGammas; 49 const SkMatrix44 fToXYZD50; 50 uint32_t fToXYZD50Hash; 51 52 mutable SkMatrix44 fFromXYZD50; 53 mutable SkOnce fFromXYZOnce; 54 55 mutable sk_sp<SkData> fDstStorage; 56 mutable const uint8_t* fToDstGammaTables[3]; 57 mutable SkOnce fToDstGammaOnce; 58 59 friend class SkColorSpace; 60 friend class ColorSpaceXformTest; 61 }; 62 63 #endif 64