Home | History | Annotate | Download | only in core
      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.h"
     12 #include "SkData.h"
     13 #include "SkGammas.h"
     14 #include "SkOnce.h"
     15 
     16 class SkColorSpace_XYZ : public SkColorSpace {
     17 public:
     18     const SkMatrix44* onToXYZD50() const override { return &fToXYZD50; }
     19     uint32_t onToXYZD50Hash() const override { return fToXYZD50Hash; }
     20 
     21     const SkMatrix44* onFromXYZD50() const override;
     22 
     23     bool onGammaCloseToSRGB() const override;
     24     bool onGammaIsLinear() const override;
     25     bool onIsNumericalTransferFn(SkColorSpaceTransferFn* coeffs) const override;
     26 
     27     const SkData* onProfileData() const override { return fProfileData.get(); }
     28 
     29     sk_sp<SkColorSpace> makeLinearGamma() const override;
     30     sk_sp<SkColorSpace> makeSRGBGamma() const override;
     31     sk_sp<SkColorSpace> makeColorSpin() const override;
     32 
     33     SkGammaNamed onGammaNamed() const override { return fGammaNamed; }
     34 
     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     sk_sp<SkData>          fProfileData;
     46 
     47     const SkGammaNamed     fGammaNamed;
     48     sk_sp<SkGammas>        fGammas;
     49     const SkMatrix44       fToXYZD50;
     50     uint32_t               fToXYZD50Hash;
     51 
     52     mutable SkMatrix44     fFromXYZD50;
     53     mutable SkOnce         fFromXYZOnce;
     54 
     55     mutable sk_sp<SkData>  fDstStorage;
     56     mutable const uint8_t* fToDstGammaTables[3];
     57     mutable SkOnce         fToDstGammaOnce;
     58 
     59     friend class SkColorSpace;
     60     friend class ColorSpaceXformTest;
     61 };
     62 
     63 #endif
     64