// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.

using System;

namespace SDL
{
    [Typedef]
    public enum SDL_Keycode : UInt32
    {
        SDLK_EXTENDED_MASK = SDL3.SDLK_EXTENDED_MASK,
        SDLK_SCANCODE_MASK = SDL3.SDLK_SCANCODE_MASK,
        SDLK_UNKNOWN = SDL3.SDLK_UNKNOWN,
        SDLK_RETURN = SDL3.SDLK_RETURN,
        SDLK_ESCAPE = SDL3.SDLK_ESCAPE,
        SDLK_BACKSPACE = SDL3.SDLK_BACKSPACE,
        SDLK_TAB = SDL3.SDLK_TAB,
        SDLK_SPACE = SDL3.SDLK_SPACE,
        SDLK_EXCLAIM = SDL3.SDLK_EXCLAIM,
        SDLK_DBLAPOSTROPHE = SDL3.SDLK_DBLAPOSTROPHE,
        SDLK_HASH = SDL3.SDLK_HASH,
        SDLK_DOLLAR = SDL3.SDLK_DOLLAR,
        SDLK_PERCENT = SDL3.SDLK_PERCENT,
        SDLK_AMPERSAND = SDL3.SDLK_AMPERSAND,
        SDLK_APOSTROPHE = SDL3.SDLK_APOSTROPHE,
        SDLK_LEFTPAREN = SDL3.SDLK_LEFTPAREN,
        SDLK_RIGHTPAREN = SDL3.SDLK_RIGHTPAREN,
        SDLK_ASTERISK = SDL3.SDLK_ASTERISK,
        SDLK_PLUS = SDL3.SDLK_PLUS,
        SDLK_COMMA = SDL3.SDLK_COMMA,
        SDLK_MINUS = SDL3.SDLK_MINUS,
        SDLK_PERIOD = SDL3.SDLK_PERIOD,
        SDLK_SLASH = SDL3.SDLK_SLASH,
        SDLK_0 = SDL3.SDLK_0,
        SDLK_1 = SDL3.SDLK_1,
        SDLK_2 = SDL3.SDLK_2,
        SDLK_3 = SDL3.SDLK_3,
        SDLK_4 = SDL3.SDLK_4,
        SDLK_5 = SDL3.SDLK_5,
        SDLK_6 = SDL3.SDLK_6,
        SDLK_7 = SDL3.SDLK_7,
        SDLK_8 = SDL3.SDLK_8,
        SDLK_9 = SDL3.SDLK_9,
        SDLK_COLON = SDL3.SDLK_COLON,
        SDLK_SEMICOLON = SDL3.SDLK_SEMICOLON,
        SDLK_LESS = SDL3.SDLK_LESS,
        SDLK_EQUALS = SDL3.SDLK_EQUALS,
        SDLK_GREATER = SDL3.SDLK_GREATER,
        SDLK_QUESTION = SDL3.SDLK_QUESTION,
        SDLK_AT = SDL3.SDLK_AT,
        SDLK_LEFTBRACKET = SDL3.SDLK_LEFTBRACKET,
        SDLK_BACKSLASH = SDL3.SDLK_BACKSLASH,
        SDLK_RIGHTBRACKET = SDL3.SDLK_RIGHTBRACKET,
        SDLK_CARET = SDL3.SDLK_CARET,
        SDLK_UNDERSCORE = SDL3.SDLK_UNDERSCORE,
        SDLK_GRAVE = SDL3.SDLK_GRAVE,
        SDLK_A = SDL3.SDLK_A,
        SDLK_B = SDL3.SDLK_B,
        SDLK_C = SDL3.SDLK_C,
        SDLK_D = SDL3.SDLK_D,
        SDLK_E = SDL3.SDLK_E,
        SDLK_F = SDL3.SDLK_F,
        SDLK_G = SDL3.SDLK_G,
        SDLK_H = SDL3.SDLK_H,
        SDLK_I = SDL3.SDLK_I,
        SDLK_J = SDL3.SDLK_J,
        SDLK_K = SDL3.SDLK_K,
        SDLK_L = SDL3.SDLK_L,
        SDLK_M = SDL3.SDLK_M,
        SDLK_N = SDL3.SDLK_N,
        SDLK_O = SDL3.SDLK_O,
        SDLK_P = SDL3.SDLK_P,
        SDLK_Q = SDL3.SDLK_Q,
        SDLK_R = SDL3.SDLK_R,
        SDLK_S = SDL3.SDLK_S,
        SDLK_T = SDL3.SDLK_T,
        SDLK_U = SDL3.SDLK_U,
        SDLK_V = SDL3.SDLK_V,
        SDLK_W = SDL3.SDLK_W,
        SDLK_X = SDL3.SDLK_X,
        SDLK_Y = SDL3.SDLK_Y,
        SDLK_Z = SDL3.SDLK_Z,
        SDLK_LEFTBRACE = SDL3.SDLK_LEFTBRACE,
        SDLK_PIPE = SDL3.SDLK_PIPE,
        SDLK_RIGHTBRACE = SDL3.SDLK_RIGHTBRACE,
        SDLK_TILDE = SDL3.SDLK_TILDE,
        SDLK_DELETE = SDL3.SDLK_DELETE,
        SDLK_PLUSMINUS = SDL3.SDLK_PLUSMINUS,
        SDLK_CAPSLOCK = SDL3.SDLK_CAPSLOCK,
        SDLK_F1 = SDL3.SDLK_F1,
        SDLK_F2 = SDL3.SDLK_F2,
        SDLK_F3 = SDL3.SDLK_F3,
        SDLK_F4 = SDL3.SDLK_F4,
        SDLK_F5 = SDL3.SDLK_F5,
        SDLK_F6 = SDL3.SDLK_F6,
        SDLK_F7 = SDL3.SDLK_F7,
        SDLK_F8 = SDL3.SDLK_F8,
        SDLK_F9 = SDL3.SDLK_F9,
        SDLK_F10 = SDL3.SDLK_F10,
        SDLK_F11 = SDL3.SDLK_F11,
        SDLK_F12 = SDL3.SDLK_F12,
        SDLK_PRINTSCREEN = SDL3.SDLK_PRINTSCREEN,
        SDLK_SCROLLLOCK = SDL3.SDLK_SCROLLLOCK,
        SDLK_PAUSE = SDL3.SDLK_PAUSE,
        SDLK_INSERT = SDL3.SDLK_INSERT,
        SDLK_HOME = SDL3.SDLK_HOME,
        SDLK_PAGEUP = SDL3.SDLK_PAGEUP,
        SDLK_END = SDL3.SDLK_END,
        SDLK_PAGEDOWN = SDL3.SDLK_PAGEDOWN,
        SDLK_RIGHT = SDL3.SDLK_RIGHT,
        SDLK_LEFT = SDL3.SDLK_LEFT,
        SDLK_DOWN = SDL3.SDLK_DOWN,
        SDLK_UP = SDL3.SDLK_UP,
        SDLK_NUMLOCKCLEAR = SDL3.SDLK_NUMLOCKCLEAR,
        SDLK_KP_DIVIDE = SDL3.SDLK_KP_DIVIDE,
        SDLK_KP_MULTIPLY = SDL3.SDLK_KP_MULTIPLY,
        SDLK_KP_MINUS = SDL3.SDLK_KP_MINUS,
        SDLK_KP_PLUS = SDL3.SDLK_KP_PLUS,
        SDLK_KP_ENTER = SDL3.SDLK_KP_ENTER,
        SDLK_KP_1 = SDL3.SDLK_KP_1,
        SDLK_KP_2 = SDL3.SDLK_KP_2,
        SDLK_KP_3 = SDL3.SDLK_KP_3,
        SDLK_KP_4 = SDL3.SDLK_KP_4,
        SDLK_KP_5 = SDL3.SDLK_KP_5,
        SDLK_KP_6 = SDL3.SDLK_KP_6,
        SDLK_KP_7 = SDL3.SDLK_KP_7,
        SDLK_KP_8 = SDL3.SDLK_KP_8,
        SDLK_KP_9 = SDL3.SDLK_KP_9,
        SDLK_KP_0 = SDL3.SDLK_KP_0,
        SDLK_KP_PERIOD = SDL3.SDLK_KP_PERIOD,
        SDLK_APPLICATION = SDL3.SDLK_APPLICATION,
        SDLK_POWER = SDL3.SDLK_POWER,
        SDLK_KP_EQUALS = SDL3.SDLK_KP_EQUALS,
        SDLK_F13 = SDL3.SDLK_F13,
        SDLK_F14 = SDL3.SDLK_F14,
        SDLK_F15 = SDL3.SDLK_F15,
        SDLK_F16 = SDL3.SDLK_F16,
        SDLK_F17 = SDL3.SDLK_F17,
        SDLK_F18 = SDL3.SDLK_F18,
        SDLK_F19 = SDL3.SDLK_F19,
        SDLK_F20 = SDL3.SDLK_F20,
        SDLK_F21 = SDL3.SDLK_F21,
        SDLK_F22 = SDL3.SDLK_F22,
        SDLK_F23 = SDL3.SDLK_F23,
        SDLK_F24 = SDL3.SDLK_F24,
        SDLK_EXECUTE = SDL3.SDLK_EXECUTE,
        SDLK_HELP = SDL3.SDLK_HELP,
        SDLK_MENU = SDL3.SDLK_MENU,
        SDLK_SELECT = SDL3.SDLK_SELECT,
        SDLK_STOP = SDL3.SDLK_STOP,
        SDLK_AGAIN = SDL3.SDLK_AGAIN,
        SDLK_UNDO = SDL3.SDLK_UNDO,
        SDLK_CUT = SDL3.SDLK_CUT,
        SDLK_COPY = SDL3.SDLK_COPY,
        SDLK_PASTE = SDL3.SDLK_PASTE,
        SDLK_FIND = SDL3.SDLK_FIND,
        SDLK_MUTE = SDL3.SDLK_MUTE,
        SDLK_VOLUMEUP = SDL3.SDLK_VOLUMEUP,
        SDLK_VOLUMEDOWN = SDL3.SDLK_VOLUMEDOWN,
        SDLK_KP_COMMA = SDL3.SDLK_KP_COMMA,
        SDLK_KP_EQUALSAS400 = SDL3.SDLK_KP_EQUALSAS400,
        SDLK_ALTERASE = SDL3.SDLK_ALTERASE,
        SDLK_SYSREQ = SDL3.SDLK_SYSREQ,
        SDLK_CANCEL = SDL3.SDLK_CANCEL,
        SDLK_CLEAR = SDL3.SDLK_CLEAR,
        SDLK_PRIOR = SDL3.SDLK_PRIOR,
        SDLK_RETURN2 = SDL3.SDLK_RETURN2,
        SDLK_SEPARATOR = SDL3.SDLK_SEPARATOR,
        SDLK_OUT = SDL3.SDLK_OUT,
        SDLK_OPER = SDL3.SDLK_OPER,
        SDLK_CLEARAGAIN = SDL3.SDLK_CLEARAGAIN,
        SDLK_CRSEL = SDL3.SDLK_CRSEL,
        SDLK_EXSEL = SDL3.SDLK_EXSEL,
        SDLK_KP_00 = SDL3.SDLK_KP_00,
        SDLK_KP_000 = SDL3.SDLK_KP_000,
        SDLK_THOUSANDSSEPARATOR = SDL3.SDLK_THOUSANDSSEPARATOR,
        SDLK_DECIMALSEPARATOR = SDL3.SDLK_DECIMALSEPARATOR,
        SDLK_CURRENCYUNIT = SDL3.SDLK_CURRENCYUNIT,
        SDLK_CURRENCYSUBUNIT = SDL3.SDLK_CURRENCYSUBUNIT,
        SDLK_KP_LEFTPAREN = SDL3.SDLK_KP_LEFTPAREN,
        SDLK_KP_RIGHTPAREN = SDL3.SDLK_KP_RIGHTPAREN,
        SDLK_KP_LEFTBRACE = SDL3.SDLK_KP_LEFTBRACE,
        SDLK_KP_RIGHTBRACE = SDL3.SDLK_KP_RIGHTBRACE,
        SDLK_KP_TAB = SDL3.SDLK_KP_TAB,
        SDLK_KP_BACKSPACE = SDL3.SDLK_KP_BACKSPACE,
        SDLK_KP_A = SDL3.SDLK_KP_A,
        SDLK_KP_B = SDL3.SDLK_KP_B,
        SDLK_KP_C = SDL3.SDLK_KP_C,
        SDLK_KP_D = SDL3.SDLK_KP_D,
        SDLK_KP_E = SDL3.SDLK_KP_E,
        SDLK_KP_F = SDL3.SDLK_KP_F,
        SDLK_KP_XOR = SDL3.SDLK_KP_XOR,
        SDLK_KP_POWER = SDL3.SDLK_KP_POWER,
        SDLK_KP_PERCENT = SDL3.SDLK_KP_PERCENT,
        SDLK_KP_LESS = SDL3.SDLK_KP_LESS,
        SDLK_KP_GREATER = SDL3.SDLK_KP_GREATER,
        SDLK_KP_AMPERSAND = SDL3.SDLK_KP_AMPERSAND,
        SDLK_KP_DBLAMPERSAND = SDL3.SDLK_KP_DBLAMPERSAND,
        SDLK_KP_VERTICALBAR = SDL3.SDLK_KP_VERTICALBAR,
        SDLK_KP_DBLVERTICALBAR = SDL3.SDLK_KP_DBLVERTICALBAR,
        SDLK_KP_COLON = SDL3.SDLK_KP_COLON,
        SDLK_KP_HASH = SDL3.SDLK_KP_HASH,
        SDLK_KP_SPACE = SDL3.SDLK_KP_SPACE,
        SDLK_KP_AT = SDL3.SDLK_KP_AT,
        SDLK_KP_EXCLAM = SDL3.SDLK_KP_EXCLAM,
        SDLK_KP_MEMSTORE = SDL3.SDLK_KP_MEMSTORE,
        SDLK_KP_MEMRECALL = SDL3.SDLK_KP_MEMRECALL,
        SDLK_KP_MEMCLEAR = SDL3.SDLK_KP_MEMCLEAR,
        SDLK_KP_MEMADD = SDL3.SDLK_KP_MEMADD,
        SDLK_KP_MEMSUBTRACT = SDL3.SDLK_KP_MEMSUBTRACT,
        SDLK_KP_MEMMULTIPLY = SDL3.SDLK_KP_MEMMULTIPLY,
        SDLK_KP_MEMDIVIDE = SDL3.SDLK_KP_MEMDIVIDE,
        SDLK_KP_PLUSMINUS = SDL3.SDLK_KP_PLUSMINUS,
        SDLK_KP_CLEAR = SDL3.SDLK_KP_CLEAR,
        SDLK_KP_CLEARENTRY = SDL3.SDLK_KP_CLEARENTRY,
        SDLK_KP_BINARY = SDL3.SDLK_KP_BINARY,
        SDLK_KP_OCTAL = SDL3.SDLK_KP_OCTAL,
        SDLK_KP_DECIMAL = SDL3.SDLK_KP_DECIMAL,
        SDLK_KP_HEXADECIMAL = SDL3.SDLK_KP_HEXADECIMAL,
        SDLK_LCTRL = SDL3.SDLK_LCTRL,
        SDLK_LSHIFT = SDL3.SDLK_LSHIFT,
        SDLK_LALT = SDL3.SDLK_LALT,
        SDLK_LGUI = SDL3.SDLK_LGUI,
        SDLK_RCTRL = SDL3.SDLK_RCTRL,
        SDLK_RSHIFT = SDL3.SDLK_RSHIFT,
        SDLK_RALT = SDL3.SDLK_RALT,
        SDLK_RGUI = SDL3.SDLK_RGUI,
        SDLK_MODE = SDL3.SDLK_MODE,
        SDLK_SLEEP = SDL3.SDLK_SLEEP,
        SDLK_WAKE = SDL3.SDLK_WAKE,
        SDLK_CHANNEL_INCREMENT = SDL3.SDLK_CHANNEL_INCREMENT,
        SDLK_CHANNEL_DECREMENT = SDL3.SDLK_CHANNEL_DECREMENT,
        SDLK_MEDIA_PLAY = SDL3.SDLK_MEDIA_PLAY,
        SDLK_MEDIA_PAUSE = SDL3.SDLK_MEDIA_PAUSE,
        SDLK_MEDIA_RECORD = SDL3.SDLK_MEDIA_RECORD,
        SDLK_MEDIA_FAST_FORWARD = SDL3.SDLK_MEDIA_FAST_FORWARD,
        SDLK_MEDIA_REWIND = SDL3.SDLK_MEDIA_REWIND,
        SDLK_MEDIA_NEXT_TRACK = SDL3.SDLK_MEDIA_NEXT_TRACK,
        SDLK_MEDIA_PREVIOUS_TRACK = SDL3.SDLK_MEDIA_PREVIOUS_TRACK,
        SDLK_MEDIA_STOP = SDL3.SDLK_MEDIA_STOP,
        SDLK_MEDIA_EJECT = SDL3.SDLK_MEDIA_EJECT,
        SDLK_MEDIA_PLAY_PAUSE = SDL3.SDLK_MEDIA_PLAY_PAUSE,
        SDLK_MEDIA_SELECT = SDL3.SDLK_MEDIA_SELECT,
        SDLK_AC_NEW = SDL3.SDLK_AC_NEW,
        SDLK_AC_OPEN = SDL3.SDLK_AC_OPEN,
        SDLK_AC_CLOSE = SDL3.SDLK_AC_CLOSE,
        SDLK_AC_EXIT = SDL3.SDLK_AC_EXIT,
        SDLK_AC_SAVE = SDL3.SDLK_AC_SAVE,
        SDLK_AC_PRINT = SDL3.SDLK_AC_PRINT,
        SDLK_AC_PROPERTIES = SDL3.SDLK_AC_PROPERTIES,
        SDLK_AC_SEARCH = SDL3.SDLK_AC_SEARCH,
        SDLK_AC_HOME = SDL3.SDLK_AC_HOME,
        SDLK_AC_BACK = SDL3.SDLK_AC_BACK,
        SDLK_AC_FORWARD = SDL3.SDLK_AC_FORWARD,
        SDLK_AC_STOP = SDL3.SDLK_AC_STOP,
        SDLK_AC_REFRESH = SDL3.SDLK_AC_REFRESH,
        SDLK_AC_BOOKMARKS = SDL3.SDLK_AC_BOOKMARKS,
        SDLK_SOFTLEFT = SDL3.SDLK_SOFTLEFT,
        SDLK_SOFTRIGHT = SDL3.SDLK_SOFTRIGHT,
        SDLK_CALL = SDL3.SDLK_CALL,
        SDLK_ENDCALL = SDL3.SDLK_ENDCALL,
        SDLK_LEFT_TAB = SDL3.SDLK_LEFT_TAB,
        SDLK_LEVEL5_SHIFT = SDL3.SDLK_LEVEL5_SHIFT,
        SDLK_MULTI_KEY_COMPOSE = SDL3.SDLK_MULTI_KEY_COMPOSE,
        SDLK_LMETA = SDL3.SDLK_LMETA,
        SDLK_RMETA = SDL3.SDLK_RMETA,
        SDLK_LHYPER = SDL3.SDLK_LHYPER,
        SDLK_RHYPER = SDL3.SDLK_RHYPER,
    }

    [Flags]
    [Typedef]
    public enum SDL_Keymod : UInt16
    {
        SDL_KMOD_NONE = (UInt16)SDL3.SDL_KMOD_NONE,
        SDL_KMOD_LSHIFT = (UInt16)SDL3.SDL_KMOD_LSHIFT,
        SDL_KMOD_RSHIFT = (UInt16)SDL3.SDL_KMOD_RSHIFT,
        SDL_KMOD_LEVEL5 = (UInt16)SDL3.SDL_KMOD_LEVEL5,
        SDL_KMOD_LCTRL = (UInt16)SDL3.SDL_KMOD_LCTRL,
        SDL_KMOD_RCTRL = (UInt16)SDL3.SDL_KMOD_RCTRL,
        SDL_KMOD_LALT = (UInt16)SDL3.SDL_KMOD_LALT,
        SDL_KMOD_RALT = (UInt16)SDL3.SDL_KMOD_RALT,
        SDL_KMOD_LGUI = (UInt16)SDL3.SDL_KMOD_LGUI,
        SDL_KMOD_RGUI = (UInt16)SDL3.SDL_KMOD_RGUI,
        SDL_KMOD_NUM = (UInt16)SDL3.SDL_KMOD_NUM,
        SDL_KMOD_CAPS = (UInt16)SDL3.SDL_KMOD_CAPS,
        SDL_KMOD_MODE = (UInt16)SDL3.SDL_KMOD_MODE,
        SDL_KMOD_SCROLL = (UInt16)SDL3.SDL_KMOD_SCROLL,
        SDL_KMOD_CTRL = (UInt16)SDL3.SDL_KMOD_CTRL,
        SDL_KMOD_SHIFT = (UInt16)SDL3.SDL_KMOD_SHIFT,
        SDL_KMOD_ALT = (UInt16)SDL3.SDL_KMOD_ALT,
        SDL_KMOD_GUI = (UInt16)SDL3.SDL_KMOD_GUI,
    }

    public static partial class SDL3
    {
        [Macro]
        public static SDL_Keycode SDL_SCANCODE_TO_KEYCODE(SDL_Scancode scancode) => (SDL_Keycode)((int)scancode | SDLK_SCANCODE_MASK);
    }
}
