mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-06-19 15:27:55 +00:00
[X11] Removed legacy X11Input driver
Its functionality has been moved directly into X11GLNative and X11KeyMap.
This commit is contained in:
parent
39eb3b1892
commit
ff46455e56
|
@ -366,9 +366,6 @@
|
||||||
<Compile Include="Platform\X11\Structs.cs">
|
<Compile Include="Platform\X11\Structs.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Platform\X11\X11Input.cs">
|
|
||||||
<SubType>Code</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Platform\X11\X11Factory.cs">
|
<Compile Include="Platform\X11\X11Factory.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
|
@ -57,11 +57,6 @@ namespace OpenTK.Platform.X11
|
||||||
|
|
||||||
X11WindowInfo window = new X11WindowInfo();
|
X11WindowInfo window = new X11WindowInfo();
|
||||||
|
|
||||||
// Legacy input support
|
|
||||||
X11Input driver;
|
|
||||||
KeyboardDevice keyboard;
|
|
||||||
MouseDevice mouse;
|
|
||||||
|
|
||||||
// Window manager hints for fullscreen windows.
|
// Window manager hints for fullscreen windows.
|
||||||
// Not used right now (the code is written, but is not 64bit-correct), but could be useful for older WMs which
|
// Not used right now (the code is written, but is not 64bit-correct), but could be useful for older WMs which
|
||||||
// are not ICCM compliant, but may support MOTIF hints.
|
// are not ICCM compliant, but may support MOTIF hints.
|
||||||
|
@ -124,9 +119,6 @@ namespace OpenTK.Platform.X11
|
||||||
// Keyboard input
|
// Keyboard input
|
||||||
readonly byte[] ascii = new byte[16];
|
readonly byte[] ascii = new byte[16];
|
||||||
readonly char[] chars = new char[16];
|
readonly char[] chars = new char[16];
|
||||||
readonly KeyPressEventArgs KPEventArgs = new KeyPressEventArgs('\0');
|
|
||||||
readonly KeyboardKeyEventArgs KeyDownEventArgs = new KeyboardKeyEventArgs();
|
|
||||||
readonly KeyboardKeyEventArgs KeyUpEventArgs = new KeyboardKeyEventArgs();
|
|
||||||
|
|
||||||
readonly IntPtr EmptyCursor;
|
readonly IntPtr EmptyCursor;
|
||||||
|
|
||||||
|
@ -224,15 +216,18 @@ namespace OpenTK.Platform.X11
|
||||||
e.ConfigureEvent.height = height;
|
e.ConfigureEvent.height = height;
|
||||||
RefreshWindowBounds(ref e);
|
RefreshWindowBounds(ref e);
|
||||||
|
|
||||||
driver = new X11Input(window);
|
|
||||||
keyboard = driver.Keyboard[0];
|
|
||||||
mouse = driver.Mouse[0];
|
|
||||||
|
|
||||||
EmptyCursor = CreateEmptyCursor(window);
|
EmptyCursor = CreateEmptyCursor(window);
|
||||||
|
|
||||||
Debug.WriteLine(String.Format("X11GLNative window created successfully (id: {0}).", Handle));
|
Debug.WriteLine(String.Format("X11GLNative window created successfully (id: {0}).", Handle));
|
||||||
Debug.Unindent();
|
Debug.Unindent();
|
||||||
|
|
||||||
|
// Request that auto-repeat is only set on devices that support it physically.
|
||||||
|
// This typically means that it's turned off for keyboards (which is what we want).
|
||||||
|
// We prefer this method over XAutoRepeatOff/On, because the latter needs to
|
||||||
|
// be reset before the program exits.
|
||||||
|
bool supported;
|
||||||
|
Functions.XkbSetDetectableAutoRepeat(window.Display, true, out supported);
|
||||||
|
|
||||||
exists = true;
|
exists = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -768,7 +763,7 @@ namespace OpenTK.Platform.X11
|
||||||
return cursor;
|
return cursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SetMouseClamped(MouseDevice mouse, int x, int y,
|
void SetMouseClamped(int x, int y,
|
||||||
int left, int top, int width, int height)
|
int left, int top, int width, int height)
|
||||||
{
|
{
|
||||||
// Clamp mouse to the specified rectangle.
|
// Clamp mouse to the specified rectangle.
|
||||||
|
@ -776,7 +771,8 @@ namespace OpenTK.Platform.X11
|
||||||
x = Math.Min(x, width);
|
x = Math.Min(x, width);
|
||||||
y = Math.Max(y, top);
|
y = Math.Max(y, top);
|
||||||
y = Math.Min(y, height);
|
y = Math.Min(y, height);
|
||||||
mouse.Position = new Point(x, y);
|
MouseState.X = x;
|
||||||
|
MouseState.Y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -860,23 +856,23 @@ namespace OpenTK.Platform.X11
|
||||||
case XEventName.KeyRelease:
|
case XEventName.KeyRelease:
|
||||||
bool pressed = e.type == XEventName.KeyPress;
|
bool pressed = e.type == XEventName.KeyPress;
|
||||||
Key key;
|
Key key;
|
||||||
if (driver.TranslateKey(ref e.KeyEvent, out key))
|
if (X11KeyMap.TranslateKey(ref e.KeyEvent, out key))
|
||||||
{
|
{
|
||||||
if (pressed)
|
if (pressed)
|
||||||
{
|
{
|
||||||
// Raise KeyDown event
|
// Raise KeyDown event
|
||||||
KeyDownEventArgs.Key = key;
|
KeyDownArgs.Key = key;
|
||||||
KeyDownEventArgs.ScanCode = (uint)e.KeyEvent.keycode;
|
KeyDownArgs.ScanCode = (uint)e.KeyEvent.keycode;
|
||||||
KeyDownEventArgs.Modifiers = keyboard.GetModifiers();
|
//KeyDownArgs.Modifiers = keyboard.GetModifiers();
|
||||||
KeyDown(this, KeyDownEventArgs);
|
OnKeyDown(KeyDownArgs);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Raise KeyUp event
|
// Raise KeyUp event
|
||||||
KeyUpEventArgs.Key = key;
|
KeyUpArgs.Key = key;
|
||||||
KeyUpEventArgs.ScanCode = (uint)e.KeyEvent.keycode;
|
KeyUpArgs.ScanCode = (uint)e.KeyEvent.keycode;
|
||||||
KeyUpEventArgs.Modifiers = keyboard.GetModifiers();
|
//KeyUpArgs.Modifiers = keyboard.GetModifiers();
|
||||||
KeyUp(this, KeyUpEventArgs);
|
OnKeyUp(KeyUpArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pressed)
|
if (pressed)
|
||||||
|
@ -892,8 +888,8 @@ namespace OpenTK.Platform.X11
|
||||||
{
|
{
|
||||||
if (!Char.IsControl(chars[i]))
|
if (!Char.IsControl(chars[i]))
|
||||||
{
|
{
|
||||||
KPEventArgs.KeyChar = chars[i];
|
KeyPressArgs.KeyChar = chars[i];
|
||||||
KeyPress(this, KPEventArgs);
|
OnKeyPress(KeyPressArgs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -907,7 +903,7 @@ namespace OpenTK.Platform.X11
|
||||||
// to the dead center of the window. Fortunately, this situation
|
// to the dead center of the window. Fortunately, this situation
|
||||||
// is very very uncommon. Todo: Can this be remedied?
|
// is very very uncommon. Todo: Can this be remedied?
|
||||||
int x = e.MotionEvent.x;
|
int x = e.MotionEvent.x;
|
||||||
int y =e.MotionEvent.y;
|
int y = e.MotionEvent.y;
|
||||||
// TODO: Have offset as a stored field, only update it when the window moves
|
// TODO: Have offset as a stored field, only update it when the window moves
|
||||||
// The middle point cannot be the average of the Bounds.left/right/top/bottom,
|
// The middle point cannot be the average of the Bounds.left/right/top/bottom,
|
||||||
// because these fields take into account window decoration (borders, etc),
|
// because these fields take into account window decoration (borders, etc),
|
||||||
|
@ -926,9 +922,9 @@ namespace OpenTK.Platform.X11
|
||||||
}
|
}
|
||||||
else if (!CursorVisible)
|
else if (!CursorVisible)
|
||||||
{
|
{
|
||||||
SetMouseClamped(mouse,
|
SetMouseClamped(
|
||||||
mouse.X + x - mouse_rel_x,
|
MouseState.X + x - mouse_rel_x,
|
||||||
mouse.Y + y - mouse_rel_y,
|
MouseState.Y + y - mouse_rel_y,
|
||||||
0, 0, Width, Height);
|
0, 0, Width, Height);
|
||||||
mouse_rel_x = x;
|
mouse_rel_x = x;
|
||||||
mouse_rel_y = y;
|
mouse_rel_y = y;
|
||||||
|
@ -939,16 +935,53 @@ namespace OpenTK.Platform.X11
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetMouseClamped(mouse, x, y, 0, 0, Width, Height);
|
SetMouseClamped(x, y, 0, 0, Width, Height);
|
||||||
mouse_rel_x = x;
|
mouse_rel_x = x;
|
||||||
mouse_rel_y = y;
|
mouse_rel_y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OnMouseMove();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case XEventName.ButtonPress:
|
case XEventName.ButtonPress:
|
||||||
|
switch (e.ButtonEvent.button)
|
||||||
|
{
|
||||||
|
case 1: MouseState.EnableBit((int)MouseButton.Left); break;
|
||||||
|
case 2: MouseState.EnableBit((int)MouseButton.Middle); break;
|
||||||
|
case 3: MouseState.EnableBit((int)MouseButton.Right); break;
|
||||||
|
case 4: MouseState.SetScrollRelative(0, 1); break;
|
||||||
|
case 5: MouseState.SetScrollRelative(0, -1); break;
|
||||||
|
case 6: MouseState.EnableBit((int)MouseButton.Button1); break;
|
||||||
|
case 7: MouseState.EnableBit((int)MouseButton.Button2); break;
|
||||||
|
case 8: MouseState.EnableBit((int)MouseButton.Button3); break;
|
||||||
|
case 9: MouseState.EnableBit((int)MouseButton.Button4); break;
|
||||||
|
case 10: MouseState.EnableBit((int)MouseButton.Button5); break;
|
||||||
|
case 11: MouseState.EnableBit((int)MouseButton.Button6); break;
|
||||||
|
case 12: MouseState.EnableBit((int)MouseButton.Button7); break;
|
||||||
|
case 13: MouseState.EnableBit((int)MouseButton.Button8); break;
|
||||||
|
case 14: MouseState.EnableBit((int)MouseButton.Button9); break;
|
||||||
|
}
|
||||||
|
OnMouseDown();
|
||||||
|
break;
|
||||||
|
|
||||||
case XEventName.ButtonRelease:
|
case XEventName.ButtonRelease:
|
||||||
driver.ProcessEvent(ref e);
|
switch (e.ButtonEvent.button)
|
||||||
|
{
|
||||||
|
case 1: MouseState.DisableBit((int)MouseButton.Left); break;
|
||||||
|
case 2: MouseState.DisableBit((int)MouseButton.Middle); break;
|
||||||
|
case 3: MouseState.DisableBit((int)MouseButton.Right); break;
|
||||||
|
case 6: MouseState.DisableBit((int)MouseButton.Button1); break;
|
||||||
|
case 7: MouseState.DisableBit((int)MouseButton.Button2); break;
|
||||||
|
case 8: MouseState.DisableBit((int)MouseButton.Button3); break;
|
||||||
|
case 9: MouseState.DisableBit((int)MouseButton.Button4); break;
|
||||||
|
case 10: MouseState.DisableBit((int)MouseButton.Button5); break;
|
||||||
|
case 11: MouseState.DisableBit((int)MouseButton.Button6); break;
|
||||||
|
case 12: MouseState.DisableBit((int)MouseButton.Button7); break;
|
||||||
|
case 13: MouseState.DisableBit((int)MouseButton.Button8); break;
|
||||||
|
case 14: MouseState.DisableBit((int)MouseButton.Button9); break;
|
||||||
|
}
|
||||||
|
OnMouseUp();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XEventName.FocusIn:
|
case XEventName.FocusIn:
|
||||||
|
@ -1532,18 +1565,6 @@ namespace OpenTK.Platform.X11
|
||||||
|
|
||||||
#region --- INativeGLWindow Members ---
|
#region --- INativeGLWindow Members ---
|
||||||
|
|
||||||
#region public IInputDriver InputDriver
|
|
||||||
|
|
||||||
public IInputDriver InputDriver
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return driver;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region public bool Exists
|
#region public bool Exists
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1,235 +0,0 @@
|
||||||
#region --- License ---
|
|
||||||
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
|
|
||||||
* See license.txt for license info
|
|
||||||
*/
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
#if !MINIMAL
|
|
||||||
using System.Drawing;
|
|
||||||
#endif
|
|
||||||
using System.Text;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
using OpenTK.Input;
|
|
||||||
|
|
||||||
namespace OpenTK.Platform.X11
|
|
||||||
{
|
|
||||||
/// \internal
|
|
||||||
/// <summary>
|
|
||||||
/// Drives the InputDriver on X11.
|
|
||||||
/// This class supports OpenTK, and is not intended for users of OpenTK.
|
|
||||||
/// </summary>
|
|
||||||
internal sealed class X11Input : IInputDriver
|
|
||||||
{
|
|
||||||
KeyboardDevice keyboard = new KeyboardDevice();
|
|
||||||
MouseDevice mouse = new MouseDevice();
|
|
||||||
List<KeyboardDevice> dummy_keyboard_list = new List<KeyboardDevice>(1);
|
|
||||||
List<MouseDevice> dummy_mice_list = new List<MouseDevice>(1);
|
|
||||||
|
|
||||||
int firstKeyCode, lastKeyCode; // The smallest and largest KeyCode supported by the X server.
|
|
||||||
int keysyms_per_keycode; // The number of KeySyms for each KeyCode.
|
|
||||||
IntPtr[] keysyms;
|
|
||||||
|
|
||||||
//bool disposed;
|
|
||||||
|
|
||||||
#region --- Constructors ---
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Constructs a new X11Input driver. Creates a hidden InputOnly window, child to
|
|
||||||
/// the main application window, which selects input events and routes them to
|
|
||||||
/// the device specific drivers (Keyboard, Mouse, Hid).
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="attach">The window which the InputDriver will attach itself on.</param>
|
|
||||||
public X11Input(IWindowInfo attach)
|
|
||||||
{
|
|
||||||
Debug.WriteLine("Initalizing X11 input driver.");
|
|
||||||
Debug.Indent();
|
|
||||||
|
|
||||||
if (attach == null)
|
|
||||||
throw new ArgumentException("A valid parent window must be defined, in order to create an X11Input driver.");
|
|
||||||
|
|
||||||
//window = new X11WindowInfo(attach);
|
|
||||||
X11WindowInfo window = (X11WindowInfo)attach;
|
|
||||||
|
|
||||||
// Init mouse
|
|
||||||
mouse.Description = "Default X11 mouse";
|
|
||||||
mouse.DeviceID = IntPtr.Zero;
|
|
||||||
mouse.NumberOfButtons = 5;
|
|
||||||
mouse.NumberOfWheels = 1;
|
|
||||||
dummy_mice_list.Add(mouse);
|
|
||||||
|
|
||||||
using (new XLock(window.Display))
|
|
||||||
{
|
|
||||||
// Init keyboard
|
|
||||||
API.DisplayKeycodes(window.Display, ref firstKeyCode, ref lastKeyCode);
|
|
||||||
Debug.Print("First keycode: {0}, last {1}", firstKeyCode, lastKeyCode);
|
|
||||||
|
|
||||||
IntPtr keysym_ptr = API.GetKeyboardMapping(window.Display, (byte)firstKeyCode,
|
|
||||||
lastKeyCode - firstKeyCode + 1, ref keysyms_per_keycode);
|
|
||||||
Debug.Print("{0} keysyms per keycode.", keysyms_per_keycode);
|
|
||||||
|
|
||||||
keysyms = new IntPtr[(lastKeyCode - firstKeyCode + 1) * keysyms_per_keycode];
|
|
||||||
Marshal.PtrToStructure(keysym_ptr, keysyms);
|
|
||||||
API.Free(keysym_ptr);
|
|
||||||
|
|
||||||
keyboard.Description = "Default X11 keyboard";
|
|
||||||
keyboard.NumberOfKeys = lastKeyCode - firstKeyCode + 1;
|
|
||||||
keyboard.DeviceID = IntPtr.Zero;
|
|
||||||
dummy_keyboard_list.Add(keyboard);
|
|
||||||
|
|
||||||
// Request that auto-repeat is only set on devices that support it physically.
|
|
||||||
// This typically means that it's turned off for keyboards (which is what we want).
|
|
||||||
// We prefer this method over XAutoRepeatOff/On, because the latter needs to
|
|
||||||
// be reset before the program exits.
|
|
||||||
bool supported;
|
|
||||||
Functions.XkbSetDetectableAutoRepeat(window.Display, true, out supported);
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug.Unindent();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region TranslateKey
|
|
||||||
|
|
||||||
internal bool TranslateKey(ref XKeyEvent e, out Key key)
|
|
||||||
{
|
|
||||||
XKey keysym = (XKey)API.LookupKeysym(ref e, 0);
|
|
||||||
XKey keysym2 = (XKey)API.LookupKeysym(ref e, 1);
|
|
||||||
key = X11KeyMap.GetKey(keysym);
|
|
||||||
if (key == Key.Unknown)
|
|
||||||
{
|
|
||||||
key = X11KeyMap.GetKey(keysym2);
|
|
||||||
}
|
|
||||||
if (key == Key.Unknown)
|
|
||||||
{
|
|
||||||
Debug.Print("KeyCode {0} (Keysym: {1}, {2}) not mapped.", e.keycode, (XKey)keysym, (XKey)keysym2);
|
|
||||||
}
|
|
||||||
|
|
||||||
return key != Key.Unknown;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region internal void ProcessEvent(ref XEvent e)
|
|
||||||
|
|
||||||
internal void ProcessEvent(ref XEvent e)
|
|
||||||
{
|
|
||||||
switch (e.type)
|
|
||||||
{
|
|
||||||
case XEventName.ButtonPress:
|
|
||||||
if (e.ButtonEvent.button == 1) mouse[OpenTK.Input.MouseButton.Left] = true;
|
|
||||||
else if (e.ButtonEvent.button == 2) mouse[OpenTK.Input.MouseButton.Middle] = true;
|
|
||||||
else if (e.ButtonEvent.button == 3) mouse[OpenTK.Input.MouseButton.Right] = true;
|
|
||||||
else if (e.ButtonEvent.button == 4) mouse.Wheel++;
|
|
||||||
else if (e.ButtonEvent.button == 5) mouse.Wheel--;
|
|
||||||
else if (e.ButtonEvent.button == 6) mouse[OpenTK.Input.MouseButton.Button1] = true;
|
|
||||||
else if (e.ButtonEvent.button == 7) mouse[OpenTK.Input.MouseButton.Button2] = true;
|
|
||||||
else if (e.ButtonEvent.button == 8) mouse[OpenTK.Input.MouseButton.Button3] = true;
|
|
||||||
else if (e.ButtonEvent.button == 9) mouse[OpenTK.Input.MouseButton.Button4] = true;
|
|
||||||
else if (e.ButtonEvent.button == 10) mouse[OpenTK.Input.MouseButton.Button5] = true;
|
|
||||||
else if (e.ButtonEvent.button == 11) mouse[OpenTK.Input.MouseButton.Button6] = true;
|
|
||||||
else if (e.ButtonEvent.button == 12) mouse[OpenTK.Input.MouseButton.Button7] = true;
|
|
||||||
else if (e.ButtonEvent.button == 13) mouse[OpenTK.Input.MouseButton.Button8] = true;
|
|
||||||
else if (e.ButtonEvent.button == 14) mouse[OpenTK.Input.MouseButton.Button9] = true;
|
|
||||||
//if ((e.state & (int)X11.MouseMask.Button4Mask) != 0) m.Wheel++;
|
|
||||||
//if ((e.state & (int)X11.MouseMask.Button5Mask) != 0) m.Wheel--;
|
|
||||||
//Debug.Print("Button pressed: {0}", e.ButtonEvent.button);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case XEventName.ButtonRelease:
|
|
||||||
if (e.ButtonEvent.button == 1) mouse[OpenTK.Input.MouseButton.Left] = false;
|
|
||||||
else if (e.ButtonEvent.button == 2) mouse[OpenTK.Input.MouseButton.Middle] = false;
|
|
||||||
else if (e.ButtonEvent.button == 3) mouse[OpenTK.Input.MouseButton.Right] = false;
|
|
||||||
else if (e.ButtonEvent.button == 6) mouse[OpenTK.Input.MouseButton.Button1] = false;
|
|
||||||
else if (e.ButtonEvent.button == 7) mouse[OpenTK.Input.MouseButton.Button2] = false;
|
|
||||||
else if (e.ButtonEvent.button == 8) mouse[OpenTK.Input.MouseButton.Button3] = false;
|
|
||||||
else if (e.ButtonEvent.button == 9) mouse[OpenTK.Input.MouseButton.Button4] = false;
|
|
||||||
else if (e.ButtonEvent.button == 10) mouse[OpenTK.Input.MouseButton.Button5] = false;
|
|
||||||
else if (e.ButtonEvent.button == 11) mouse[OpenTK.Input.MouseButton.Button6] = false;
|
|
||||||
else if (e.ButtonEvent.button == 12) mouse[OpenTK.Input.MouseButton.Button7] = false;
|
|
||||||
else if (e.ButtonEvent.button == 13) mouse[OpenTK.Input.MouseButton.Button8] = false;
|
|
||||||
else if (e.ButtonEvent.button == 14) mouse[OpenTK.Input.MouseButton.Button9] = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case XEventName.MotionNotify:
|
|
||||||
mouse.Position = new Point(e.MotionEvent.x, e.MotionEvent.y);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region --- IInputDriver Members ---
|
|
||||||
|
|
||||||
#region public IList<Keyboard> Keyboard
|
|
||||||
|
|
||||||
public IList<KeyboardDevice> Keyboard
|
|
||||||
{
|
|
||||||
get { return dummy_keyboard_list; }//return keyboardDriver.Keyboard;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region public IList<Mouse> Mouse
|
|
||||||
|
|
||||||
public IList<MouseDevice> Mouse
|
|
||||||
{
|
|
||||||
get { return (IList<MouseDevice>)dummy_mice_list; } //return mouseDriver.Mouse;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public IList<JoystickDevice> Joysticks
|
|
||||||
{
|
|
||||||
get { throw new NotImplementedException(); }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region public void Poll()
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Polls and updates state of all keyboard, mouse and joystick devices.
|
|
||||||
/// </summary>
|
|
||||||
public void Poll()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region --- IDisposable Members ---
|
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
//this.Dispose(true);
|
|
||||||
//GC.SuppressFinalize(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//private void Dispose(bool manual)
|
|
||||||
//{
|
|
||||||
// if (!disposed)
|
|
||||||
// {
|
|
||||||
// //disposing = true;
|
|
||||||
// if (pollingThread != null && pollingThread.IsAlive)
|
|
||||||
// pollingThread.Abort();
|
|
||||||
|
|
||||||
// if (manual)
|
|
||||||
// {
|
|
||||||
// }
|
|
||||||
|
|
||||||
// disposed = true;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//~X11Input()
|
|
||||||
//{
|
|
||||||
// this.Dispose(false);
|
|
||||||
//}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -370,5 +370,22 @@ namespace OpenTK.Platform.X11
|
||||||
return Key.Unknown;
|
return Key.Unknown;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static bool TranslateKey(ref XKeyEvent e, out Key key)
|
||||||
|
{
|
||||||
|
XKey keysym = (XKey)API.LookupKeysym(ref e, 0);
|
||||||
|
XKey keysym2 = (XKey)API.LookupKeysym(ref e, 1);
|
||||||
|
key = X11KeyMap.GetKey(keysym);
|
||||||
|
if (key == Key.Unknown)
|
||||||
|
{
|
||||||
|
key = X11KeyMap.GetKey(keysym2);
|
||||||
|
}
|
||||||
|
if (key == Key.Unknown)
|
||||||
|
{
|
||||||
|
Debug.Print("KeyCode {0} (Keysym: {1}, {2}) not mapped.", e.keycode, (XKey)keysym, (XKey)keysym2);
|
||||||
|
}
|
||||||
|
|
||||||
|
return key != Key.Unknown;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue