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 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; }