5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-03 02:19:43 +08:00
wails/v2/internal/frontend/desktop/windows/keys.go
2021-09-06 21:40:11 +10:00

203 lines
4.6 KiB
Go

//go:build windows
package windows
import (
"github.com/leaanthony/winc"
"github.com/wailsapp/wails/v2/pkg/menu/keys"
"strings"
)
var ModifierMap = map[keys.Modifier]winc.Modifiers{
keys.ShiftKey: winc.ModShift,
keys.ControlKey: winc.ModControl,
keys.OptionOrAltKey: winc.ModAlt,
keys.CmdOrCtrlKey: winc.ModControl,
}
func acceleratorToWincShortcut(accelerator *keys.Accelerator) winc.Shortcut {
if accelerator == nil {
return winc.NoShortcut
}
inKey := strings.ToUpper(accelerator.Key)
key, exists := keyMap[inKey]
if !exists {
return winc.NoShortcut
}
var modifiers winc.Modifiers
if _, exists := shiftMap[inKey]; exists {
modifiers = winc.ModShift
}
for _, mod := range accelerator.Modifiers {
modifiers |= ModifierMap[mod]
}
return winc.Shortcut{
Modifiers: modifiers,
Key: key,
}
}
var shiftMap = map[string]struct{}{
"~": {},
")": {},
"!": {},
"@": {},
"#": {},
"$": {},
"%": {},
"^": {},
"&": {},
"*": {},
"(": {},
"_": {},
"PLUS": {},
"<": {},
">": {},
"?": {},
":": {},
`"`: {},
"{": {},
"}": {},
"|": {},
}
var keyMap = map[string]winc.Key{
"0": winc.Key0,
"1": winc.Key1,
"2": winc.Key2,
"3": winc.Key3,
"4": winc.Key4,
"5": winc.Key5,
"6": winc.Key6,
"7": winc.Key7,
"8": winc.Key8,
"9": winc.Key9,
"A": winc.KeyA,
"B": winc.KeyB,
"C": winc.KeyC,
"D": winc.KeyD,
"E": winc.KeyE,
"F": winc.KeyF,
"G": winc.KeyG,
"H": winc.KeyH,
"I": winc.KeyI,
"J": winc.KeyJ,
"K": winc.KeyK,
"L": winc.KeyL,
"M": winc.KeyM,
"N": winc.KeyN,
"O": winc.KeyO,
"P": winc.KeyP,
"Q": winc.KeyQ,
"R": winc.KeyR,
"S": winc.KeyS,
"T": winc.KeyT,
"U": winc.KeyU,
"V": winc.KeyV,
"W": winc.KeyW,
"X": winc.KeyX,
"Y": winc.KeyY,
"Z": winc.KeyZ,
"F1": winc.KeyF1,
"F2": winc.KeyF2,
"F3": winc.KeyF3,
"F4": winc.KeyF4,
"F5": winc.KeyF5,
"F6": winc.KeyF6,
"F7": winc.KeyF7,
"F8": winc.KeyF8,
"F9": winc.KeyF9,
"F10": winc.KeyF10,
"F11": winc.KeyF11,
"F12": winc.KeyF12,
"F13": winc.KeyF13,
"F14": winc.KeyF14,
"F15": winc.KeyF15,
"F16": winc.KeyF16,
"F17": winc.KeyF17,
"F18": winc.KeyF18,
"F19": winc.KeyF19,
"F20": winc.KeyF20,
"F21": winc.KeyF21,
"F22": winc.KeyF22,
"F23": winc.KeyF23,
"F24": winc.KeyF24,
"`": winc.KeyOEM3,
",": winc.KeyOEMComma,
".": winc.KeyOEMPeriod,
"/": winc.KeyOEM2,
";": winc.KeyOEM1,
"'": winc.KeyOEM7,
"[": winc.KeyOEM4,
"]": winc.KeyOEM6,
`\`: winc.KeyOEM5,
"~": winc.KeyOEM3, //
")": winc.Key0,
"!": winc.Key1,
"@": winc.Key2,
"#": winc.Key3,
"$": winc.Key4,
"%": winc.Key5,
"^": winc.Key6,
"&": winc.Key7,
"*": winc.Key8,
"(": winc.Key9,
"_": winc.KeyOEMMinus,
"PLUS": winc.KeyOEMPlus,
"<": winc.KeyOEMComma,
">": winc.KeyOEMPeriod,
"?": winc.KeyOEM2,
":": winc.KeyOEM1,
`"`: winc.KeyOEM7,
"{": winc.KeyOEM4,
"}": winc.KeyOEM6,
"|": winc.KeyOEM5,
"SPACE": winc.KeySpace,
"TAB": winc.KeyTab,
"CAPSLOCK": winc.KeyCapital,
"NUMLOCK": winc.KeyNumlock,
"SCROLLLOCK": winc.KeyScroll,
"BACKSPACE": winc.KeyBack,
"DELETE": winc.KeyDelete,
"INSERT": winc.KeyInsert,
"RETURN": winc.KeyReturn,
"ENTER": winc.KeyReturn,
"UP": winc.KeyUp,
"DOWN": winc.KeyDown,
"LEFT": winc.KeyLeft,
"RIGHT": winc.KeyRight,
"HOME": winc.KeyHome,
"END": winc.KeyEnd,
"PAGEUP": winc.KeyPrior,
"PAGEDOWN": winc.KeyNext,
"ESCAPE": winc.KeyEscape,
"ESC": winc.KeyEscape,
"VOLUMEUP": winc.KeyVolumeUp,
"VOLUMEDOWN": winc.KeyVolumeDown,
"VOLUMEMUTE": winc.KeyVolumeMute,
"MEDIANEXTTRACK": winc.KeyMediaNextTrack,
"MEDIAPREVIOUSTRACK": winc.KeyMediaPrevTrack,
"MEDIASTOP": winc.KeyMediaStop,
"MEDIAPLAYPAUSE": winc.KeyMediaPlayPause,
"PRINTSCREEN": winc.KeyPrint,
"NUM0": winc.KeyNumpad0,
"NUM1": winc.KeyNumpad1,
"NUM2": winc.KeyNumpad2,
"NUM3": winc.KeyNumpad3,
"NUM4": winc.KeyNumpad4,
"NUM5": winc.KeyNumpad5,
"NUM6": winc.KeyNumpad6,
"NUM7": winc.KeyNumpad7,
"NUM8": winc.KeyNumpad8,
"NUM9": winc.KeyNumpad9,
"nummult": winc.KeyMultiply,
"numadd": winc.KeyAdd,
"numsub": winc.KeySubtract,
"numdec": winc.KeyDecimal,
"numdiv": winc.KeyDivide,
}