Skip to content

Instantly share code, notes, and snippets.

@aont
Created September 30, 2012 16:57
Show Gist options
  • Select an option

  • Save aont/3807585 to your computer and use it in GitHub Desktop.

Select an option

Save aont/3807585 to your computer and use it in GitHub Desktop.
Mac Display
#include <ApplicationServices/ApplicationServices.h>
#include <vector>
// void MyDisplaySwitchToMode (CGDirectDisplayID display, CFDictionaryRef mode)
// {
// CGDisplayConfigRef config; // 1
// CGBeginDisplayConfiguration (&config); // 2
// CGConfigureDisplayMode (config, display, mode); // 3
// CGCompleteDisplayConfiguration (config, kCGConfigureForSession ); // 5
// }
int main(int argc, char * argv[])
{
CGError cgret;
uint32_t num_displays = 0;
cgret = CGGetActiveDisplayList(0, NULL, &num_displays);
//cgret = CGGetOnlineDisplayList(0, NULL, &num_displays);
std::vector<CGDirectDisplayID> displays(num_displays);
cgret = CGGetActiveDisplayList(num_displays, displays.begin().base(), &num_displays);
//cgret = CGGetOnlineDisplayList(num_displays, displays.begin().base(), &num_displays);
fprintf(stderr, "num_displays: %d\n", num_displays);
for(uint32_t d=0; d<num_displays; ++d) {
fprintf(stderr, "display id: %u\n", displays[d]);
CGDisplayModeRef mode = CGDisplayCopyDisplayMode(displays[d]);
uint32_t ioflags = CGDisplayModeGetIOFlags(mode);
fprintf(stderr, " ioflags: %d\n", ioflags);
bool gui = CGDisplayModeIsUsableForDesktopGUI(mode);
fprintf(stderr, " gui: %d\n", gui);
CGDisplayModeRelease(mode);
}
// cgret = CGDisplayCaptureWithOptions(displays[1], 0);
// sleep(10);
// cgret = CGDisplayRelease (displays[1]);
if(false) {
fprintf(stderr, "all display modes\n");
CFIndex index, count;
CFArrayRef modeList;
modeList = CGDisplayCopyAllDisplayModes (displays[1], NULL);
count = CFArrayGetCount (modeList);
for (index = 0; index < count; index++) {
CGDisplayModeRef mode;
mode = (CGDisplayModeRef)CFArrayGetValueAtIndex (modeList, index);
uint32_t ioflags = CGDisplayModeGetIOFlags(mode);
fprintf(stderr, " ioflags: %d\n", ioflags);
bool gui = CGDisplayModeIsUsableForDesktopGUI(mode);
fprintf(stderr, " gui: %d\n", gui);
if(ioflags==513) {
// CGDisplaySetDisplayMode(displays[1], mode, NULL);
// sleep(10);
// CGDisplayModeRelease(mode);
// break;
}
else {
CGDisplayModeRelease(mode);
}
}
CFRelease(modeList);
}
CGDisplayConfigRef config;
CGDisplayErr err = noErr;
err = CGBeginDisplayConfiguration(&config);
err = CGConfigureDisplayMirrorOfDisplay(config, displays[0], kCGNullDirectDisplay );
err = CGCompleteDisplayConfiguration(config, kCGConfigurePermanently);
// int h = 1280; //horizontal resolution
// int v = 800; //vertical resolution
// CGDirectDisplayID mainDisplay; //ID of main display
// mainDisplay = CGMainDisplayID();
// CFDictionaryRef switchMode; //mode to swich to
// switchMode = CGDisplayBestModeForParameters(displays[1], 32, 0, 0, NULL);
// MyDisplaySwitchToMode(displays[1], switchMode);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment