93 lines
2.3 KiB
C#
93 lines
2.3 KiB
C#
using System;
|
|
using ANX.Framework;
|
|
using ANX.Framework.Input;
|
|
using ANX.Framework.NonXNA;
|
|
using DInput = SharpDX.DirectInput;
|
|
using ANX.Framework.NonXNA.Development;
|
|
|
|
// This file is part of the ANX.Framework created by the
|
|
// "ANX.Framework developer group" and released under the Ms-PL license.
|
|
// For details see: http://anxframework.codeplex.com/license
|
|
|
|
namespace ANX.InputDevices.Windows.XInput
|
|
{
|
|
[PercentageComplete(100)]
|
|
[TestState(TestStateAttribute.TestState.InProgress)]
|
|
[Developer("AstrorEnales")]
|
|
public class Keyboard : IKeyboard
|
|
{
|
|
#region Private
|
|
private DInput.DirectInput directInput;
|
|
private DInput.Keyboard nativeKeyboard;
|
|
private DInput.KeyboardState nativeState;
|
|
private IntPtr windowHandle;
|
|
private KeyboardState emptyState;
|
|
#endregion
|
|
|
|
public IntPtr WindowHandle
|
|
{
|
|
get { return windowHandle; }
|
|
set
|
|
{
|
|
if (windowHandle != value)
|
|
{
|
|
windowHandle = value;
|
|
nativeKeyboard.Unacquire();
|
|
nativeKeyboard.SetCooperativeLevel(WindowHandle,
|
|
DInput.CooperativeLevel.NonExclusive | DInput.CooperativeLevel.Background);
|
|
nativeKeyboard.Acquire();
|
|
}
|
|
}
|
|
}
|
|
|
|
public Keyboard()
|
|
{
|
|
emptyState = new KeyboardState(new Keys[0]);
|
|
|
|
nativeState = new DInput.KeyboardState();
|
|
directInput = new DInput.DirectInput();
|
|
nativeKeyboard = new DInput.Keyboard(directInput);
|
|
nativeKeyboard.Acquire();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Only available on XBox, behaviour regarding MSDN: empty keystate
|
|
/// </summary>
|
|
public KeyboardState GetState(PlayerIndex playerIndex)
|
|
{
|
|
return emptyState;
|
|
}
|
|
|
|
public KeyboardState GetState()
|
|
{
|
|
if (WindowHandle == IntPtr.Zero)
|
|
return emptyState;
|
|
|
|
nativeKeyboard.GetCurrentState(ref nativeState);
|
|
|
|
int keyCount = nativeState.PressedKeys.Count;
|
|
Keys[] keys = new Keys[keyCount];
|
|
for (int i = 0; i < keyCount; i++)
|
|
keys[i] = FormatConverter.Translate(nativeState.PressedKeys[i]);
|
|
|
|
return new KeyboardState(keys);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
if (nativeKeyboard != null)
|
|
{
|
|
nativeKeyboard.Unacquire();
|
|
nativeKeyboard.Dispose();
|
|
nativeKeyboard = null;
|
|
}
|
|
|
|
if (directInput != null)
|
|
{
|
|
directInput.Dispose();
|
|
directInput = null;
|
|
}
|
|
}
|
|
}
|
|
}
|