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 GrColorInfo_DEFINED 9 #define GrColorInfo_DEFINED 10 11 #include "include/core/SkColorSpace.h" 12 #include "include/core/SkRefCnt.h" 13 #include "include/gpu/GrTypes.h" 14 #include "src/gpu/GrColorSpaceXform.h" 15 16 /** 17 * All the info needed to interpret a color: Color type + alpha type + color space. Also caches 18 * the GrColorSpaceXform from sRGB. */ 19 class GrColorInfo { 20 public: 21 GrColorInfo() = default; 22 GrColorInfo(const GrColorInfo&); 23 GrColorInfo& operator=(const GrColorInfo&); 24 GrColorInfo(GrColorType, SkAlphaType, sk_sp<SkColorSpace>); 25 /* implicit */ GrColorInfo(const SkColorInfo&); 26 27 bool operator==(const GrColorInfo& that) const { 28 return fColorType == that.fColorType && 29 fAlphaType == that.fAlphaType && 30 SkColorSpace::Equals(fColorSpace.get(), that.fColorSpace.get()); 31 } 32 bool operator!=(const GrColorInfo& that) const { return !(*this == that); } 33 makeColorType(GrColorType ct)34 GrColorInfo makeColorType(GrColorType ct) const { 35 return GrColorInfo(ct, fAlphaType, this->refColorSpace()); 36 } 37 isLinearlyBlended()38 bool isLinearlyBlended() const { return fColorSpace && fColorSpace->gammaIsLinear(); } 39 colorSpace()40 SkColorSpace* colorSpace() const { return fColorSpace.get(); } refColorSpace()41 sk_sp<SkColorSpace> refColorSpace() const { return fColorSpace; } 42 colorSpaceXformFromSRGB()43 GrColorSpaceXform* colorSpaceXformFromSRGB() const { return fColorXformFromSRGB.get(); } refColorSpaceXformFromSRGB()44 sk_sp<GrColorSpaceXform> refColorSpaceXformFromSRGB() const { return fColorXformFromSRGB; } 45 colorType()46 GrColorType colorType() const { return fColorType; } alphaType()47 SkAlphaType alphaType() const { return fAlphaType; } 48 isAlphaOnly()49 bool isAlphaOnly() const { return GrColorTypeIsAlphaOnly(fColorType); } 50 isValid()51 bool isValid() const { 52 return fColorType != GrColorType::kUnknown && fAlphaType != kUnknown_SkAlphaType; 53 } 54 55 private: 56 sk_sp<SkColorSpace> fColorSpace; 57 sk_sp<GrColorSpaceXform> fColorXformFromSRGB; 58 GrColorType fColorType = GrColorType::kUnknown; 59 SkAlphaType fAlphaType = kUnknown_SkAlphaType; 60 }; 61 62 #endif 63