diff --git a/src/Game.cs b/src/Game.cs
index 48a2e52..9435793 100644
--- a/src/Game.cs
+++ b/src/Game.cs
@@ -216,6 +216,8 @@ namespace Microsoft.Xna.Framework
internal GamePlatform Platform;
+ internal bool RunApplication;
+
#endregion
#region Private Fields
@@ -291,6 +293,9 @@ namespace Microsoft.Xna.Framework
_services.AddService(typeof(GamePlatform), Platform);
AudioDevice.Initialize();
+
+ // Ready to run the loop!
+ RunApplication = true;
}
#endregion
@@ -396,7 +401,7 @@ namespace Microsoft.Xna.Framework
public void Exit()
{
- Platform.Exit();
+ RunApplication = false;
_suppressDraw = true;
}
diff --git a/src/GamePlatform.cs b/src/GamePlatform.cs
index 95989e1..ad8eadf 100644
--- a/src/GamePlatform.cs
+++ b/src/GamePlatform.cs
@@ -91,11 +91,6 @@ namespace Microsoft.Xna.Framework
public abstract void BeforeInitialize();
///
- /// When implemented in a derived class, ends the active run loop.
- ///
- public abstract void Exit();
-
- ///
/// When implemented in a derived class, starts the run loop and blocks
/// until it has ended.
///
diff --git a/src/SDL2/SDL2_GamePlatform.cs b/src/SDL2/SDL2_GamePlatform.cs
index 41c4e49..b7c3c9a 100644
--- a/src/SDL2/SDL2_GamePlatform.cs
+++ b/src/SDL2/SDL2_GamePlatform.cs
@@ -46,26 +46,6 @@ namespace Microsoft.Xna.Framework
#endregion
- #region Private Game Loop Sentinel
-
- private bool INTERNAL_runApplication;
-
- #endregion
-
- #region Private Active XNA Key List
-
- private List keys;
-
- #endregion
-
- #region Private Text Input Variables
-
- private int[] INTERNAL_TextInputControlRepeat;
- private bool[] INTERNAL_TextInputControlDown;
- private bool INTERNAL_TextInputSuppress;
-
- #endregion
-
#region Private DisplayMode Variables
private int displayIndex = 0;
@@ -152,18 +132,6 @@ namespace Microsoft.Xna.Framework
{
INTERNAL_useFullscreenSpaces = false;
}
-
- // Initialize Active Key List
- keys = new List();
-
- /* Setup Text Input Control Character Arrays
- * (Only 4 control keys supported at this time)
- */
- INTERNAL_TextInputControlDown = new bool[4];
- INTERNAL_TextInputControlRepeat = new int[4];
-
- // Ready to run the loop!
- INTERNAL_runApplication = true;
}
#endregion
@@ -174,9 +142,19 @@ namespace Microsoft.Xna.Framework
{
SDL.SDL_ShowWindow(Game.Window.Handle);
+ // Active Key List
+ List keys = new List();
+
+ /* Setup Text Input Control Character Arrays
+ * (Only 4 control keys supported at this time)
+ */
+ bool[] INTERNAL_TextInputControlDown = new bool[4];
+ int[] INTERNAL_TextInputControlRepeat = new int[4];
+ bool INTERNAL_TextInputSuppress = false;
+
SDL.SDL_Event evt;
- while (INTERNAL_runApplication)
+ while (Game.RunApplication)
{
while (SDL.SDL_PollEvent(out evt) == 1)
{
@@ -191,7 +169,31 @@ namespace Microsoft.Xna.Framework
if (!keys.Contains(key))
{
keys.Add(key);
- INTERNAL_TextInputIn(key);
+ if (key == Keys.Back)
+ {
+ INTERNAL_TextInputControlDown[0] = true;
+ INTERNAL_TextInputControlRepeat[0] = Environment.TickCount + 400;
+ TextInputEXT.OnTextInput((char) 8); // Backspace
+ }
+ else if (key == Keys.Tab)
+ {
+ INTERNAL_TextInputControlDown[1] = true;
+ INTERNAL_TextInputControlRepeat[1] = Environment.TickCount + 400;
+ TextInputEXT.OnTextInput((char) 9); // Tab
+ }
+ else if (key == Keys.Enter)
+ {
+ INTERNAL_TextInputControlDown[2] = true;
+ INTERNAL_TextInputControlRepeat[2] = Environment.TickCount + 400;
+ TextInputEXT.OnTextInput((char) 13); // Enter
+ }
+ else if (keys.Contains(Keys.LeftControl) && key == Keys.V)
+ {
+ INTERNAL_TextInputControlDown[3] = true;
+ INTERNAL_TextInputControlRepeat[3] = Environment.TickCount + 400;
+ TextInputEXT.OnTextInput((char) 22); // Control-V (Paste)
+ INTERNAL_TextInputSuppress = true;
+ }
}
}
else if (evt.type == SDL.SDL_EventType.SDL_KEYUP)
@@ -203,7 +205,23 @@ namespace Microsoft.Xna.Framework
#endif
if (keys.Remove(key))
{
- INTERNAL_TextInputOut(key);
+ if (key == Keys.Back)
+ {
+ INTERNAL_TextInputControlDown[0] = false;
+ }
+ else if (key == Keys.Tab)
+ {
+ INTERNAL_TextInputControlDown[1] = false;
+ }
+ else if (key == Keys.Enter)
+ {
+ INTERNAL_TextInputControlDown[2] = false;
+ }
+ else if ((!keys.Contains(Keys.LeftControl) && INTERNAL_TextInputControlDown[3]) || key == Keys.V)
+ {
+ INTERNAL_TextInputControlDown[3] = false;
+ INTERNAL_TextInputSuppress = false;
+ }
}
}
@@ -355,12 +373,27 @@ namespace Microsoft.Xna.Framework
// Quit
else if (evt.type == SDL.SDL_EventType.SDL_QUIT)
{
- INTERNAL_runApplication = false;
+ Game.RunApplication = false;
break;
}
}
// Text Input Controls Key Handling
- INTERNAL_TextInputUpdate();
+ if (INTERNAL_TextInputControlDown[0] && INTERNAL_TextInputControlRepeat[0] <= Environment.TickCount)
+ {
+ TextInputEXT.OnTextInput((char) 8);
+ }
+ if (INTERNAL_TextInputControlDown[1] && INTERNAL_TextInputControlRepeat[1] <= Environment.TickCount)
+ {
+ TextInputEXT.OnTextInput((char) 9);
+ }
+ if (INTERNAL_TextInputControlDown[2] && INTERNAL_TextInputControlRepeat[2] <= Environment.TickCount)
+ {
+ TextInputEXT.OnTextInput((char) 13);
+ }
+ if (INTERNAL_TextInputControlDown[3] && INTERNAL_TextInputControlRepeat[3] <= Environment.TickCount)
+ {
+ TextInputEXT.OnTextInput((char) 22);
+ }
Keyboard.SetKeys(keys);
Game.Tick();
@@ -370,12 +403,6 @@ namespace Microsoft.Xna.Framework
Game.Exit();
}
- public override void Exit()
- {
- // Stop the game loop
- INTERNAL_runApplication = false;
- }
-
public override void BeforeInitialize()
{
// We want to initialize the controllers ASAP!
@@ -836,80 +863,6 @@ namespace Microsoft.Xna.Framework
#endregion
- #region Private TextInput Methods
-
- private void INTERNAL_TextInputIn(Keys key)
- {
- if (key == Keys.Back)
- {
- INTERNAL_TextInputControlDown[0] = true;
- INTERNAL_TextInputControlRepeat[0] = Environment.TickCount + 400;
- TextInputEXT.OnTextInput((char) 8); // Backspace
- }
- else if (key == Keys.Tab)
- {
- INTERNAL_TextInputControlDown[1] = true;
- INTERNAL_TextInputControlRepeat[1] = Environment.TickCount + 400;
- TextInputEXT.OnTextInput((char) 9); // Tab
- }
- else if (key == Keys.Enter)
- {
- INTERNAL_TextInputControlDown[2] = true;
- INTERNAL_TextInputControlRepeat[2] = Environment.TickCount + 400;
- TextInputEXT.OnTextInput((char) 13); // Enter
- }
- else if (keys.Contains(Keys.LeftControl) && key == Keys.V)
- {
- INTERNAL_TextInputControlDown[3] = true;
- INTERNAL_TextInputControlRepeat[3] = Environment.TickCount + 400;
- TextInputEXT.OnTextInput((char) 22); // Control-V (Paste)
- INTERNAL_TextInputSuppress = true;
- }
- }
-
- private void INTERNAL_TextInputOut(Keys key)
- {
- if (key == Keys.Back)
- {
- INTERNAL_TextInputControlDown[0] = false;
- }
- else if (key == Keys.Tab)
- {
- INTERNAL_TextInputControlDown[1] = false;
- }
- else if (key == Keys.Enter)
- {
- INTERNAL_TextInputControlDown[2] = false;
- }
- else if ((!keys.Contains(Keys.LeftControl) && INTERNAL_TextInputControlDown[3]) || key == Keys.V)
- {
- INTERNAL_TextInputControlDown[3] = false;
- INTERNAL_TextInputSuppress = false;
- }
- }
-
- private void INTERNAL_TextInputUpdate()
- {
- if (INTERNAL_TextInputControlDown[0] && INTERNAL_TextInputControlRepeat[0] <= Environment.TickCount)
- {
- TextInputEXT.OnTextInput((char) 8);
- }
- if (INTERNAL_TextInputControlDown[1] && INTERNAL_TextInputControlRepeat[1] <= Environment.TickCount)
- {
- TextInputEXT.OnTextInput((char) 9);
- }
- if (INTERNAL_TextInputControlDown[2] && INTERNAL_TextInputControlRepeat[2] <= Environment.TickCount)
- {
- TextInputEXT.OnTextInput((char) 13);
- }
- if (INTERNAL_TextInputControlDown[3] && INTERNAL_TextInputControlRepeat[3] <= Environment.TickCount)
- {
- TextInputEXT.OnTextInput((char) 22);
- }
- }
-
- #endregion
-
#region Private Static SDL_Surface Interop
[StructLayout(LayoutKind.Sequential)]