diff --git a/Source/OpenTK/Input/GamePad.cs b/Source/OpenTK/Input/GamePad.cs
new file mode 100644
index 00000000..02c6d954
--- /dev/null
+++ b/Source/OpenTK/Input/GamePad.cs
@@ -0,0 +1,46 @@
+ #region License
+ //
+ // The Open Toolkit Library License
+ //
+ // Copyright (c) 2006 - 2009 the Open Toolkit library.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
+ // of this software and associated documentation files (the "Software"), to deal
+ // in the Software without restriction, including without limitation the rights to
+ // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ // the Software, and to permit persons to whom the Software is furnished to do
+ // so, subject to the following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included in all
+ // copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ // OTHER DEALINGS IN THE SOFTWARE.
+ //
+ #endregion
+
+using System;
+
+namespace OpenTK.Input
+{
+ ///
+ /// Provides access to GamePad devices.
+ ///
+ public class GamePad
+ {
+ #region Constructors
+
+ static GamePad()
+ {
+ throw new NotImplementedException();
+ }
+
+ #endregion
+ }
+}
diff --git a/Source/OpenTK/Input/GamePadState.cs b/Source/OpenTK/Input/GamePadState.cs
new file mode 100644
index 00000000..ed2d2fd0
--- /dev/null
+++ b/Source/OpenTK/Input/GamePadState.cs
@@ -0,0 +1,38 @@
+ #region License
+ //
+ // The Open Toolkit Library License
+ //
+ // Copyright (c) 2006 - 2009 the Open Toolkit library.
+ //
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
+ // of this software and associated documentation files (the "Software"), to deal
+ // in the Software without restriction, including without limitation the rights to
+ // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ // the Software, and to permit persons to whom the Software is furnished to do
+ // so, subject to the following conditions:
+ //
+ // The above copyright notice and this permission notice shall be included in all
+ // copies or substantial portions of the Software.
+ //
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ // OTHER DEALINGS IN THE SOFTWARE.
+ //
+ #endregion
+
+using System;
+
+namespace OpenTK.Input
+{
+ ///
+ /// Encapsulates the state of a GamePad device.
+ ///
+ public struct GamePadState
+ {
+ }
+}
diff --git a/Source/OpenTK/Input/Keyboard.cs b/Source/OpenTK/Input/Keyboard.cs
index e5b84a9d..8a99bd58 100644
--- a/Source/OpenTK/Input/Keyboard.cs
+++ b/Source/OpenTK/Input/Keyboard.cs
@@ -19,6 +19,7 @@ namespace OpenTK.Input
static Keyboard()
{
+ throw new NotImplementedException();
//driver = Platform.Factory.Default.CreateKeyboardDriver();
}
@@ -32,7 +33,7 @@ namespace OpenTK.Input
/// A structure containing the state of the keyboard device.
public static KeyboardState GetState()
{
- throw new NotImplementedException();
+ return new KeyboardState();
}
///
@@ -42,7 +43,7 @@ namespace OpenTK.Input
/// A structure containing the state of the keyboard device.
public static KeyboardState GetState(int index)
{
- throw new NotImplementedException();
+ return new KeyboardState();
}
#endregion
diff --git a/Source/OpenTK/Input/KeyboardState.cs b/Source/OpenTK/Input/KeyboardState.cs
index 883e311d..acef0644 100644
--- a/Source/OpenTK/Input/KeyboardState.cs
+++ b/Source/OpenTK/Input/KeyboardState.cs
@@ -5,20 +5,58 @@ using System.Text;
namespace OpenTK.Input
{
///
- /// Encapsulates the state of a keyboard device.
+ /// Encapsulates the state of a Keyboard device.
///
public struct KeyboardState : IEquatable
{
- #region Constructors
+ #region Fields
- internal KeyboardState(Key[] keys)
- {
- }
+ const int NumKeys = ((int)Key.LastKey + 16) / 32;
+ unsafe fixed int Keys[NumKeys];
+
+ #endregion
+
+ #region Constructors
#endregion
#region Public Members
+ ///
+ /// Gets a indicating whether this key is down.
+ ///
+ /// The to check.
+ public bool IsKeyDown(Key key)
+ {
+ return ReadBit((int)key) != 0;
+ }
+
+ ///
+ /// Gets a indicating whether this key is up.
+ ///
+ /// The to check.
+ public bool IsKeyUp(Key key)
+ {
+ return ReadBit((int)key) == 0;
+ }
+
+ #endregion
+
+ #region Internal Members
+
+ internal int ReadBit(int offset)
+ {
+ return 0;
+ //unsafe { return (Keys[(offset / 32)] & (1 << (offset % 32))); }
+ }
+
+ internal enum BitValue { Zero = 0, One = 1 }
+ internal void WriteBit(int offset, BitValue bit)
+ {
+ // Todo: this is completely broken.
+ //unsafe { Keys[offset / 32] = Keys[offset / 32] ^ (~(int)bit << (offset % 32)); }
+ }
+
#endregion
#region IEquatable Members