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 #include "SkColorSpace.h" | 8 #include "SkColorSpace.h" |
9 #include "SkColorSpace_Base.h" | 9 #include "SkColorSpace_Base.h" |
10 #include "SkColorSpacePriv.h" | 10 #include "SkColorSpacePriv.h" |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
309 uint32_t profileSize = *((uint32_t*) data); | 309 uint32_t profileSize = *((uint32_t*) data); |
310 data = SkTAddOffset<const void>(data, sizeof(uint32_t)); | 310 data = SkTAddOffset<const void>(data, sizeof(uint32_t)); |
311 length -= sizeof(uint32_t); | 311 length -= sizeof(uint32_t); |
312 if (length < profileSize) { | 312 if (length < profileSize) { |
313 return nullptr; | 313 return nullptr; |
314 } | 314 } |
315 | 315 |
316 return NewICC(data, profileSize); | 316 return NewICC(data, profileSize); |
317 } | 317 } |
318 | 318 |
319 bool SkColorSpace::Equals(SkColorSpace* src, SkColorSpace* dst) { | |
320 if (src == dst) { | |
321 return true; | |
322 } | |
323 | |
324 if (!src || !dst) { | |
325 return false; | |
326 } | |
327 | |
328 switch (src->fNamed) { | |
329 case kSRGB_Named: | |
330 case kAdobeRGB_Named: | |
331 // No need to check for a match. sRGB and Adobe RGB are once ptrs - if they | |
332 // were a match, we would have already returned. | |
mtklein
2016/07/29 15:43:48
This seems fragile. Unless you've got a way to as
msarett
2016/07/29 16:16:01
True, that also seems nicer to read, sgtm.
| |
333 return false; | |
334 case kUnknown_Named: | |
335 if (kUnknown_Named != dst->fNamed) { | |
336 return false; | |
337 } | |
338 break; | |
339 } | |
340 | |
341 SkData* srcData = as_CSB(src)->fProfileData.get(); | |
342 SkData* dstData = as_CSB(dst)->fProfileData.get(); | |
343 if (srcData || dstData) { | |
344 if (srcData && dstData) { | |
345 if (srcData->size() != dstData->size()) { | |
mtklein
2016/07/29 15:43:48
Maybe,
return srcData->size() == dstData->size()
msarett
2016/07/29 16:16:01
Done.
| |
346 return false; | |
347 } | |
348 | |
349 return !memcmp(srcData->data(), dstData->data(), srcData->size()); | |
350 } | |
351 | |
352 return false; | |
353 } | |
354 | |
355 switch (src->fGammaNamed) { | |
356 case kSRGB_GammaNamed: | |
357 case k2Dot2Curve_GammaNamed: | |
358 case kLinear_GammaNamed: | |
359 return (src->fGammaNamed == dst->fGammaNamed) && (src->fToXYZD50 == dst->fToXYZD50); | |
360 default: | |
361 // If |src| does not have a named gamma, fProfileData should be non- null. | |
mtklein
2016/07/29 15:43:48
Does it make sense to just move this before the fP
msarett
2016/07/29 16:16:01
Can't do that because a kNonStandard_GammaNamed is
| |
362 SkASSERT(false); | |
363 return false; | |
364 } | |
365 } | |
366 | |
319 bool SkColorSpace::gammasAreMatching() const { | 367 bool SkColorSpace::gammasAreMatching() const { |
320 const SkGammas* gammas = as_CSB(this)->gammas(); | 368 const SkGammas* gammas = as_CSB(this)->gammas(); |
321 SkASSERT(gammas); | 369 SkASSERT(gammas); |
322 return gammas->fRedType == gammas->fGreenType && gammas->fGreenType == gamma s->fBlueType && | 370 return gammas->fRedType == gammas->fGreenType && gammas->fGreenType == gamma s->fBlueType && |
323 gammas->fRedData == gammas->fGreenData && gammas->fGreenData == gamma s->fBlueData; | 371 gammas->fRedData == gammas->fGreenData && gammas->fGreenData == gamma s->fBlueData; |
324 } | 372 } |
325 | 373 |
326 bool SkColorSpace::gammasAreNamed() const { | 374 bool SkColorSpace::gammasAreNamed() const { |
327 const SkGammas* gammas = as_CSB(this)->gammas(); | 375 const SkGammas* gammas = as_CSB(this)->gammas(); |
328 SkASSERT(gammas); | 376 SkASSERT(gammas); |
(...skipping 18 matching lines...) Expand all Loading... | |
347 gammas->fBlueType == SkGammas::Type::kTable_Type; | 395 gammas->fBlueType == SkGammas::Type::kTable_Type; |
348 } | 396 } |
349 | 397 |
350 bool SkColorSpace::gammasAreParams() const { | 398 bool SkColorSpace::gammasAreParams() const { |
351 const SkGammas* gammas = as_CSB(this)->gammas(); | 399 const SkGammas* gammas = as_CSB(this)->gammas(); |
352 SkASSERT(gammas); | 400 SkASSERT(gammas); |
353 return gammas->fRedType == SkGammas::Type::kParam_Type && | 401 return gammas->fRedType == SkGammas::Type::kParam_Type && |
354 gammas->fGreenType == SkGammas::Type::kParam_Type && | 402 gammas->fGreenType == SkGammas::Type::kParam_Type && |
355 gammas->fBlueType == SkGammas::Type::kParam_Type; | 403 gammas->fBlueType == SkGammas::Type::kParam_Type; |
356 } | 404 } |
OLD | NEW |