aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorSpace_XYZ.h
blob: 2ad2e38b1bde4c110ef3a8ef18b0fe4a6126fb7e (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
/*
 * 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.h"
#include "SkData.h"
#include "SkGammas.h"
#include "SkOnce.h"

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

    const SkData* onProfileData() const override { return fProfileData.get(); }

    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:
    sk_sp<SkData>          fProfileData;

    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 ColorSpaceXformTest;
};

#endif