int main (int argc, const char * argv[]) { uint32_t displayCount; CGGetActiveDisplayList(0, NULL, &displayCount); if (displayCount != 2) { fprintf(stderr, "Error: expected exactly 2 displays, %d found\n", displayCount); exit(1); } CGDirectDisplayID activeDisplays[displayCount]; CGGetActiveDisplayList(displayCount, activeDisplays, &displayCount); const int32_t xTranslation = -CGRectGetMinX(CGDisplayBounds(activeDisplays[1])); CGDisplayConfigRef config; CGBeginDisplayConfiguration(&config); CGConfigureDisplayFadeEffect(config, 0.2, 0.2, 0, 0, 0); for (int i = 0; i < displayCount; ++i) { CGDirectDisplayID display = activeDisplays[i]; CGRect displayBounds = CGDisplayBounds(display); CGConfigureDisplayOrigin(config, display, CGRectGetMinX(displayBounds) + xTranslation, CGRectGetMinY(displayBounds)); } CGCompleteDisplayConfiguration(config, kCGConfigurePermanently); return 0; }
bool DisplayResOSX::SwitchToVideoMode(int width, int height, double refreshrate) { CGDirectDisplayID d = GetOSXDisplay(MythDisplay::GetWindowID()); CFDictionaryRef dispMode = NULL; boolean_t match = 0; // find mode that matches the desired size if (refreshrate) dispMode = CGDisplayBestModeForParametersAndRefreshRate( d, 32, width, height, (CGRefreshRate)((short)refreshrate), &match); if (!match) dispMode = CGDisplayBestModeForParameters(d, 32, width, height, &match); if (!match) dispMode = CGDisplayBestModeForParameters(d, 16, width, height, &match); if (!match) return false; // switch mode and return success CGDisplayCapture(d); CGDisplayConfigRef cfg; CGBeginDisplayConfiguration(&cfg); CGConfigureDisplayFadeEffect(cfg, 0.3f, 0.5f, 0, 0, 0); CGConfigureDisplayMode(cfg, d, dispMode); CGError err = CGCompleteDisplayConfiguration(cfg, kCGConfigureForAppOnly); CGDisplayRelease(d); return (err == kCGErrorSuccess); }
void setMainDisplay(CGDirectDisplayID targetDisplay) { int deltaX, deltaY, flag; CGDisplayErr dErr; CGDisplayCount displayCount, i; CGDirectDisplayID mainDisplay; CGDisplayCount maxDisplays = MAX_DISPLAYS; CGDirectDisplayID onlineDisplays[MAX_DISPLAYS]; CGDisplayConfigRef config; mainDisplay = CGMainDisplayID(); if (mainDisplay == targetDisplay) { exit(0); } dErr = CGGetOnlineDisplayList(maxDisplays, onlineDisplays, &displayCount); if (dErr != kCGErrorSuccess) { fprintf(stderr, "CGGetOnlineDisplayList: error %d.\n", dErr); exit(1); } flag = 0; for (i = 0; i < displayCount; i++) { CGDirectDisplayID dID = onlineDisplays[i]; if (dID == targetDisplay) { flag = 1; } } if (flag == 0) { fprintf(stderr, "No such display ID: %10p.\n", targetDisplay); exit(1); } deltaX = -CGRectGetMinX (CGDisplayBounds (targetDisplay)); deltaY = -CGRectGetMinY (CGDisplayBounds (targetDisplay)); CGBeginDisplayConfiguration (&config); for (i = 0; i < displayCount; i++) { CGDirectDisplayID dID = onlineDisplays[i]; CGConfigureDisplayOrigin (config, dID, CGRectGetMinX (CGDisplayBounds (dID)) + deltaX, CGRectGetMinY (CGDisplayBounds (dID)) + deltaY ); } CGCompleteDisplayConfiguration (config, kCGConfigureForSession); exit(0); }
unsigned int setDisplayToMode(CGDirectDisplayID display, CGDisplayModeRef mode) { CGError rc; CGDisplayConfigRef config; rc = CGBeginDisplayConfiguration(&config); if (rc != kCGErrorSuccess) { NSLog(CFSTR("Error: failed CGBeginDisplayConfiguration err(%u)"), rc); return 0; } rc = CGConfigureDisplayWithDisplayMode(config, display, mode, NULL); if (rc != kCGErrorSuccess) { NSLog(CFSTR("Error: failed CGConfigureDisplayWithDisplayMode err(%u)"), rc); return 0; } rc = CGCompleteDisplayConfiguration(config, kCGConfigurePermanently); if (rc != kCGErrorSuccess) { NSLog(CFSTR("Error: failed CGCompleteDisplayConfiguration err(%u)"), rc); return 0; } return 1; }
void UIDisplay::SwitchToMode(int Index) { if (Index < 0 || Index >= m_modes.size() || !gDisplayModes) return; int index = m_modes[Index].m_index; if (index < 0 || index >= CFArrayGetCount(gDisplayModes)) return; CGDisplayModeRef mode = (CGDisplayModeRef)CFArrayGetValueAtIndex(gDisplayModes, index); CGDisplayConfigRef config; CGBeginDisplayConfiguration(&config); CGDirectDisplayID display = GetOSXDisplay(m_widget->winId()); CGConfigureDisplayFadeEffect(config, 0.3f, 0.5f, 0, 0, 0); CGConfigureDisplayWithDisplayMode(config, display, mode, NULL); if (CGCompleteDisplayConfiguration(config, kCGConfigureForAppOnly)) LOG(VB_GENERAL, LOG_ERR, "Failed to complete display configuration"); else m_refreshRate = m_modes[Index].m_rate; }