aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorSpace_XYZ.h
blob: 4e12a5a4b5d6df2bf9959596b2a4d6305ed01fe0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
 * 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_Base.h"
#include "SkData.h"
#include "SkOnce.h"

class SkColorSpace_XYZ : public SkColorSpace_Base {
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;

    Type type() const override { return Type::kXYZ; }

    sk_sp<SkColorSpace> makeLinearGamma() const override;
    sk_sp<SkColorSpace> makeSRGBGamma() const override;
    sk_sp<SkColorSpace> 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<SkData>* storage, int numTables) const;

    SkColorSpace_XYZ(SkGammaNamed gammaNamed, const SkMatrix44& toXYZ);

    SkColorSpace_XYZ(SkGammaNamed gammaNamed, sk_sp<SkGammas> gammas,
                     const SkMatrix44& toXYZ, sk_sp<SkData> profileData);

private:
    const SkGammaNamed     fGammaNamed;
    sk_sp<SkGammas>        fGammas;
    const SkMatrix44       fToXYZD50;
    uint32_t               fToXYZD50Hash;

    mutable SkMatrix44     fFromXYZD50;
    mutable SkOnce         fFromXYZOnce;

    mutable sk_sp<SkData>  fDstStorage;
    mutable const uint8_t* fToDstGammaTables[3];
    mutable SkOnce         fToDstGammaOnce;

    friend class SkColorSpace;
    friend class SkColorSpace_Base;
    friend class ColorSpaceXformTest;
    typedef SkColorSpace_Base INHERITED;
};

#endif