Line data Source code
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 0 : class SkColorSpace_XYZ : public SkColorSpace_Base {
16 : public:
17 0 : const SkMatrix44* toXYZD50() const override { return &fToXYZD50; }
18 0 : 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 :
28 0 : Type type() const override { return Type::kXYZ; }
29 :
30 : sk_sp<SkColorSpace> makeLinearGamma() override;
31 : sk_sp<SkColorSpace> makeSRGBGamma() override;
32 :
33 0 : SkGammaNamed gammaNamed() const { return fGammaNamed; }
34 :
35 0 : 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
|