public bool setFullscreenMode(CDX.DisplayMode displayMode) { window.getInput().resetPollingStates(); DisplayMode newMode = (DisplayMode)displayMode; if (isFullscreen()) { DisplayMode currentMode = (DisplayMode)getDisplayMode(); if (currentMode.getMonitor() == newMode.getMonitor() && currentMode.refreshRate == newMode.refreshRate) { // same monitor and refresh rate GLFW.GLFW.SetWindowSize(window.getWindowHandle(), newMode.width, newMode.height); } else { // different monitor and/or refresh rate GLFW.GLFW.SetWindowMonitor(window.getWindowHandle(), newMode.getMonitor(), 0, 0, newMode.width, newMode.height, newMode.refreshRate); } } else { // store window position so we can restore it when switching from fullscreen to windowed later storeCurrentWindowPositionAndDisplayMode(); // switch from windowed to fullscreen GLFW.GLFW.SetWindowMonitor(window.getWindowHandle(), newMode.getMonitor(), 0, 0, newMode.width, newMode.height, newMode.refreshRate); } updateFramebufferInfo(); return(true); }
public Monitor getMonitor() { Monitor[] monitors = getMonitors(); Monitor result = monitors[0]; GLFW.GLFW.GetWindowPos(window.getWindowHandle(), out var windowX, out var windowY); GLFW.GLFW.GetWindowSize(window.getWindowHandle(), out var windowWidth, out var windowHeight); int overlap; int bestOverlap = 0; foreach (Monitor monitor in monitors) { CDX.DisplayMode mode = getDisplayMode(monitor); overlap = Math.Max(0, Math.Min(windowX + windowWidth, monitor.virtualX + mode.width) - Math.Max(windowX, monitor.virtualX)) * Math.Max(0, Math.Min(windowY + windowHeight, monitor.virtualY + mode.height) - Math.Max(windowY, monitor.virtualY)); if (bestOverlap < overlap) { bestOverlap = overlap; result = monitor; } } return(result); }
public float getPpcY() { Lwjgl3Monitor monitor = (Lwjgl3Monitor)getMonitor(); GLFW.GLFW.GetMonitorPhysicalSize(monitor.getMonitorHandle(), out var sizeX, out var sizeY); CDX.DisplayMode mode = getDisplayMode(); return(mode.height / (float)sizeY * 10); }
public static CDX.DisplayMode[] getDisplayModes(Monitor monitor) { Application.initializeGlfw(); var videoModes = GLFW.GLFW.GetVideoModes(((Lwjgl3Monitor)monitor).getMonitorHandle()); CDX.DisplayMode[] result = new CDX.DisplayMode[videoModes.Length]; for (int i = 0; i < result.Length; i++) { var videoMode = videoModes[i]; result[i] = new DisplayMode(((Lwjgl3Monitor)monitor).getMonitorHandle(), videoMode.Width, videoMode.Height, videoMode.RefreshRate, videoMode.RedBits + videoMode.GreenBits + videoMode.BlueBits); } return(result); }
public void setFullscreenMode(CDX.DisplayMode mode) { fullscreenMode = (DisplayMode)mode; }
private void storeCurrentWindowPositionAndDisplayMode() { windowPosXBeforeFullscreen = window.getPositionX(); windowPosYBeforeFullscreen = window.getPositionY(); displayModeBeforeFullscreen = getDisplayMode(); }