1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-27 20:18:01 +02:00
Beef/BeefLibs/Beefy2D/src/widgets/KeyCode.bf

203 lines
3.9 KiB
Beef
Raw Normal View History

2019-08-23 11:56:54 -07:00
using System;
using System.Collections;
2019-08-23 11:56:54 -07:00
using System.Text;
using System.Reflection;
namespace Beefy.widgets
{
2019-12-25 17:36:58 -08:00
[AllowDuplicates]
2019-08-23 11:56:54 -07:00
public enum KeyCode
{
LButton = 0x01,
RButton = 0x02,
Break = 0x03,
MButton = 0x04,
Backspace = 0x08,
Tab = 0x09,
Clear = 0x0C,
Return = 0x0D,
Shift = 0x10,
Control = 0x11,
Alt = 0x12,
Menu = 0x12,
Pause = 0x13,
Capital = 0x14,
Kana = 0x15,
Hangul = 0x15,
Junja = 0x17,
Final = 0x18,
Hanja = 0x19,
Kanji = 0x19,
Escape = 0x1B,
Convert = 0x1C,
NonConvert = 0x1D,
Accept = 0x1E,
ModeChange = 0x1F,
Space = 0x20,
PageUp = 0x21,
PageDown = 0x22,
End = 0x23,
Home = 0x24,
Left = 0x25,
Up = 0x26,
Right = 0x27,
Down = 0x28,
Select = 0x29,
Print = 0x2A,
Execute = 0x2B,
Snapshot = 0x2C,
Insert = 0x2D,
Delete = 0x2E,
Help = 0x2F,
LWin = 0x5B,
RWin = 0x5C,
Apps = 0x5D,
Numpad0 = 0x60,
Numpad1 = 0x61,
Numpad2 = 0x62,
Numpad3 = 0x63,
Numpad4 = 0x64,
Numpad5 = 0x65,
Numpad6 = 0x66,
Numpad7 = 0x67,
Numpad8 = 0x68,
Numpad9 = 0x69,
Multiply = 0x6A,
Add = 0x6B,
Separator = 0x6C,
Subtract = 0x6D,
Decimal = 0x6E,
Divide = 0x6F,
F1 = 0x70,
F2 = 0x71,
F3 = 0x72,
F4 = 0x73,
F5 = 0x74,
F6 = 0x75,
F7 = 0x76,
F8 = 0x77,
F9 = 0x78,
F10 = 0x79,
F11 = 0x7A,
F12 = 0x7B,
Numlock = 0x90,
Scroll = 0x91,
RAlt = 0xA5,
RMenu = 0xA5,
2019-08-23 11:56:54 -07:00
Semicolon = 0xBA,
Equals = 0xBB,
Comma = 0xBC,
Minus = 0xBD,
Period = 0xBE,
Slash = 0xBF,
Tilde = 0xC0,
2019-08-23 11:56:54 -07:00
Grave = 0xC0,
LBracket = 0xDB,
Backslash = 0xDC,
RBracket = 0xDD,
Apostrophe = 0xDE,
Backtick = 0xDF,
Command = 0xF0,
COUNT = 0xFF,
Media_NextTrack = 0xB0,
Media_PreviousTrack = 0xB1,
Media_PlayPause = 0xB3,
//Z = 0xB4
}
extension KeyCode
{
2021-02-25 10:14:22 -08:00
public bool IsModifier
{
get
{
switch (this)
{
case .LWin,
.RWin,
.Alt,
.Control,
.Command:
return true;
default:
return false;
}
}
}
2019-08-23 11:56:54 -07:00
public static Result<KeyCode> Parse(StringView str)
{
if (str.Length == 1)
{
char8 c = str[0];
if ((c >= 'A') && (c <= 'Z'))
return (KeyCode)c;
if ((c >= '0') && (c <= '9'))
return (KeyCode)c;
if ((c >= 'a') && (c <= 'a'))
return (KeyCode)(c.ToUpper);
2021-02-03 12:48:04 -08:00
if (c == '[')
return (KeyCode)LBracket;
if (c == ']')
return (KeyCode)RBracket;
if (c == '/')
return (KeyCode)Slash;
if (c == '\\')
return (KeyCode)Backslash;
if (c == '`')
return (KeyCode)Tilde;
if (c == '.')
return (KeyCode)Period;
if (c == ',')
return (KeyCode)Comma;
2019-08-23 11:56:54 -07:00
}
2020-09-28 17:08:12 -07:00
if (str.StartsWith("0x"))
{
if (int code = int.Parse(str))
return .Ok((.)code);
}
2019-08-23 11:56:54 -07:00
return Enum.Parse<KeyCode>(str, true);
}
public override void ToString(String strBuffer)
{
if (((this >= (KeyCode)'A') && (this <= (KeyCode)'Z')) ||
((this >= (KeyCode)'0') && (this <= (KeyCode)'9')))
{
((char8)this).ToString(strBuffer);
return;
}
2021-02-03 12:48:04 -08:00
char8 c = 0;
switch (this)
{
case LBracket:
c = '[';
case RBracket:
c = ']';
case .Slash:
c = '/';
case .Backslash:
c = '\\';
2021-02-03 12:48:04 -08:00
default:
}
if (c != 0)
{
strBuffer.Append(c);
return;
}
2020-09-28 17:08:12 -07:00
int buffStart = strBuffer.Length;
2019-08-23 11:56:54 -07:00
base.ToString(strBuffer);
2020-09-28 17:08:12 -07:00
if ((strBuffer.Length > buffStart) && (strBuffer[buffStart].IsDigit))
{
strBuffer.RemoveToEnd(buffStart);
strBuffer.AppendF("0x{:X}", (int32)this);
}
2019-08-23 11:56:54 -07:00
}
}
}
///