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_Base.h" 12 #include "SkData.h" 13 #include "SkOnce.h" 14 15 class SkColorSpace_XYZ : public SkColorSpace_Base { 16 public: toXYZD50()17 const SkMatrix44* toXYZD50() const override { return &fToXYZD50; } toXYZD50Hash()18 uint32_t toXYZD50Hash() const override { return fToXYZD50Hash; } 19 20 const SkMatrix44* fromXYZD50() const override; 21 22 bool onGammaCloseToSRGB() const override; 23 24 bool onGammaIsLinear() const override; 25 26 bool onIsNumericalTransferFn(SkColorSpaceTransferFn* coeffs) const override; 27 type()28 Type type() const override { return Type::kXYZ; } 29 30 sk_sp<SkColorSpace> makeLinearGamma() const override; 31 sk_sp<SkColorSpace> makeSRGBGamma() const override; 32 gammaNamed()33 SkGammaNamed gammaNamed() const { return fGammaNamed; } 34 gammas()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 const SkGammaNamed fGammaNamed; 46 sk_sp<SkGammas> fGammas; 47 const SkMatrix44 fToXYZD50; 48 uint32_t fToXYZD50Hash; 49 50 mutable SkMatrix44 fFromXYZD50; 51 mutable SkOnce fFromXYZOnce; 52 53 mutable sk_sp<SkData> fDstStorage; 54 mutable const uint8_t* fToDstGammaTables[3]; 55 mutable SkOnce fToDstGammaOnce; 56 57 friend class SkColorSpace; 58 friend class SkColorSpace_Base; 59 friend class ColorSpaceXformTest; 60 typedef SkColorSpace_Base INHERITED; 61 }; 62 63 #endif 64