예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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;
 }
예제 #6
0
 private void storeCurrentWindowPositionAndDisplayMode()
 {
     windowPosXBeforeFullscreen  = window.getPositionX();
     windowPosYBeforeFullscreen  = window.getPositionY();
     displayModeBeforeFullscreen = getDisplayMode();
 }