00001 #region --- License ---
00002
00003
00004
00005 #endregion
00006
00007 #region --- Using directives ---
00008
00009 using System;
00010
00011 using OpenTK.Input;
00012 using System.Diagnostics;
00013
00014 #endregion
00015
00016 namespace OpenTK.Input
00017 {
00021 public sealed class KeyboardDevice : IInputDevice
00022 {
00023
00024 private bool[] keys = new bool[Enum.GetValues(typeof(Key)).Length];
00025 private string description;
00026 private int numKeys, numFKeys, numLeds;
00027 private IntPtr devID;
00028 private bool repeat;
00029 private KeyboardKeyEventArgs args = new KeyboardKeyEventArgs();
00030
00031 #region --- Constructors ---
00032
00033 internal KeyboardDevice() { }
00034
00035 #endregion
00036
00037 #region --- IKeyboard members ---
00038
00044 public bool this[Key key]
00045 {
00046 get { return keys[(int)key]; }
00047 internal set
00048 {
00049 if (keys[(int)key] != value || KeyRepeat)
00050 {
00051 keys[(int)key] = value;
00052
00053 if (value && KeyDown != null)
00054 {
00055 args.Key = key;
00056 KeyDown(this, args);
00057 }
00058 else if (!value && KeyUp != null)
00059 {
00060 args.Key = key;
00061 KeyUp(this, args);
00062 }
00063 }
00064 }
00065 }
00066
00070 public int NumberOfKeys
00071 {
00072 get { return numKeys; }
00073 internal set { numKeys = value; }
00074 }
00075
00079 public int NumberOfFunctionKeys
00080 {
00081 get { return numFKeys; }
00082 internal set { numFKeys = value; }
00083 }
00084
00088 public int NumberOfLeds
00089 {
00090 get { return numLeds; }
00091 internal set { numLeds = value; }
00092 }
00093
00097 public IntPtr DeviceID
00098 {
00099 get { return devID; }
00100 internal set { devID = value; }
00101 }
00102
00103 #region public bool KeyRepeat
00104
00121 public bool KeyRepeat
00122 {
00123 get { return repeat; }
00124 set { repeat = value; }
00125 }
00126
00127 #endregion
00128
00129 #region KeyDown
00130
00134 public event EventHandler<KeyboardKeyEventArgs> KeyDown;
00135
00136 #endregion
00137
00138 #region KeyUp
00139
00143 public event EventHandler<KeyboardKeyEventArgs> KeyUp;
00144
00145 #endregion
00146
00147 #endregion
00148
00149 #region --- IInputDevice Members ---
00150
00154 public string Description
00155 {
00156 get { return description; }
00157 internal set { description = value; }
00158 }
00159
00163 public InputDeviceType DeviceType
00164 {
00165 get { return InputDeviceType.Keyboard; }
00166 }
00167
00168 #endregion
00169
00170 #region --- Public Methods ---
00171
00174 public override int GetHashCode()
00175 {
00176
00177 return (int)(numKeys ^ numFKeys ^ numLeds ^ devID.GetHashCode() ^ description.GetHashCode());
00178 }
00179
00184 public override string ToString()
00185 {
00186
00187 return String.Format("ID: {0} ({1}). Keys: {2}, Function keys: {3}, Leds: {4}",
00188 DeviceID, Description, NumberOfKeys, NumberOfFunctionKeys, NumberOfLeds);
00189 }
00190
00191 #endregion
00192
00193 #region --- Internal Methods ---
00194
00195 #region internal void ClearKeys()
00196
00197 internal void ClearKeys()
00198 {
00199 for (int i = 0; i < keys.Length; i++)
00200 if (this[(Key)i])
00201 this[(Key)i] = false;
00202 }
00203
00204 #endregion
00205
00206 #endregion
00207 }
00208 }