Opentk/Source/OpenTK/Platform/X11/X11KeyMap.cs
thefiddler e155d647de [X11] Added X11KeyMap.TranslateButton()
This code was duplicated on four different places before.
2014-05-04 17:04:03 +02:00

417 lines
14 KiB
C#

#region --- License ---
/* Licensed under the MIT/X11 license.
* Copyright (c) 2006-2008 the OpenTK team.
* This notice may not be removed.
* See license.txt for licensing detailed licensing details.
*/
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using OpenTK.Input;
namespace OpenTK.Platform.X11
{
static class X11KeyMap
{
public static Key GetKey(XKey key)
{
switch (key)
{
case XKey.Escape:
return Key.Escape;
case XKey.Return:
return Key.Enter;
case XKey.space:
return Key.Space;
case XKey.BackSpace:
return Key.BackSpace;
case XKey.Shift_L:
return Key.ShiftLeft;
case XKey.Shift_R:
return Key.ShiftRight;
case XKey.Alt_L:
return Key.AltLeft;
case XKey.Alt_R:
return Key.AltRight;
case XKey.Control_L:
return Key.ControlLeft;
case XKey.Control_R:
return Key.ControlRight;
case XKey.Super_L:
return Key.WinLeft;
case XKey.Super_R:
return Key.WinRight;
case XKey.Meta_L:
return Key.WinLeft;
case XKey.Meta_R:
return Key.WinRight;
case XKey.ISO_Level3_Shift:
return Key.AltRight; // Normally AltGr
case XKey.Menu:
return Key.Menu;
case XKey.Tab:
return Key.Tab;
case XKey.minus:
return Key.Minus;
case XKey.plus:
return Key.Plus;
case XKey.equal:
return Key.Plus;
case XKey.Caps_Lock:
return Key.CapsLock;
case XKey.Num_Lock:
return Key.NumLock;
case XKey.F1:
return Key.F1;
case XKey.F2:
return Key.F2;
case XKey.F3:
return Key.F3;
case XKey.F4:
return Key.F4;
case XKey.F5:
return Key.F5;
case XKey.F6:
return Key.F6;
case XKey.F7:
return Key.F7;
case XKey.F8:
return Key.F8;
case XKey.F9:
return Key.F9;
case XKey.F10:
return Key.F10;
case XKey.F11:
return Key.F11;
case XKey.F12:
return Key.F12;
case XKey.F13:
return Key.F13;
case XKey.F14:
return Key.F14;
case XKey.F15:
return Key.F15;
case XKey.F16:
return Key.F16;
case XKey.F17:
return Key.F17;
case XKey.F18:
return Key.F18;
case XKey.F19:
return Key.F19;
case XKey.F20:
return Key.F20;
case XKey.F21:
return Key.F21;
case XKey.F22:
return Key.F22;
case XKey.F23:
return Key.F23;
case XKey.F24:
return Key.F24;
case XKey.F25:
return Key.F25;
case XKey.F26:
return Key.F26;
case XKey.F27:
return Key.F27;
case XKey.F28:
return Key.F28;
case XKey.F29:
return Key.F29;
case XKey.F30:
return Key.F30;
case XKey.F31:
return Key.F31;
case XKey.F32:
return Key.F32;
case XKey.F33:
return Key.F33;
case XKey.F34:
return Key.F34;
case XKey.F35:
return Key.F35;
case XKey.a:
case XKey.A:
return Key.A;
case XKey.b:
case XKey.B:
return Key.B;
case XKey.c:
case XKey.C:
return Key.C;
case XKey.d:
case XKey.D:
return Key.D;
case XKey.e:
case XKey.E:
return Key.E;
case XKey.f:
case XKey.F:
return Key.F;
case XKey.g:
case XKey.G:
return Key.G;
case XKey.h:
case XKey.H:
return Key.H;
case XKey.i:
case XKey.I:
return Key.I;
case XKey.j:
case XKey.J:
return Key.J;
case XKey.k:
case XKey.K:
return Key.K;
case XKey.l:
case XKey.L:
return Key.L;
case XKey.m:
case XKey.M:
return Key.M;
case XKey.n:
case XKey.N:
return Key.N;
case XKey.o:
case XKey.O:
return Key.O;
case XKey.p:
case XKey.P:
return Key.P;
case XKey.q:
case XKey.Q:
return Key.Q;
case XKey.r:
case XKey.R:
return Key.R;
case XKey.s:
case XKey.S:
return Key.S;
case XKey.t:
case XKey.T:
return Key.T;
case XKey.u:
case XKey.U:
return Key.U;
case XKey.v:
case XKey.V:
return Key.V;
case XKey.w:
case XKey.W:
return Key.W;
case XKey.x:
case XKey.X:
return Key.X;
case XKey.y:
case XKey.Y:
return Key.Y;
case XKey.z:
case XKey.Z:
return Key.Z;
case XKey.Number0:
return Key.Number0;
case XKey.Number1:
return Key.Number1;
case XKey.Number2:
return Key.Number2;
case XKey.Number3:
return Key.Number3;
case XKey.Number4:
return Key.Number4;
case XKey.Number5:
return Key.Number5;
case XKey.Number6:
return Key.Number6;
case XKey.Number7:
return Key.Number7;
case XKey.Number8:
return Key.Number8;
case XKey.Number9:
return Key.Number9;
case XKey.KP_0:
return Key.Keypad0;
case XKey.KP_1:
return Key.Keypad1;
case XKey.KP_2:
return Key.Keypad2;
case XKey.KP_3:
return Key.Keypad3;
case XKey.KP_4:
return Key.Keypad4;
case XKey.KP_5:
return Key.Keypad5;
case XKey.KP_6:
return Key.Keypad6;
case XKey.KP_7:
return Key.Keypad7;
case XKey.KP_8:
return Key.Keypad8;
case XKey.KP_9:
return Key.Keypad9;
case XKey.Pause:
return Key.Pause;
case XKey.Break:
return Key.Pause;
case XKey.Scroll_Lock:
return Key.Pause;
case XKey.Insert:
return Key.PrintScreen;
case XKey.Print:
return Key.PrintScreen;
case XKey.Sys_Req:
return Key.PrintScreen;
case XKey.backslash:
return Key.BackSlash;
case XKey.bar:
return Key.BackSlash;
case XKey.braceleft:
return Key.BracketLeft;
case XKey.bracketleft:
return Key.BracketLeft;
case XKey.braceright:
return Key.BracketRight;
case XKey.bracketright:
return Key.BracketRight;
case XKey.colon:
return Key.Semicolon;
case XKey.semicolon:
return Key.Semicolon;
case XKey.quoteright:
return Key.Quote;
case XKey.quotedbl:
return Key.Quote;
case XKey.quoteleft:
return Key.Tilde;
case XKey.asciitilde:
return Key.Tilde;
case XKey.comma:
return Key.Comma;
case XKey.less:
return Key.Comma;
case XKey.period:
return Key.Period;
case XKey.greater:
return Key.Period;
case XKey.slash:
return Key.Slash;
case XKey.question:
return Key.Slash;
case XKey.Left:
return Key.Left;
case XKey.Down:
return Key.Down;
case XKey.Right:
return Key.Right;
case XKey.Up:
return Key.Up;
case XKey.Delete:
return Key.Delete;
case XKey.Home:
return Key.Home;
case XKey.End:
return Key.End;
//case XKey.Prior: return Key.PageUp; // XKey.Prior == XKey.Page_Up
case XKey.Page_Up:
return Key.PageUp;
case XKey.Page_Down:
return Key.PageDown;
//case XKey.Next: return Key.PageDown; // XKey.Next == XKey.Page_Down
case XKey.KP_Add:
return Key.KeypadAdd;
case XKey.KP_Subtract:
return Key.KeypadSubtract;
case XKey.KP_Multiply:
return Key.KeypadMultiply;
case XKey.KP_Divide:
return Key.KeypadDivide;
case XKey.KP_Decimal:
return Key.KeypadDecimal;
case XKey.KP_Insert:
return Key.Keypad0;
case XKey.KP_End:
return Key.Keypad1;
case XKey.KP_Down:
return Key.Keypad2;
case XKey.KP_Page_Down:
return Key.Keypad3;
case XKey.KP_Left:
return Key.Keypad4;
case XKey.KP_Right:
return Key.Keypad6;
case XKey.KP_Home:
return Key.Keypad7;
case XKey.KP_Up:
return Key.Keypad8;
case XKey.KP_Page_Up:
return Key.Keypad9;
case XKey.KP_Delete:
return Key.KeypadDecimal;
case XKey.KP_Enter:
return Key.KeypadEnter;
default:
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;
}
internal static MouseButton TranslateButton(int button, out int wheelx, out int wheely)
{
wheelx = 0;
wheely = 0;
switch (button)
{
case 1: return MouseButton.Left;
case 2: return MouseButton.Middle;
case 3: return MouseButton.Right;
case 4: wheely = +1; return MouseButton.LastButton;
case 5: wheely = -1; return MouseButton.LastButton;
case 6: wheelx = +1; return MouseButton.LastButton;
case 7: wheelx = -1; return MouseButton.LastButton;
case 8: return MouseButton.Button1;
case 9: return MouseButton.Button2;
case 10: return MouseButton.Button3;
case 11: return MouseButton.Button4;
case 12: return MouseButton.Button5;
case 13: return MouseButton.Button6;
case 14: return MouseButton.Button7;
default: return MouseButton.LastButton;
}
}
}
}