Index: ui/gfx/color_profile_mac.mm |
diff --git a/ui/gfx/color_profile_mac.mm b/ui/gfx/color_profile_mac.mm |
index c36072d93308cee51a90ff71121c3201c9e84dcf..ce8023d8a6401252a099c966453f57fbe7234f07 100644 |
--- a/ui/gfx/color_profile_mac.mm |
+++ b/ui/gfx/color_profile_mac.mm |
@@ -5,15 +5,51 @@ |
#include "ui/gfx/color_profile.h" |
#include "base/mac/mac_util.h" |
+#include "base/mac/sdk_forward_declarations.h" |
Robert Sesek
2014/10/08 01:33:17
Do you need this #include?
Noel Gordon
2014/10/08 01:58:58
Yes, code won't compile otherwise.
Robert Sesek
2014/10/08 02:03:13
What's the error? I don't see you using any SDK fo
|
+#include "ui/gfx/mac/coordinate_conversion.h" |
+ |
+namespace { |
+ |
+NSScreen* GetNSScreenFromBounds(const gfx::Rect& bounds) { |
+ NSScreen* screen = nil; |
+ int overlap = 0; |
+ |
+ for (NSScreen* monitor in [NSScreen screens]) { |
+ gfx::Rect monitor_rect = gfx::ScreenRectFromNSRect([monitor frame]); |
+ gfx::Rect overlap_rect = gfx::IntersectRects(monitor_rect, bounds); |
+ int overlap_size = overlap_rect.width() * overlap_rect.height(); |
+ if (overlap_size > overlap) { |
+ overlap = overlap_size; |
+ screen = monitor; |
+ } |
+ } |
+ |
+ return screen; |
+} |
+ |
+} // namespace |
namespace gfx { |
bool GetDisplayColorProfile(const gfx::Rect& bounds, |
std::vector<char>* profile) { |
- if (bounds.IsEmpty()) |
+ DCHECK(profile->empty()); |
+ |
+ NSScreen* screen = GetNSScreenFromBounds(bounds); |
+ if (!screen || bounds.IsEmpty()) |
return false; |
- // TODO(noel): implement. |
- return false; |
+ NSColorSpace* color_space = [screen colorSpace]; |
+ if (!color_space) |
+ return false; |
+ |
+ if ([color_space isEqual:[NSColorSpace sRGBColorSpace]]) |
+ return true; |
+ NSData* profile_data = [color_space ICCProfileData]; |
+ const char* data = static_cast<const char*>([profile_data bytes]); |
+ size_t length = [profile_data length]; |
+ if (data && !gfx::InvalidColorProfileLength(length)) |
+ profile->assign(data, data + length); |
+ return true; |
} |
void ReadColorProfile(std::vector<char>* profile) { |