Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Unified Diff: ui/gfx/color_profile_mac.mm

Issue 612613002: ui/gfx/color_profile: implement GetDisplayColorProfile on mac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add sRGB ui/gfx/color_profile.h comment. Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gfx/color_profile.h ('k') | ui/gfx/color_profile_mac_unittest.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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) {
« no previous file with comments | « ui/gfx/color_profile.h ('k') | ui/gfx/color_profile_mac_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698