internal void ResetWindowBounds(bool toggleFullScreen) { Rectangle bounds; bounds = Window.ClientBounds; //Changing window style forces a redraw. Some games //have fail-logic and toggle fullscreen in their draw function, //so temporarily become inactive so it won't execute. bool wasActive = IsActive; IsActive = false; var graphicsDeviceManager = (GraphicsDeviceManager) Game.Services.GetService(typeof(IGraphicsDeviceManager)); if (graphicsDeviceManager.IsFullScreen) { bounds = new Rectangle(0, 0, graphicsDeviceManager.PreferredBackBufferWidth, graphicsDeviceManager.PreferredBackBufferHeight); if (OpenTK.DisplayDevice.Default.Width != graphicsDeviceManager.PreferredBackBufferWidth || OpenTK.DisplayDevice.Default.Height != graphicsDeviceManager.PreferredBackBufferHeight) { OpenTK.DisplayDevice.Default.ChangeResolution(graphicsDeviceManager.PreferredBackBufferWidth, graphicsDeviceManager.PreferredBackBufferHeight, OpenTK.DisplayDevice.Default.BitsPerPixel, OpenTK.DisplayDevice.Default.RefreshRate); } } else { // switch back to the normal screen resolution OpenTK.DisplayDevice.Default.RestoreResolution(); // now update the bounds bounds.Width = graphicsDeviceManager.PreferredBackBufferWidth; bounds.Height = graphicsDeviceManager.PreferredBackBufferHeight; } // Now we set our Presentation Parameters var device = (GraphicsDevice)graphicsDeviceManager.GraphicsDevice; // FIXME: Eliminate the need for null checks by only calling // ResetWindowBounds after the device is ready. Or, // possibly break this method into smaller methods. if (device != null) { PresentationParameters parms = device.PresentationParameters; parms.BackBufferHeight = (int)bounds.Height; parms.BackBufferWidth = (int)bounds.Width; } if (graphicsDeviceManager.IsFullScreen != isCurrentlyFullScreen) { _view.ToggleFullScreen(); } // we only change window bounds if we are not fullscreen // or if fullscreen mode was just entered if (!graphicsDeviceManager.IsFullScreen || (graphicsDeviceManager.IsFullScreen != isCurrentlyFullScreen)) { _view.ChangeClientBounds(bounds); } // store the current fullscreen state isCurrentlyFullScreen = graphicsDeviceManager.IsFullScreen; IsActive = wasActive; }