Files
Dashboard/Dashboard.OpenTK/PAL2/Extensions.cs
T

205 lines
8.6 KiB
C#

using Dashboard.Events;
using OpenTK.Platform;
namespace Dashboard.OpenTK.PAL2
{
public static class Extensions
{
public static ModifierKeys ToDashboard(this KeyModifier modifier)
{
ModifierKeys keys = 0;
keys |= modifier.HasFlag(KeyModifier.NumLock) ? ModifierKeys.NumLock : 0;
keys |= modifier.HasFlag(KeyModifier.CapsLock) ? ModifierKeys.CapsLock : 0;
keys |= modifier.HasFlag(KeyModifier.ScrollLock) ? ModifierKeys.ScrollLock : 0;
keys |= modifier.HasFlag(KeyModifier.LeftShift) ? ModifierKeys.LeftShift : 0;
keys |= modifier.HasFlag(KeyModifier.LeftControl) ? ModifierKeys.LeftControl : 0;
keys |= modifier.HasFlag(KeyModifier.LeftAlt) ? ModifierKeys.LeftAlt : 0;
keys |= modifier.HasFlag(KeyModifier.LeftGUI) ? ModifierKeys.LeftMeta : 0;
keys |= modifier.HasFlag(KeyModifier.RightShift) ? ModifierKeys.RightShift : 0;
keys |= modifier.HasFlag(KeyModifier.RightControl) ? ModifierKeys.RightControl : 0;
keys |= modifier.HasFlag(KeyModifier.RightAlt) ? ModifierKeys.RightAlt : 0;
keys |= modifier.HasFlag(KeyModifier.RightGUI) ? ModifierKeys.RightMeta : 0;
keys |= modifier.HasFlag(KeyModifier.Shift) ? ModifierKeys.Shift : 0;
keys |= modifier.HasFlag(KeyModifier.Control) ? ModifierKeys.Control : 0;
keys |= modifier.HasFlag(KeyModifier.Alt) ? ModifierKeys.Alt : 0;
keys |= modifier.HasFlag(KeyModifier.GUI) ? ModifierKeys.Meta : 0;
// C# makes this cast as annoying as possible.
keys |= (ModifierKeys)((((int)keys >> (int)ModifierKeys.RightBitPos) & 0xF) |
(((int)keys >> (int)ModifierKeys.LeftBitPos) & 0xF));
return keys;
}
public static KeyCode ToDashboard(this Key key) => key switch
{
// TODO: Keycode table. Keycodes are subject to change upstream.
_ => (KeyCode)0,
};
public static ScanCode ToDashboard(this Scancode scanCode) => scanCode switch
{
// TODO: Revise this array.
Scancode.Unknown => ScanCode.Error,
Scancode.A => ScanCode.A,
Scancode.B => ScanCode.B,
Scancode.C => ScanCode.C,
Scancode.D => ScanCode.D,
Scancode.E => ScanCode.E,
Scancode.F => ScanCode.F,
Scancode.G => ScanCode.G,
Scancode.H => ScanCode.H,
Scancode.I => ScanCode.I,
Scancode.J => ScanCode.J,
Scancode.K => ScanCode.K,
Scancode.L => ScanCode.L,
Scancode.M => ScanCode.M,
Scancode.N => ScanCode.N,
Scancode.O => ScanCode.O,
Scancode.P => ScanCode.P,
Scancode.Q => ScanCode.Q,
Scancode.R => ScanCode.R,
Scancode.S => ScanCode.S,
Scancode.T => ScanCode.T,
Scancode.U => ScanCode.U,
Scancode.V => ScanCode.V,
Scancode.W => ScanCode.W,
Scancode.X => ScanCode.X,
Scancode.Y => ScanCode.Y,
Scancode.Z => ScanCode.Z,
Scancode.D0 => ScanCode.D0,
Scancode.D1 => ScanCode.D1,
Scancode.D2 => ScanCode.D2,
Scancode.D3 => ScanCode.D3,
Scancode.D4 => ScanCode.D4,
Scancode.D5 => ScanCode.D5,
Scancode.D6 => ScanCode.D6,
Scancode.D7 => ScanCode.D7,
Scancode.D8 => ScanCode.D8,
Scancode.D9 => ScanCode.D9,
Scancode.Return => ScanCode.Return,
Scancode.Escape => ScanCode.Esc,
Scancode.Backspace => ScanCode.Backspace,
Scancode.Tab => ScanCode.Tab,
Scancode.Spacebar => ScanCode.Space,
Scancode.Dash => ScanCode.Dash,
Scancode.Equals => ScanCode.Equals,
Scancode.LeftBrace => ScanCode.LBracket,
Scancode.RightBrace => ScanCode.RBracket,
Scancode.SemiColon => ScanCode.Semicolon,
Scancode.LeftApostrophe => ScanCode.Apostrophe,
Scancode.GraveAccent => ScanCode.Grave,
Scancode.Comma => ScanCode.Comma,
Scancode.Period => ScanCode.Period,
Scancode.CapsLock => ScanCode.CapsLock,
Scancode.F1 => ScanCode.F1,
Scancode.F2 => ScanCode.F2,
Scancode.F3 => ScanCode.F3,
Scancode.F4 => ScanCode.F4,
Scancode.F5 => ScanCode.F5,
Scancode.F6 => ScanCode.F6,
Scancode.F7 => ScanCode.F7,
Scancode.F8 => ScanCode.F8,
Scancode.F9 => ScanCode.F9,
Scancode.F10 => ScanCode.F10,
Scancode.F11 => ScanCode.F11,
Scancode.F12 => ScanCode.F12,
Scancode.F13 => ScanCode.F13,
Scancode.F14 => ScanCode.F14,
Scancode.F15 => ScanCode.F15,
Scancode.F16 => ScanCode.F16,
Scancode.F17 => ScanCode.F17,
Scancode.F18 => ScanCode.F18,
Scancode.F19 => ScanCode.F19,
Scancode.F20 => ScanCode.F20,
Scancode.F21 => ScanCode.F21,
Scancode.F22 => ScanCode.F22,
Scancode.F23 => ScanCode.F23,
Scancode.F24 => ScanCode.F24,
Scancode.PrintScreen => ScanCode.PrintScr,
Scancode.ScrollLock => ScanCode.ScrollLock,
Scancode.Pause => ScanCode.Pause,
Scancode.Insert => ScanCode.Insert,
Scancode.Home => ScanCode.Home,
Scancode.PageUp => ScanCode.PageUp,
Scancode.Delete => ScanCode.Delete,
Scancode.End => ScanCode.End,
Scancode.PageDown => ScanCode.PageDown,
Scancode.RightArrow => ScanCode.RightArrow,
Scancode.LeftArrow => ScanCode.LeftArrow,
Scancode.DownArrow => ScanCode.DownArrow,
Scancode.UpArrow => ScanCode.UpArrow,
Scancode.NumLock => ScanCode.NumLock,
Scancode.KeypadEnter => ScanCode.NumEnter,
Scancode.Keypad1 => ScanCode.Num1,
Scancode.Keypad2 => ScanCode.Num2,
Scancode.Keypad3 => ScanCode.Num3,
Scancode.Keypad4 => ScanCode.Num4,
Scancode.Keypad5 => ScanCode.Num5,
Scancode.Keypad6 => ScanCode.Num6,
Scancode.Keypad7 => ScanCode.Num7,
Scancode.Keypad8 => ScanCode.Num8,
Scancode.Keypad9 => ScanCode.Num9,
Scancode.Keypad0 => ScanCode.Num0,
Scancode.KeypadForwardSlash => ScanCode.NumDiv,
Scancode.KeypadPeriod => ScanCode.NumDecimal,
Scancode.KeypadStar => ScanCode.NumMul,
Scancode.KeypadDash => ScanCode.NumSub,
Scancode.KeypadPlus => ScanCode.NumAdd,
Scancode.KeypadEquals => ScanCode.NumEquals,
Scancode.KeypadComma => ScanCode.NumComma,
Scancode.Application => ScanCode.Application,
Scancode.International1 => ScanCode.International1,
Scancode.International2 => ScanCode.International2,
Scancode.International3 => ScanCode.International3,
Scancode.International4 => ScanCode.International4,
Scancode.International5 => ScanCode.International5,
Scancode.International6 => ScanCode.International6,
Scancode.LANG1 => ScanCode.Lang1,
Scancode.LANG2 => ScanCode.Lang2,
Scancode.LANG3 => ScanCode.Lang3,
Scancode.LANG4 => ScanCode.Lang4,
Scancode.LANG5 => ScanCode.Lang5,
Scancode.LeftControl => ScanCode.LCtrl,
Scancode.LeftShift => ScanCode.LShift,
Scancode.LeftAlt => ScanCode.LAlt,
Scancode.LeftGUI => ScanCode.LWin,
Scancode.RightControl => ScanCode.RCtrl,
Scancode.RightShift => ScanCode.RShift,
Scancode.RightAlt => ScanCode.RAlt,
Scancode.RightGUI => ScanCode.RWin,
Scancode.SystemPowerDown => ScanCode.SystemPowerDown,
Scancode.SystemSleep => ScanCode.SystemSleep,
Scancode.SystemWakeUp => ScanCode.SystemWakeUp,
Scancode.ScanNextTrack => ScanCode.NextTrack,
Scancode.ScanPreviousTrack => ScanCode.PrevTrack,
Scancode.Stop => ScanCode.Stop,
Scancode.PlayPause => ScanCode.PlayPause,
Scancode.Mute => ScanCode.Mute,
Scancode.VolumeIncrement => ScanCode.VolUp,
Scancode.VolumeDecrement => ScanCode.VolDown,
Scancode.NonUSSlashBar => ScanCode.NonUsSlashBar,
Scancode.Pipe => ScanCode.Backslash,
Scancode.QuestionMark => ScanCode.ForwardSlash,
_ => (ScanCode)0,
};
}
}