[Win] Separate keyboard/mouse & joystick drivers

Keyboard/mouse support comes through WinRawInput; joystick support
through CombinedJoystickDriver. These drivers are now instantiated
separately.
This commit is contained in:
Stefanos A 2014-01-15 23:40:28 +01:00 committed by thefiddler
parent 5cfde8ff0f
commit 06e63946cc

View file

@ -40,7 +40,12 @@ namespace OpenTK.Platform.Windows
class WinFactory : PlatformFactoryBase
{
readonly object SyncRoot = new object();
IInputDriver2 inputDriver;
// The input drivers must be constructed lazily, *after* the
// WinFactory constructor has finished running. The reason is
// that they call WinFactory methods internally.
WinRawInput rawinput_driver; // For keyboard and mouse input
WinCombinedJoystick joystick_driver; // For joystick input
internal static IntPtr OpenGLHandle { get; private set; }
const string OpenGLName = "OPENGL32.DLL";
@ -112,41 +117,61 @@ namespace OpenTK.Platform.Windows
public override OpenTK.Input.IKeyboardDriver2 CreateKeyboardDriver()
{
return InputDriver.KeyboardDriver;
return RawInputDriver.KeyboardDriver;
}
public override OpenTK.Input.IMouseDriver2 CreateMouseDriver()
{
return InputDriver.MouseDriver;
return RawInputDriver.MouseDriver;
}
public override OpenTK.Input.IGamePadDriver CreateGamePadDriver()
{
return InputDriver.GamePadDriver;
return new MappedGamePadDriver();
}
public override IJoystickDriver2 CreateJoystickDriver()
{
return InputDriver.JoystickDriver;
return CombinedJoystickDriver;
}
#endregion
IInputDriver2 InputDriver
#region Private Members
WinRawInput RawInputDriver
{
get
{
lock (SyncRoot)
{
if (inputDriver == null)
if (rawinput_driver == null)
{
inputDriver = new WinRawInput();
rawinput_driver = new WinRawInput();
}
return inputDriver;
return rawinput_driver;
}
}
}
WinCombinedJoystick CombinedJoystickDriver
{
get
{
lock (SyncRoot)
{
if (joystick_driver == null)
{
joystick_driver = new WinCombinedJoystick(
new XInputJoystick(), new WinMMJoystick());
}
return joystick_driver;
}
}
}
#endregion
#region IDisposable Members
protected override void Dispose(bool manual)
@ -155,7 +180,8 @@ namespace OpenTK.Platform.Windows
{
if (manual)
{
InputDriver.Dispose();
rawinput_driver.Dispose();
joystick_driver.Dispose();
}
base.Dispose(manual);