1
0
Fork 0
keyboard-layer-display/main.go

124 lines
2.3 KiB
Go
Raw Normal View History

2024-06-05 21:24:20 -04:00
package main
import (
2024-06-05 21:59:07 -04:00
"errors"
2024-06-05 21:24:20 -04:00
"log"
2024-06-05 21:59:07 -04:00
"os"
"strconv"
2024-06-05 21:24:20 -04:00
"sync"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/driver/desktop"
"golang.design/x/hotkey"
)
2024-06-05 21:59:07 -04:00
type Layer struct {
Hotkey hotkey.Key
Image *canvas.Image
}
var keymap = map[string]hotkey.Key{
"KeyF13": hotkey.KeyF13,
"KeyF14": hotkey.KeyF14,
"KeyF15": hotkey.KeyF15,
"KeyF16": hotkey.KeyF16,
"KeyF17": hotkey.KeyF17,
}
2024-06-05 21:24:20 -04:00
func main() {
userConfigDir, _ := os.UserConfigDir()
appConfigDir := userConfigDir + "/keyboard-layer-display"
imageDir := appConfigDir + "/layers"
log.Println(imageDir)
os.MkdirAll(imageDir, 0755)
2024-06-05 21:24:20 -04:00
a := app.New()
w := a.NewWindow("SysTray")
icon, _ := fyne.LoadResourceFromPath("./keyboard.svg")
if desk, ok := a.(desktop.App); ok {
m := fyne.NewMenu("MyApp",
fyne.NewMenuItem("Show", func() {
w.Show()
}))
desk.SetSystemTrayMenu(m)
desk.SetSystemTrayIcon(icon)
}
w.Resize(fyne.Size{
Width: 1656 / 2,
Height: 546 / 2,
})
defaultImage := canvas.NewImageFromFile(imageDir + "/default.png")
w.SetContent(container.NewPadded(defaultImage))
w.SetCloseIntercept(func() {
w.Hide()
})
2024-06-05 21:59:07 -04:00
layers := []Layer{}
for i := range 5 {
imagePath := imageDir + "/layer_" + strconv.Itoa(i+1) + ".png"
2024-06-05 21:59:07 -04:00
if _, err := os.Stat(imagePath); errors.Is(err, os.ErrNotExist) {
continue
}
newLayer := Layer{
Image: canvas.NewImageFromFile(imagePath),
Hotkey: keymap["KeyF"+strconv.Itoa(13+i)],
2024-06-05 21:59:07 -04:00
}
layers = append(layers, newLayer)
}
2024-06-05 21:24:20 -04:00
go func() {
wg := sync.WaitGroup{}
2024-06-05 21:59:07 -04:00
wg.Add(len(layers))
for _, v := range layers {
go func() {
defer wg.Done()
log.Printf("Registering %+v", v)
err := listenHotkey(
func() { w.SetContent(container.NewPadded(v.Image)) },
func() { w.SetContent(container.NewPadded(defaultImage)) },
v.Hotkey,
)
if err != nil {
log.Println(err)
return
}
}()
}
2024-06-05 21:24:20 -04:00
wg.Wait()
}()
w.ShowAndRun()
}
2024-06-05 21:59:07 -04:00
func listenHotkey(downfn func(), upfn func(), key hotkey.Key, mods ...hotkey.Modifier) (err error) {
2024-06-05 21:24:20 -04:00
ms := []hotkey.Modifier{}
ms = append(ms, mods...)
hk := hotkey.New(ms, key)
err = hk.Register()
if err != nil {
return
}
for {
select {
case <-hk.Keyup():
go upfn()
case <-hk.Keydown():
go downfn()
}
}
}