github.com/secoba/wails/v2@v2.6.4/internal/frontend/desktop/windows/keys.go (about)

     1  //go:build windows
     2  // +build windows
     3  
     4  package windows
     5  
     6  import (
     7  	"github.com/secoba/wails/v2/internal/frontend/desktop/windows/winc"
     8  	"github.com/secoba/wails/v2/pkg/menu/keys"
     9  	"strings"
    10  )
    11  
    12  var ModifierMap = map[keys.Modifier]winc.Modifiers{
    13  	keys.ShiftKey:       winc.ModShift,
    14  	keys.ControlKey:     winc.ModControl,
    15  	keys.OptionOrAltKey: winc.ModAlt,
    16  	keys.CmdOrCtrlKey:   winc.ModControl,
    17  }
    18  
    19  func acceleratorToWincShortcut(accelerator *keys.Accelerator) winc.Shortcut {
    20  
    21  	if accelerator == nil {
    22  		return winc.NoShortcut
    23  	}
    24  	inKey := strings.ToUpper(accelerator.Key)
    25  	key, exists := keyMap[inKey]
    26  	if !exists {
    27  		return winc.NoShortcut
    28  	}
    29  	var modifiers winc.Modifiers
    30  	if _, exists := shiftMap[inKey]; exists {
    31  		modifiers = winc.ModShift
    32  	}
    33  	for _, mod := range accelerator.Modifiers {
    34  		modifiers |= ModifierMap[mod]
    35  	}
    36  	return winc.Shortcut{
    37  		Modifiers: modifiers,
    38  		Key:       key,
    39  	}
    40  }
    41  
    42  var shiftMap = map[string]struct{}{
    43  	"~":    {},
    44  	")":    {},
    45  	"!":    {},
    46  	"@":    {},
    47  	"#":    {},
    48  	"$":    {},
    49  	"%":    {},
    50  	"^":    {},
    51  	"&":    {},
    52  	"*":    {},
    53  	"(":    {},
    54  	"_":    {},
    55  	"PLUS": {},
    56  	"<":    {},
    57  	">":    {},
    58  	"?":    {},
    59  	":":    {},
    60  	`"`:    {},
    61  	"{":    {},
    62  	"}":    {},
    63  	"|":    {},
    64  }
    65  
    66  var keyMap = map[string]winc.Key{
    67  	"0":   winc.Key0,
    68  	"1":   winc.Key1,
    69  	"2":   winc.Key2,
    70  	"3":   winc.Key3,
    71  	"4":   winc.Key4,
    72  	"5":   winc.Key5,
    73  	"6":   winc.Key6,
    74  	"7":   winc.Key7,
    75  	"8":   winc.Key8,
    76  	"9":   winc.Key9,
    77  	"A":   winc.KeyA,
    78  	"B":   winc.KeyB,
    79  	"C":   winc.KeyC,
    80  	"D":   winc.KeyD,
    81  	"E":   winc.KeyE,
    82  	"F":   winc.KeyF,
    83  	"G":   winc.KeyG,
    84  	"H":   winc.KeyH,
    85  	"I":   winc.KeyI,
    86  	"J":   winc.KeyJ,
    87  	"K":   winc.KeyK,
    88  	"L":   winc.KeyL,
    89  	"M":   winc.KeyM,
    90  	"N":   winc.KeyN,
    91  	"O":   winc.KeyO,
    92  	"P":   winc.KeyP,
    93  	"Q":   winc.KeyQ,
    94  	"R":   winc.KeyR,
    95  	"S":   winc.KeyS,
    96  	"T":   winc.KeyT,
    97  	"U":   winc.KeyU,
    98  	"V":   winc.KeyV,
    99  	"W":   winc.KeyW,
   100  	"X":   winc.KeyX,
   101  	"Y":   winc.KeyY,
   102  	"Z":   winc.KeyZ,
   103  	"F1":  winc.KeyF1,
   104  	"F2":  winc.KeyF2,
   105  	"F3":  winc.KeyF3,
   106  	"F4":  winc.KeyF4,
   107  	"F5":  winc.KeyF5,
   108  	"F6":  winc.KeyF6,
   109  	"F7":  winc.KeyF7,
   110  	"F8":  winc.KeyF8,
   111  	"F9":  winc.KeyF9,
   112  	"F10": winc.KeyF10,
   113  	"F11": winc.KeyF11,
   114  	"F12": winc.KeyF12,
   115  	"F13": winc.KeyF13,
   116  	"F14": winc.KeyF14,
   117  	"F15": winc.KeyF15,
   118  	"F16": winc.KeyF16,
   119  	"F17": winc.KeyF17,
   120  	"F18": winc.KeyF18,
   121  	"F19": winc.KeyF19,
   122  	"F20": winc.KeyF20,
   123  	"F21": winc.KeyF21,
   124  	"F22": winc.KeyF22,
   125  	"F23": winc.KeyF23,
   126  	"F24": winc.KeyF24,
   127  
   128  	"`": winc.KeyOEM3,
   129  	",": winc.KeyOEMComma,
   130  	".": winc.KeyOEMPeriod,
   131  	"/": winc.KeyOEM2,
   132  	";": winc.KeyOEM1,
   133  	"'": winc.KeyOEM7,
   134  	"[": winc.KeyOEM4,
   135  	"]": winc.KeyOEM6,
   136  	`\`: winc.KeyOEM5,
   137  
   138  	"~":    winc.KeyOEM3, //
   139  	")":    winc.Key0,
   140  	"!":    winc.Key1,
   141  	"@":    winc.Key2,
   142  	"#":    winc.Key3,
   143  	"$":    winc.Key4,
   144  	"%":    winc.Key5,
   145  	"^":    winc.Key6,
   146  	"&":    winc.Key7,
   147  	"*":    winc.Key8,
   148  	"(":    winc.Key9,
   149  	"_":    winc.KeyOEMMinus,
   150  	"PLUS": winc.KeyOEMPlus,
   151  	"<":    winc.KeyOEMComma,
   152  	">":    winc.KeyOEMPeriod,
   153  	"?":    winc.KeyOEM2,
   154  	":":    winc.KeyOEM1,
   155  	`"`:    winc.KeyOEM7,
   156  	"{":    winc.KeyOEM4,
   157  	"}":    winc.KeyOEM6,
   158  	"|":    winc.KeyOEM5,
   159  
   160  	"SPACE":              winc.KeySpace,
   161  	"TAB":                winc.KeyTab,
   162  	"CAPSLOCK":           winc.KeyCapital,
   163  	"NUMLOCK":            winc.KeyNumlock,
   164  	"SCROLLLOCK":         winc.KeyScroll,
   165  	"BACKSPACE":          winc.KeyBack,
   166  	"DELETE":             winc.KeyDelete,
   167  	"INSERT":             winc.KeyInsert,
   168  	"RETURN":             winc.KeyReturn,
   169  	"ENTER":              winc.KeyReturn,
   170  	"UP":                 winc.KeyUp,
   171  	"DOWN":               winc.KeyDown,
   172  	"LEFT":               winc.KeyLeft,
   173  	"RIGHT":              winc.KeyRight,
   174  	"HOME":               winc.KeyHome,
   175  	"END":                winc.KeyEnd,
   176  	"PAGEUP":             winc.KeyPrior,
   177  	"PAGEDOWN":           winc.KeyNext,
   178  	"ESCAPE":             winc.KeyEscape,
   179  	"ESC":                winc.KeyEscape,
   180  	"VOLUMEUP":           winc.KeyVolumeUp,
   181  	"VOLUMEDOWN":         winc.KeyVolumeDown,
   182  	"VOLUMEMUTE":         winc.KeyVolumeMute,
   183  	"MEDIANEXTTRACK":     winc.KeyMediaNextTrack,
   184  	"MEDIAPREVIOUSTRACK": winc.KeyMediaPrevTrack,
   185  	"MEDIASTOP":          winc.KeyMediaStop,
   186  	"MEDIAPLAYPAUSE":     winc.KeyMediaPlayPause,
   187  	"PRINTSCREEN":        winc.KeyPrint,
   188  	"NUM0":               winc.KeyNumpad0,
   189  	"NUM1":               winc.KeyNumpad1,
   190  	"NUM2":               winc.KeyNumpad2,
   191  	"NUM3":               winc.KeyNumpad3,
   192  	"NUM4":               winc.KeyNumpad4,
   193  	"NUM5":               winc.KeyNumpad5,
   194  	"NUM6":               winc.KeyNumpad6,
   195  	"NUM7":               winc.KeyNumpad7,
   196  	"NUM8":               winc.KeyNumpad8,
   197  	"NUM9":               winc.KeyNumpad9,
   198  	"nummult":            winc.KeyMultiply,
   199  	"numadd":             winc.KeyAdd,
   200  	"numsub":             winc.KeySubtract,
   201  	"numdec":             winc.KeyDecimal,
   202  	"numdiv":             winc.KeyDivide,
   203  }