Simplify ProcessEvents implementation

Instead of combining PeekMessage+GetMessage, we can simply call
PeekMessage(Remove) to achieve the same effect. This also allows us to
remove the IsIdle property, which is no longer used anywhere.
This commit is contained in:
Stefanos A 2013-12-20 08:42:36 +01:00
parent 6493ab0188
commit 1edfa8f3de
2 changed files with 14 additions and 24 deletions

View file

@ -349,7 +349,7 @@ namespace OpenTK.Platform.Windows
[System.Security.SuppressUnmanagedCodeSecurity]
[DllImport("User32.dll"), CLSCompliant(false)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool PeekMessage(ref MSG msg, IntPtr hWnd, int messageFilterMin, int messageFilterMax, int flags);
internal static extern bool PeekMessage(ref MSG msg, IntPtr hWnd, int messageFilterMin, int messageFilterMax, PeekMessageFlags flags);
#endregion
@ -4028,6 +4028,18 @@ namespace OpenTK.Platform.Windows
#endregion
#region PeekMessageFlags
[Flags]
enum PeekMessageFlags : uint
{
NoRemove = 0,
Remove = 1,
NoYield = 2
}
#endregion
#region ShowWindowCommand
/// <summary>

View file

@ -583,19 +583,6 @@ namespace OpenTK.Platform.Windows
#endregion
#region IsIdle
bool IsIdle
{
get
{
MSG message = new MSG();
return !Functions.PeekMessage(ref message, window.Handle, 0, 0, 0);
}
}
#endregion
#region CreateWindow
IntPtr CreateWindow(int x, int y, int width, int height, string title, GameWindowFlags options, DisplayDevice device, IntPtr parentHandle)
@ -1217,20 +1204,11 @@ namespace OpenTK.Platform.Windows
#region public void ProcessEvents()
private int ret;
MSG msg;
public void ProcessEvents()
{
while (!IsIdle)
while (Functions.PeekMessage(ref msg, window.Handle, 0, 0, PeekMessageFlags.Remove))
{
ret = Functions.GetMessage(ref msg, window.Handle, 0, 0);
if (ret == -1)
{
throw new PlatformException(String.Format(
"An error happened while processing the message queue. Windows error: {0}",
Marshal.GetLastWin32Error()));
}
Functions.TranslateMessage(ref msg);
Functions.DispatchMessage(ref msg);
}