bool DisplayManagerWin::setDisplayMode(int display, int mode) { DEVMODEW modeInfo; if (!isValidDisplayMode(display, mode)) return false; if (getModeInfo(display, mode, modeInfo)) { modeInfo.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY | DM_DISPLAYFLAGS; LONG rc = ChangeDisplaySettingsExW((LPCWSTR)m_displayAdapters[display].utf16(), &modeInfo, NULL, CDS_FULLSCREEN, NULL); if (rc != DISP_CHANGE_SUCCESSFUL) { QLOG_ERROR() << "Failed to changed DisplayMode, error" << rc; return false; } else { return true; } } return false; }
bool DisplayManagerRPI::setDisplayMode(int display, int mode) { if (!isValidDisplayMode(display, mode)) return false; HDMI_PROPERTY_PARAM_T property; property.property = HDMI_PROPERTY_PIXEL_CLOCK_TYPE; property.param1 = (mode % 2) ? HDMI_PIXEL_CLOCK_TYPE_NTSC : HDMI_PIXEL_CLOCK_TYPE_PAL; property.param2 = 0; vc_tv_hdmi_set_property(&property); TV_SUPPORTED_MODE_NEW_T* tvmode = &m_modes[mode / 2]; bool ret = vc_tv_hdmi_power_on_explicit_new(HDMI_MODE_HDMI, (HDMI_RES_GROUP_T)tvmode->group, tvmode->code) == 0; if (!ret) { QLOG_ERROR() << "Failed to switch display mode" << ret; } return ret; }
bool DisplayManagerOSX::setDisplayMode(int display, int mode) { if (!isValidDisplayMode(display, mode) || !m_osxDisplayModes[display]) return false; CGDisplayModeRef displayMode = (CGDisplayModeRef)CFArrayGetValueAtIndex(m_osxDisplayModes[display], mode); CGError err = CGDisplaySetDisplayMode(m_osxDisplays[display], displayMode, nullptr); if (err) { QLOG_ERROR() << "CGDisplaySetDisplayMode() returned failure:" << err; return false; } // HACK : on OSX, switching display mode can leave dock in a state where mouse cursor // will not hide on top of hidden dock, so we reset it state to fix this OSXUtils::SetMenuBarVisible(true); OSXUtils::SetMenuBarVisible(false); return true; }