1 /*
2  * Copyright 2017 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 GrColorSpaceInfo_DEFINED
9 #define GrColorSpaceInfo_DEFINED
10 
11 #include "GrColorSpaceXform.h"
12 #include "GrTypes.h"
13 #include "SkColorSpace.h"
14 #include "SkRefCnt.h"
15 
16 /** Describes the color space properties of a surface context. */
17 class GrColorSpaceInfo {
18 public:
19     GrColorSpaceInfo(sk_sp<SkColorSpace>, GrPixelConfig);
20 
21     bool isLinearlyBlended() const { return fColorSpace && fColorSpace->gammaIsLinear(); }
22 
23     SkColorSpace* colorSpace() const { return fColorSpace.get(); }
24     sk_sp<SkColorSpace> refColorSpace() const { return fColorSpace; }
25 
26     GrColorSpaceXform* colorSpaceXformFromSRGB() const;
27     sk_sp<GrColorSpaceXform> refColorSpaceXformFromSRGB() const {
28         return sk_ref_sp(this->colorSpaceXformFromSRGB());
29     }
30 
31     // TODO: Remove or replace with SkColorType
32     GrPixelConfig config() const { return fConfig; }
33 
34 private:
35     sk_sp<SkColorSpace> fColorSpace;
36     mutable sk_sp<GrColorSpaceXform> fColorXformFromSRGB;
37     GrPixelConfig fConfig;
38     mutable bool fInitializedColorSpaceXformFromSRGB;
39 };
40 
41 #endif
42