diff --git a/backend.go b/backend.go index 4efea54..dfddde3 100644 --- a/backend.go +++ b/backend.go @@ -36,6 +36,9 @@ const ( KeyMediaPlayPause KeyMediaPrevTrack KeyMediaNextTrack + KeyBrowserBack + KeyBrowserForward + KeySuper KeyLimit ) diff --git a/backend_windows.go b/backend_windows.go index 78574e0..4ff3d04 100644 --- a/backend_windows.go +++ b/backend_windows.go @@ -34,6 +34,9 @@ const ( keyeventfKeyup uint32 = 0x2 keyeventfUnicode uint32 = 0x4 + vkLwin uint16 = 0x5B + vkBrowserBack uint16 = 0xA6 + vkBrowserForward uint16 = 0xA7 vkVolumeMute uint16 = 0xAD vkVolumeDown uint16 = 0xAE vkVolumeUp uint16 = 0xAF @@ -119,7 +122,13 @@ func (p *windowsBackend) KeyboardText(text string) error { func (p *windowsBackend) KeyboardKey(key Key) error { input := keybdInput{typ: inputKeyboard} - if key == KeyVolumeMute { + if key == KeySuper { + input.wVk = vkLwin + } else if key == KeyBrowserBack { + input.wVk = vkBrowserBack + } else if key == KeyBrowserForward { + input.wVk = vkBrowserForward + } else if key == KeyVolumeMute { input.wVk = vkVolumeMute } else if key == KeyVolumeDown { input.wVk = vkVolumeDown diff --git a/icon_font/U+1FA9F Window.svg b/icon_font/U+1FA9F Window.svg new file mode 100644 index 0000000..e6c41e9 --- /dev/null +++ b/icon_font/U+1FA9F Window.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/icon_font/U+2B60 Leftwards Triangle-Headed Arrow.svg b/icon_font/U+2B60 Leftwards Triangle-Headed Arrow.svg new file mode 100644 index 0000000..6364869 --- /dev/null +++ b/icon_font/U+2B60 Leftwards Triangle-Headed Arrow.svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/icon_font/U+2B62 Rightwards Triangle-Headed Arrow.svg b/icon_font/U+2B62 Rightwards Triangle-Headed Arrow.svg new file mode 100644 index 0000000..f13e555 --- /dev/null +++ b/icon_font/U+2B62 Rightwards Triangle-Headed Arrow.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/icon_font/icon.sfd b/icon_font/icon.sfd index f2a4eb8..5e06aea 100644 --- a/icon_font/icon.sfd +++ b/icon_font/icon.sfd @@ -1,4 +1,4 @@ -SplineFontDB: 3.0 +SplineFontDB: 3.2 FontName: Icon FullName: Icon FamilyName: Icon @@ -21,7 +21,7 @@ OS2Version: 0 OS2_WeightWidthSlopeOnly: 0 OS2_UseTypoMetrics: 1 CreationTime: 1535548659 -ModificationTime: 1538075883 +ModificationTime: 1597866573 PfmFamily: 17 TTFWeight: 400 TTFWidth: 5 @@ -51,11 +51,11 @@ NameList: AGL For New Fonts DisplaySize: -48 AntiAlias: 1 FitToEm: 0 -WinInfo: 0 38 14 +WinInfo: 0 35 14 BeginPrivate: 0 EndPrivate TeXData: 1 0 0 346030 173015 115343 0 1048576 115343 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144 -BeginChars: 1114112 11 +BeginChars: 1114112 14 StartChar: uni2328 Encoding: 9000 9000 0 @@ -637,7 +637,106 @@ SplineSet 819.797851562 633.625 l 2 828.08203125 633.624023438 834.796875 626.909179688 834.797851562 618.625 c 2 EndSplineSet -Validated: 524289 +Validated: 1 +EndChar + +StartChar: uni2B60 +Encoding: 11104 11104 11 +Width: 1000 +HStem: 219.932 160.131<434.739 979.995> +LayerCount: 2 +Fore +SplineSet +420.047851562 634.794921875 m 0 + 428.2109375 634.625 434.740234375 627.958984375 434.739257812 619.794921875 c 2 + 434.739257812 395.0625 l 2 + 434.740234375 386.778320312 441.455078125 380.063476562 449.739257812 380.0625 c 2 + 964.995117188 380.0625 l 2 + 973.279296875 380.061523438 979.994140625 373.346679688 979.995117188 365.0625 c 2 + 979.995117188 234.931640625 l 2 + 979.994140625 226.647460938 973.279296875 219.932617188 964.995117188 219.931640625 c 2 + 449.739257812 219.931640625 l 2 + 441.455078125 219.930664062 434.740234375 213.215820312 434.739257812 204.931640625 c 2 + 434.739257812 -19.80078125 l 2 + 434.731445312 -32.408203125 420.120117188 -39.3857421875 410.311523438 -31.46484375 c 2 + 25.4970703125 288.333984375 l 2 + 18.068359375 294.337890625 18.068359375 305.6640625 25.4970703125 311.66796875 c 2 + 410.311523438 631.466796875 l 2 + 413.063476562 633.689453125 416.51171875 634.868164062 420.047851562 634.794921875 c 0 +EndSplineSet +EndChar + +StartChar: uni2B62 +Encoding: 11106 11106 12 +Width: 1000 +HStem: 219.932 160.131<19.9258 565.182> +LayerCount: 2 +Fore +SplineSet +579.873046875 634.794921875 m 0 + 583.409179688 634.868164062 586.857421875 633.689453125 589.609375 631.466796875 c 2 + 974.423828125 311.66796875 l 2 + 981.852539062 305.6640625 981.852539062 294.337890625 974.423828125 288.333984375 c 2 + 589.609375 -31.46484375 l 2 + 579.80078125 -39.3857421875 565.189453125 -32.408203125 565.181640625 -19.80078125 c 2 + 565.181640625 204.931640625 l 2 + 565.180664062 213.215820312 558.465820312 219.930664062 550.181640625 219.931640625 c 2 + 34.92578125 219.931640625 l 2 + 26.6416015625 219.932617188 19.9267578125 226.647460938 19.92578125 234.931640625 c 2 + 19.92578125 365.0625 l 2 + 19.9267578125 373.346679688 26.6416015625 380.061523438 34.92578125 380.0625 c 2 + 550.181640625 380.0625 l 2 + 558.465820312 380.063476562 565.180664062 386.778320312 565.181640625 395.0625 c 2 + 565.181640625 619.794921875 l 2 + 565.180664062 627.958984375 571.7109375 634.625 579.873046875 634.794921875 c 0 +EndSplineSet +EndChar + +StartChar: u1FA9F +Encoding: 129695 129695 13 +Width: 1000 +HStem: -180.002 439.97<20.001 459.968 540.034 980.001> 340.034 439.97<20.001 459.968 540.034 980.001> +VStem: 20.001 439.967<-180.002 259.968 340.034 780.004> 540.034 439.967<-180.002 259.968 340.034 780.004> +LayerCount: 2 +Fore +SplineSet +546.908203125 259.967773438 m 2 + 973.126953125 259.967773438 l 2 + 976.934570312 259.967773438 980.000976562 256.90234375 980.000976562 253.09375 c 2 + 980.000976562 -173.127929688 l 2 + 980.000976562 -176.935546875 976.934570312 -180.001953125 973.126953125 -180.001953125 c 2 + 546.908203125 -180.001953125 l 2 + 543.099609375 -180.001953125 540.034179688 -176.935546875 540.034179688 -173.127929688 c 2 + 540.034179688 253.09375 l 2 + 540.034179688 256.90234375 543.099609375 259.967773438 546.908203125 259.967773438 c 2 +26.8759765625 259.967773438 m 2 + 453.09375 259.967773438 l 2 + 456.901367188 259.967773438 459.967773438 256.90234375 459.967773438 253.09375 c 2 + 459.967773438 -173.127929688 l 2 + 459.967773438 -176.935546875 456.901367188 -180.001953125 453.09375 -180.001953125 c 2 + 26.8759765625 -180.001953125 l 2 + 23.0673828125 -180.001953125 20.0009765625 -176.935546875 20.0009765625 -173.127929688 c 2 + 20.0009765625 253.09375 l 2 + 20.0009765625 256.90234375 23.0673828125 259.967773438 26.8759765625 259.967773438 c 2 +546.908203125 780.00390625 m 2 + 973.126953125 780.00390625 l 2 + 976.934570312 780.00390625 980.000976562 776.9375 980.000976562 773.12890625 c 2 + 980.000976562 346.909179688 l 2 + 980.000976562 343.100585938 976.934570312 340.034179688 973.126953125 340.034179688 c 2 + 546.908203125 340.034179688 l 2 + 543.099609375 340.034179688 540.034179688 343.100585938 540.034179688 346.909179688 c 2 + 540.034179688 773.12890625 l 2 + 540.034179688 776.9375 543.099609375 780.00390625 546.908203125 780.00390625 c 2 +26.8759765625 780.00390625 m 2 + 453.09375 780.00390625 l 2 + 456.901367188 780.00390625 459.967773438 776.9375 459.967773438 773.12890625 c 2 + 459.967773438 346.909179688 l 2 + 459.967773438 343.100585938 456.901367188 340.034179688 453.09375 340.034179688 c 2 + 26.8759765625 340.034179688 l 2 + 23.0673828125 340.034179688 20.0009765625 343.100585938 20.0009765625 346.909179688 c 2 + 20.0009765625 773.12890625 l 2 + 20.0009765625 776.9375 23.0673828125 780.00390625 26.8759765625 780.00390625 c 2 +EndSplineSet EndChar EndChars EndSplineFont diff --git a/keysyms.go b/keysyms.go index dbafa70..497cf02 100644 --- a/keysyms.go +++ b/keysyms.go @@ -26,6 +26,8 @@ import "errors" type Keysym int32 const ( + // X11/keysymdef.h + xkSuperL Keysym = 0xffeb // X11/XF86keysym.h xf86xkAudioLowerVolume Keysym = 0x1008ff11 xf86xkAudioMute Keysym = 0x1008ff12 @@ -33,6 +35,8 @@ const ( xf86xkAudioPlay Keysym = 0x1008ff14 xf86xkAudioPrev Keysym = 0x1008ff16 xf86xkAudioNext Keysym = 0x1008ff17 + xf86xkBack Keysym = 0x1008ff26 + xf86xkForward Keysym = 0x1008ff27 ) func RuneToKeysym(runeValue rune) (Keysym, error) { @@ -51,6 +55,9 @@ func RuneToKeysym(runeValue rune) (Keysym, error) { } func KeyToKeysym(key Key) (Keysym, error) { + if key == KeySuper { + return xkSuperL, nil + } if key == KeyVolumeMute { return xf86xkAudioMute, nil } @@ -69,5 +76,11 @@ func KeyToKeysym(key Key) (Keysym, error) { if key == KeyMediaNextTrack { return xf86xkAudioNext, nil } + if key == KeyBrowserBack { + return xf86xkBack, nil + } + if key == KeyBrowserForward { + return xf86xkForward, nil + } return 0, errors.New("key not mapped to keysym") } diff --git a/webdata/fn.js b/webdata/fn.js index f9f5394..4a60604 100644 --- a/webdata/fn.js +++ b/webdata/fn.js @@ -39,6 +39,9 @@ const KEY_VOLUME_UP = 2; const KEY_MEDIA_PLAY_PAUSE = 3; const KEY_MEDIA_PREV_TRACK = 4; const KEY_MEDIA_NEXT_TRACK = 5; +const KEY_BROWSER_BACK = 6; +const KEY_BROWSER_FORWARD = 7; +const KEY_SUPER = 8; let ws; let pad; @@ -381,7 +384,10 @@ window.addEventListener("load", function() { requestFullscreen(document.documentElement, {navigationUI: "hide"}); } }); - [{id: "prevtrackbutton", key: KEY_MEDIA_PREV_TRACK}, + [{id: "browserbackbutton", key: KEY_BROWSER_BACK}, + {id: "superbutton", key: KEY_SUPER}, + {id: "browserforwardbutton", key: KEY_BROWSER_FORWARD}, + {id: "prevtrackbutton", key: KEY_MEDIA_PREV_TRACK}, {id: "playpausebutton", key: KEY_MEDIA_PLAY_PAUSE}, {id: "nexttrackbutton", key: KEY_MEDIA_NEXT_TRACK}, {id: "volumedownbutton", key: KEY_VOLUME_DOWN}, diff --git a/webdata/icon.woff b/webdata/icon.woff index c485e05..0a6cd81 100644 Binary files a/webdata/icon.woff and b/webdata/icon.woff differ