Index: ui/gfx/color_space.cc |
diff --git a/ui/gfx/color_space.cc b/ui/gfx/color_space.cc |
index 8bb9bddca8882614957505d47eceb70e18d15af9..b64e1aed0539dadb07db55dd6cb26c86fbfa3e98 100644 |
--- a/ui/gfx/color_space.cc |
+++ b/ui/gfx/color_space.cc |
@@ -8,6 +8,7 @@ |
#include "base/lazy_instance.h" |
#include "base/synchronization/lock.h" |
+#include "third_party/skia/include/core/SkColorSpace.h" |
#include "ui/gfx/icc_profile.h" |
namespace gfx { |
@@ -59,8 +60,14 @@ ColorSpace ColorSpace::CreateREC709() { |
} |
bool ColorSpace::operator==(const ColorSpace& other) const { |
- return primaries_ == other.primaries_ && transfer_ == other.transfer_ && |
- matrix_ == other.matrix_ && range_ == other.range_; |
+ if (primaries_ != other.primaries_ || transfer_ != other.transfer_ || |
+ matrix_ != other.matrix_ || range_ != other.range_) |
+ return false; |
+ if (primaries_ == PrimaryID::CUSTOM && |
+ memcmp(custom_primary_matrix_, other.custom_primary_matrix_, |
+ sizeof(custom_primary_matrix_))) |
+ return false; |
+ return true; |
} |
bool ColorSpace::operator!=(const ColorSpace& other) const { |
@@ -83,12 +90,32 @@ bool ColorSpace::operator<(const ColorSpace& other) const { |
if (range_ < other.range_) |
return true; |
if (range_ > other.range_) |
- return true; |
- |
- // TODO(hubbe): For "CUSTOM" primaries or tranfer functions, compare their |
- // coefficients here |
- |
+ return false; |
+ if (primaries_ == PrimaryID::CUSTOM) { |
+ int primary_result = |
+ memcmp(custom_primary_matrix_, other.custom_primary_matrix_, |
+ sizeof(custom_primary_matrix_)); |
+ if (primary_result < 0) |
+ return true; |
+ if (primary_result > 0) |
+ return false; |
+ } |
return false; |
} |
+sk_sp<SkColorSpace> ColorSpace::ToSkColorSpace() const { |
+ // Unspecified color spaces are represented as nullptr SkColorSpaces. |
+ if (*this == gfx::ColorSpace()) |
Justin Novosad
2016/09/20 19:09:50
Just checking... in skia, unspecified colorspace m
ccameron
2016/09/20 19:12:07
Yes. The default ctor for gfx::ColorSpace also mea
|
+ return nullptr; |
+ |
+ // TODO(crbug.com/634102): Support more than just ICC profile based color |
+ // spaces. The DCHECK here is to ensure that callers that expect a valid |
+ // result are notified of this incomplete functionality. |
+ std::vector<char> icc_data = gfx::ICCProfile::FromColorSpace(*this).GetData(); |
+ sk_sp<SkColorSpace> result = |
+ SkColorSpace::NewICC(icc_data.data(), icc_data.size()); |
+ DCHECK(result); |
+ return result; |
+} |
+ |
} // namespace gfx |