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 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 : fRed(std::move(red)) | 131 : fRed(std::move(red)) |
132 , fGreen(std::move(green)) | 132 , fGreen(std::move(green)) |
133 , fBlue(std::move(blue)) | 133 , fBlue(std::move(blue)) |
134 {} | 134 {} |
135 | 135 |
136 SkGammas() {} | 136 SkGammas() {} |
137 | 137 |
138 friend class SkColorSpace; | 138 friend class SkColorSpace; |
139 }; | 139 }; |
140 | 140 |
141 struct SkColorLookUpTable { | 141 struct SkColorLookUpTable : public SkRefCnt { |
142 static const uint8_t kMaxChannels = 16; | |
143 | |
144 uint8_t fInputChannels; | 142 uint8_t fInputChannels; |
145 uint8_t fOutputChannels; | 143 uint8_t fOutputChannels; |
146 uint8_t fGridPoints[kMaxChannels]; | 144 uint8_t fGridPoints[3]; |
147 std::unique_ptr<float[]> fTable; | 145 std::unique_ptr<float[]> fTable; |
148 | 146 |
149 SkColorLookUpTable() { | 147 SkColorLookUpTable() |
150 memset(this, 0, sizeof(struct SkColorLookUpTable)); | 148 : fInputChannels(0) |
| 149 , fOutputChannels(0) |
| 150 , fTable(nullptr) |
| 151 { |
| 152 fGridPoints[0] = fGridPoints[1] = fGridPoints[2] = 0; |
151 } | 153 } |
152 }; | 154 }; |
153 | 155 |
154 class SkColorSpace_Base : public SkColorSpace { | 156 class SkColorSpace_Base : public SkColorSpace { |
155 public: | 157 public: |
156 | 158 |
157 static sk_sp<SkColorSpace> NewRGB(float gammas[3], const SkMatrix44& toXYZD5
0); | 159 static sk_sp<SkColorSpace> NewRGB(float gammas[3], const SkMatrix44& toXYZD5
0); |
158 | 160 |
159 const SkGammas* gammas() const { return fGammas.get(); } | 161 const SkGammas* gammas() const { return fGammas.get(); } |
160 | 162 |
161 const SkColorLookUpTable* colorLUT() const { return fColorLUT.get(); } | 163 const SkColorLookUpTable* colorLUT() const { return fColorLUT.get(); } |
162 | 164 |
163 /** | 165 /** |
164 * Writes this object as an ICC profile. | 166 * Writes this object as an ICC profile. |
165 */ | 167 */ |
166 sk_sp<SkData> writeToICC() const; | 168 sk_sp<SkData> writeToICC() const; |
167 | 169 |
168 private: | 170 private: |
169 | 171 |
170 static sk_sp<SkColorSpace> NewRGB(GammaNamed gammaNamed, const SkMatrix44& t
oXYZD50); | 172 static sk_sp<SkColorSpace> NewRGB(GammaNamed gammaNamed, const SkMatrix44& t
oXYZD50); |
171 | 173 |
172 SkColorSpace_Base(GammaNamed gammaNamed, const SkMatrix44& toXYZ, Named name
d); | 174 SkColorSpace_Base(GammaNamed gammaNamed, const SkMatrix44& toXYZ, Named name
d); |
173 | 175 |
174 SkColorSpace_Base(SkColorLookUpTable* colorLUT, sk_sp<SkGammas> gammas, cons
t SkMatrix44& toXYZ, | 176 SkColorSpace_Base(sk_sp<SkColorLookUpTable> colorLUT, sk_sp<SkGammas> gammas
, |
175 sk_sp<SkData> profileData); | 177 const SkMatrix44& toXYZ, sk_sp<SkData> profileData); |
176 | 178 |
177 SkAutoTDelete<SkColorLookUpTable> fColorLUT; | 179 sk_sp<SkColorLookUpTable> fColorLUT; |
178 sk_sp<SkGammas> fGammas; | 180 sk_sp<SkGammas> fGammas; |
179 sk_sp<SkData> fProfileData; | 181 sk_sp<SkData> fProfileData; |
180 | 182 |
181 friend class SkColorSpace; | 183 friend class SkColorSpace; |
182 friend class ColorSpaceXformTest; | 184 friend class ColorSpaceXformTest; |
183 typedef SkColorSpace INHERITED; | 185 typedef SkColorSpace INHERITED; |
184 }; | 186 }; |
185 | 187 |
186 static inline SkColorSpace_Base* as_CSB(SkColorSpace* colorSpace) { | 188 static inline SkColorSpace_Base* as_CSB(SkColorSpace* colorSpace) { |
187 return static_cast<SkColorSpace_Base*>(colorSpace); | 189 return static_cast<SkColorSpace_Base*>(colorSpace); |
188 } | 190 } |
189 | 191 |
190 static inline const SkColorSpace_Base* as_CSB(const SkColorSpace* colorSpace) { | 192 static inline const SkColorSpace_Base* as_CSB(const SkColorSpace* colorSpace) { |
191 return static_cast<const SkColorSpace_Base*>(colorSpace); | 193 return static_cast<const SkColorSpace_Base*>(colorSpace); |
192 } | 194 } |
193 | 195 |
194 static inline SkColorSpace_Base* as_CSB(const sk_sp<SkColorSpace>& colorSpace) { | 196 static inline SkColorSpace_Base* as_CSB(const sk_sp<SkColorSpace>& colorSpace) { |
195 return static_cast<SkColorSpace_Base*>(colorSpace.get()); | 197 return static_cast<SkColorSpace_Base*>(colorSpace.get()); |
196 } | 198 } |
197 | 199 |
198 #endif | 200 #endif |
OLD | NEW |