| Index: base/sys_info_posix.cc
|
| ===================================================================
|
| --- base/sys_info_posix.cc (revision 26002)
|
| +++ base/sys_info_posix.cc (working copy)
|
| @@ -13,6 +13,7 @@
|
| #include <unistd.h>
|
|
|
| #if defined(OS_MACOSX)
|
| +#include <ApplicationServices/ApplicationServices.h>
|
| #include <mach/mach_host.h>
|
| #include <mach/mach_init.h>
|
| #endif
|
| @@ -142,13 +143,59 @@
|
|
|
| // static
|
| void SysInfo::GetPrimaryDisplayDimensions(int* width, int* height) {
|
| +#if defined(OS_MACOSX)
|
| + CGDirectDisplayID main_display = CGMainDisplayID();
|
| + if (width)
|
| + *width = CGDisplayPixelsWide(main_display);
|
| + if (height)
|
| + *height = CGDisplayPixelsHigh(main_display);
|
| +#else
|
| + // TODO(port): http://crbug.com/21732
|
| NOTIMPLEMENTED();
|
| + if (width)
|
| + *width = 0;
|
| + if (height)
|
| + *height = 0;
|
| +#endif
|
| }
|
|
|
| // static
|
| int SysInfo::DisplayCount() {
|
| +#if defined(OS_MACOSX)
|
| + // Don't just return the number of online displays. It includes displays
|
| + // that mirror other displays, which are not desired in the count. It's
|
| + // tempting to use the count returned by CGGetActiveDisplayList, but active
|
| + // displays exclude sleeping displays, and those are desired in the count.
|
| +
|
| + // It would be ridiculous to have this many displays connected, but
|
| + // CGDirectDisplayID is just an integer, so supporting up to this many
|
| + // doesn't hurt.
|
| + CGDirectDisplayID online_displays[128];
|
| + CGDisplayCount online_display_count = 0;
|
| + if (CGGetOnlineDisplayList(arraysize(online_displays),
|
| + online_displays,
|
| + &online_display_count) != kCGErrorSuccess) {
|
| + // 1 is a reasonable assumption.
|
| + return 1;
|
| + }
|
| +
|
| + int display_count = 0;
|
| + for (CGDisplayCount online_display_index = 0;
|
| + online_display_index < online_display_count;
|
| + ++online_display_index) {
|
| + CGDirectDisplayID online_display = online_displays[online_display_index];
|
| + if (CGDisplayMirrorsDisplay(online_display) == kCGNullDirectDisplay) {
|
| + // If this display doesn't mirror any other, include it in the count.
|
| + ++display_count;
|
| + }
|
| + }
|
| +
|
| + return display_count;
|
| +#else
|
| + // TODO(port): http://crbug.com/21732
|
| NOTIMPLEMENTED();
|
| return 1;
|
| +#endif
|
| }
|
|
|
| // static
|
|
|