• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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