From 1540fab506fb939a2098f5138171f1734d1daa07 Mon Sep 17 00:00:00 2001 From: the_fiddler Date: Sun, 4 May 2008 14:40:08 +0000 Subject: [PATCH] Added GetNext and GetPrevious methods to improve toggling of window states and borders. --- Source/Examples/Tests/GameWindowStates.cs | 166 +++++++++------------- 1 file changed, 71 insertions(+), 95 deletions(-) diff --git a/Source/Examples/Tests/GameWindowStates.cs b/Source/Examples/Tests/GameWindowStates.cs index b2261719..3b44dc3d 100644 --- a/Source/Examples/Tests/GameWindowStates.cs +++ b/Source/Examples/Tests/GameWindowStates.cs @@ -8,11 +8,11 @@ using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; -using System.Drawing; -using System.Threading; +using System.Drawing; +using System.Threading; using OpenTK; -using OpenTK.Graphics; +using OpenTK.Graphics; using OpenTK.Input; namespace Examples.Tests @@ -21,51 +21,45 @@ namespace Examples.Tests public class GameWindowStates : GameWindow { TextureFont font = new TextureFont(new Font(FontFamily.GenericSansSerif, 16.0f)); - TextPrinter printer = new TextPrinter(); - - WindowState[] window_state_sequence = new WindowState[] - { - WindowState.Normal, - WindowState.Maximized, - WindowState.Fullscreen, - WindowState.Minimized - }; - - WindowBorder[] window_border_sequence = new WindowBorder[] - { - WindowBorder.Resizable, - WindowBorder.Fixed, - WindowBorder.Hidden, - }; - - int window_state_counter = 0; - int WindowStateCounter - { - get { return window_state_counter; } - set - { - if (value < 0) - window_state_counter = window_state_sequence.Length - 1; - else - window_state_counter = ++window_state_counter % window_state_sequence.Length; - } - } - - int window_border_counter = 0; - int WindowBorderCounter - { - get { return window_border_counter; } - set - { - if (value < 0) - window_border_counter = window_border_sequence.Length - 1; - else - window_border_counter = ++window_border_counter % window_border_sequence.Length; - } - } - - - + TextPrinter printer = new TextPrinter(); + + #region GetNext and GetPrevious methods for enums. + + T GetNext(T t) + { + if (!(t is Enum)) + throw new ArgumentException(String.Format("Should be an Enum type (is {0}).", t.GetType().ToString()), + "t"); + + string[] names = Enum.GetNames(t.GetType()); + T[] values = (T[])Enum.GetValues(t.GetType()); + + int current_index = Array.IndexOf(names, t.ToString()); + if (current_index >= values.Length - 1) + return values[0]; + else + return values[current_index + 1]; + + } + + T GetPrevious(T t) + { + if (!(t is Enum)) + throw new ArgumentException(String.Format("Should be an Enum type (is {0}).", t.GetType().ToString()), + "t"); + + string[] names = Enum.GetNames(t.GetType()); + T[] values = (T[])Enum.GetValues(t.GetType()); + + int current_index = Array.IndexOf(names, t.ToString()); + if (current_index <= 0) + return values[values.Length - 1]; + else + return values[current_index - 1]; + } + + #endregion + public GameWindowStates() : base(800, 600) { @@ -84,49 +78,31 @@ namespace Examples.Tests this.Exit(); break; - case OpenTK.Input.Key.Number1: - if (sender[Key.ShiftLeft] || sender[Key.ShiftRight]) - WindowStateCounter--; - else - WindowStateCounter++; - WindowState = window_state_sequence[WindowStateCounter]; - -// switch (this.WindowState) -// { -// case WindowState.Normal: this.WindowState = WindowState.Maximized; break;1 -// case WindowState.Maximized: this.WindowState = WindowState.Fullscreen; break; -// case WindowState.Fullscreen: -// this.WindowState = WindowState.Normal; -// this.WindowState = WindowState.Minimized; -// break; -// case WindowState.Minimized: this.WindowState = WindowState.Normal; -// break; -// -// } + case OpenTK.Input.Key.Number1: + + if (sender[Key.ShiftLeft] || sender[Key.ShiftRight]) + WindowState = GetPrevious(WindowState); + else + WindowState = GetNext(WindowState); + break; - case OpenTK.Input.Key.Number2: - if (sender[Key.ShiftLeft] || sender[Key.ShiftRight]) - WindowBorderCounter--; - else - WindowBorderCounter++; - WindowBorder = window_border_sequence[WindowBorderCounter]; -// this.WindowState = WindowState.Normal; -// switch (this.WindowBorder) -// { -// case WindowBorder.Fixed: this.WindowBorder = WindowBorder.Hidden; break; -// case WindowBorder.Hidden: this.WindowBorder = WindowBorder.Resizable; break; -// case WindowBorder.Resizable: this.WindowBorder = WindowBorder.Fixed; break; -// } + case OpenTK.Input.Key.Number2: + + if (sender[Key.ShiftLeft] || sender[Key.ShiftRight]) + WindowBorder = GetPrevious(WindowBorder); + else + WindowBorder = GetNext(WindowBorder); - break; - - case OpenTK.Input.Key.Number3: - if (this.WindowState == WindowState.Fullscreen) - this.WindowState = WindowState.Normal; - else - this.WindowState = WindowState.Fullscreen; - + break; + + case OpenTK.Input.Key.Number3: + + if (this.WindowState == WindowState.Fullscreen) + this.WindowState = WindowState.Normal; + else + this.WindowState = WindowState.Fullscreen; + break; } } @@ -143,17 +119,17 @@ namespace Examples.Tests printer.Begin(); printer.Draw("Instructions:", font); GL.Translate(0, font.Height, 0); - printer.Draw(String.Format("1 - cycle through window styles (current: {0}).", this.WindowState), font); + printer.Draw(String.Format("1 - cycle through window styles (current: {0}).", this.WindowState), font); GL.Translate(0, font.Height, 0); - printer.Draw(String.Format("2 - cycle through window borders (current: {0}).", this.WindowBorder), font); - GL.Translate(0, font.Height, 0); - printer.Draw(String.Format("3 - toggle fullscreen (current: {0}).", - this.WindowState == WindowState.Fullscreen ? "enabled" : "disabled"), font); + printer.Draw(String.Format("2 - cycle through window borders (current: {0}).", this.WindowBorder), font); + GL.Translate(0, font.Height, 0); + printer.Draw(String.Format("3 - toggle fullscreen (current: {0}).", + this.WindowState == WindowState.Fullscreen ? "enabled" : "disabled"), font); printer.End(); - SwapBuffers(); + SwapBuffers(); Thread.Sleep(5); } @@ -161,7 +137,7 @@ namespace Examples.Tests { using (GameWindowStates ex = new GameWindowStates()) { - Utilities.SetWindowTitle(ex); + Utilities.SetWindowTitle(ex); ex.Run(20.0); } }