OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef SkColorSpace_Base_DEFINED | 8 #ifndef SkColorSpace_Base_DEFINED |
9 #define SkColorSpace_Base_DEFINED | 9 #define SkColorSpace_Base_DEFINED |
10 | 10 |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 , fTableSize(0) | 74 , fTableSize(0) |
75 , fTable(nullptr) | 75 , fTable(nullptr) |
76 , fG(0.0f) | 76 , fG(0.0f) |
77 , fA(0.0f) | 77 , fA(0.0f) |
78 , fB(0.0f) | 78 , fB(0.0f) |
79 , fC(0.0f) | 79 , fC(0.0f) |
80 , fD(0.0f) | 80 , fD(0.0f) |
81 , fE(0.0f) | 81 , fE(0.0f) |
82 , fF(0.0f) | 82 , fF(0.0f) |
83 {} | 83 {} |
| 84 |
| 85 bool quickEquals(const SkGammaCurve& that) const { |
| 86 return (this->fNamed == that.fNamed) && (this->fValue == that.fValue) && |
| 87 (this->fTableSize == that.fTableSize) && (this->fTable == that.f
Table) && |
| 88 (this->fG == that.fG) && (this->fA == that.fA) && (this->fB == t
hat.fB) && |
| 89 (this->fC == that.fC) && (this->fD == that.fD) && (this->fE == t
hat.fE) && |
| 90 (this->fF == that.fF); |
| 91 } |
84 }; | 92 }; |
85 | 93 |
86 struct SkGammas : public SkRefCnt { | 94 struct SkGammas : public SkRefCnt { |
87 public: | 95 public: |
88 static SkColorSpace::GammaNamed Named(SkGammaCurve curves[3]) { | 96 static SkColorSpace::GammaNamed Named(SkGammaCurve curves[3]) { |
89 if (SkColorSpace::kLinear_GammaNamed == curves[0].fNamed && | 97 if (SkColorSpace::kLinear_GammaNamed == curves[0].fNamed && |
90 SkColorSpace::kLinear_GammaNamed == curves[1].fNamed && | 98 SkColorSpace::kLinear_GammaNamed == curves[1].fNamed && |
91 SkColorSpace::kLinear_GammaNamed == curves[2].fNamed) | 99 SkColorSpace::kLinear_GammaNamed == curves[2].fNamed) |
92 { | 100 { |
93 return SkColorSpace::kLinear_GammaNamed; | 101 return SkColorSpace::kLinear_GammaNamed; |
94 } | 102 } |
95 | 103 |
96 if (SkColorSpace::kSRGB_GammaNamed == curves[0].fNamed && | 104 if (SkColorSpace::kSRGB_GammaNamed == curves[0].fNamed && |
97 SkColorSpace::kSRGB_GammaNamed == curves[1].fNamed && | 105 SkColorSpace::kSRGB_GammaNamed == curves[1].fNamed && |
98 SkColorSpace::kSRGB_GammaNamed == curves[2].fNamed) | 106 SkColorSpace::kSRGB_GammaNamed == curves[2].fNamed) |
99 { | 107 { |
100 return SkColorSpace::kSRGB_GammaNamed; | 108 return SkColorSpace::kSRGB_GammaNamed; |
101 } | 109 } |
102 | 110 |
103 if (SkColorSpace::k2Dot2Curve_GammaNamed == curves[0].fNamed && | 111 if (SkColorSpace::k2Dot2Curve_GammaNamed == curves[0].fNamed && |
104 SkColorSpace::k2Dot2Curve_GammaNamed == curves[1].fNamed && | 112 SkColorSpace::k2Dot2Curve_GammaNamed == curves[1].fNamed && |
105 SkColorSpace::k2Dot2Curve_GammaNamed == curves[2].fNamed) | 113 SkColorSpace::k2Dot2Curve_GammaNamed == curves[2].fNamed) |
106 { | 114 { |
107 return SkColorSpace::k2Dot2Curve_GammaNamed; | 115 return SkColorSpace::k2Dot2Curve_GammaNamed; |
108 } | 116 } |
109 | 117 |
110 return SkColorSpace::kNonStandard_GammaNamed; | 118 return SkColorSpace::kNonStandard_GammaNamed; |
111 } | 119 } |
112 | 120 |
113 const SkGammaCurve& operator[](int i) { | 121 const SkGammaCurve& operator[](int i) const { |
114 SkASSERT(0 <= i && i < 3); | 122 SkASSERT(0 <= i && i < 3); |
115 return (&fRed)[i]; | 123 return (&fRed)[i]; |
116 } | 124 } |
117 | 125 |
118 const SkGammaCurve fRed; | 126 const SkGammaCurve fRed; |
119 const SkGammaCurve fGreen; | 127 const SkGammaCurve fGreen; |
120 const SkGammaCurve fBlue; | 128 const SkGammaCurve fBlue; |
121 | 129 |
122 SkGammas(SkGammaCurve red, SkGammaCurve green, SkGammaCurve blue) | 130 SkGammas(SkGammaCurve red, SkGammaCurve green, SkGammaCurve blue) |
123 : fRed(std::move(red)) | 131 : fRed(std::move(red)) |
(...skipping 17 matching lines...) Expand all Loading... |
141 SkColorLookUpTable() { | 149 SkColorLookUpTable() { |
142 memset(this, 0, sizeof(struct SkColorLookUpTable)); | 150 memset(this, 0, sizeof(struct SkColorLookUpTable)); |
143 } | 151 } |
144 }; | 152 }; |
145 | 153 |
146 class SkColorSpace_Base : public SkColorSpace { | 154 class SkColorSpace_Base : public SkColorSpace { |
147 public: | 155 public: |
148 | 156 |
149 static sk_sp<SkColorSpace> NewRGB(float gammas[3], const SkMatrix44& toXYZD5
0); | 157 static sk_sp<SkColorSpace> NewRGB(float gammas[3], const SkMatrix44& toXYZD5
0); |
150 | 158 |
151 const sk_sp<SkGammas>& gammas() const { return fGammas; } | 159 const SkGammas* gammas() const { return fGammas.get(); } |
152 | 160 |
153 SkColorLookUpTable* colorLUT() const { return fColorLUT.get(); } | 161 const SkColorLookUpTable* colorLUT() const { return fColorLUT.get(); } |
154 | 162 |
155 /** | 163 /** |
156 * Writes this object as an ICC profile. | 164 * Writes this object as an ICC profile. |
157 */ | 165 */ |
158 sk_sp<SkData> writeToICC() const; | 166 sk_sp<SkData> writeToICC() const; |
159 | 167 |
160 private: | 168 private: |
161 | 169 |
162 static sk_sp<SkColorSpace> NewRGB(GammaNamed gammaNamed, const SkMatrix44& t
oXYZD50, | 170 static sk_sp<SkColorSpace> NewRGB(GammaNamed gammaNamed, const SkMatrix44& t
oXYZD50, |
163 sk_sp<SkData> profileData); | 171 sk_sp<SkData> profileData); |
164 | 172 |
165 SkColorSpace_Base(GammaNamed gammaNamed, const SkMatrix44& toXYZ, Named name
d, | 173 SkColorSpace_Base(GammaNamed gammaNamed, const SkMatrix44& toXYZ, Named name
d, |
166 sk_sp<SkData> profileData); | 174 sk_sp<SkData> profileData); |
167 | 175 |
168 SkColorSpace_Base(SkColorLookUpTable* colorLUT, sk_sp<SkGammas> gammas, cons
t SkMatrix44& toXYZ, | 176 SkColorSpace_Base(SkColorLookUpTable* colorLUT, sk_sp<SkGammas> gammas, cons
t SkMatrix44& toXYZ, |
169 sk_sp<SkData> profileData); | 177 sk_sp<SkData> profileData); |
170 | 178 |
171 SkAutoTDelete<SkColorLookUpTable> fColorLUT; | 179 SkAutoTDelete<SkColorLookUpTable> fColorLUT; |
172 sk_sp<SkGammas> fGammas; | 180 sk_sp<SkGammas> fGammas; |
173 sk_sp<SkData> fProfileData; | 181 sk_sp<SkData> fProfileData; |
174 | 182 |
175 friend class SkColorSpace; | 183 friend class SkColorSpace; |
| 184 friend class ColorSpaceXformTest; |
176 typedef SkColorSpace INHERITED; | 185 typedef SkColorSpace INHERITED; |
177 }; | 186 }; |
178 | 187 |
179 static inline SkColorSpace_Base* as_CSB(SkColorSpace* colorSpace) { | 188 static inline SkColorSpace_Base* as_CSB(SkColorSpace* colorSpace) { |
180 return static_cast<SkColorSpace_Base*>(colorSpace); | 189 return static_cast<SkColorSpace_Base*>(colorSpace); |
181 } | 190 } |
182 | 191 |
183 static inline const SkColorSpace_Base* as_CSB(const SkColorSpace* colorSpace) { | 192 static inline const SkColorSpace_Base* as_CSB(const SkColorSpace* colorSpace) { |
184 return static_cast<const SkColorSpace_Base*>(colorSpace); | 193 return static_cast<const SkColorSpace_Base*>(colorSpace); |
185 } | 194 } |
186 | 195 |
187 static inline SkColorSpace_Base* as_CSB(const sk_sp<SkColorSpace>& colorSpace) { | 196 static inline SkColorSpace_Base* as_CSB(const sk_sp<SkColorSpace>& colorSpace) { |
188 return static_cast<SkColorSpace_Base*>(colorSpace.get()); | 197 return static_cast<SkColorSpace_Base*>(colorSpace.get()); |
189 } | 198 } |
190 | 199 |
191 #endif | 200 #endif |
OLD | NEW |