1
0
Fork 0
keyboard-layer-display/main.go
2024-06-05 21:24:20 -04:00

97 lines
1.8 KiB
Go

package main
import (
"log"
"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"
)
func main() {
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)
}
// image := canvas.NewImageFromResource(theme.ConfirmIcon())
layer_1 := canvas.NewImageFromFile("./layer_1.png")
layer_1.Translucency = 0.5
layer_2 := canvas.NewImageFromFile("./layer_2.png")
layer_2.Translucency = 0.5
w.SetContent(container.NewPadded(layer_1))
w.Resize(fyne.Size{
Width: 1656 / 2,
Height: 546 / 2,
})
// w.SetContent(widget.NewLabel("Fyne System Tray"))
w.SetCloseIntercept(func() {
w.Hide()
})
go func() {
wg := sync.WaitGroup{}
wg.Add(2)
go func() {
defer wg.Done()
err := listenHotkey(
func() { w.SetContent(container.NewPadded(layer_1)) },
func() { w.SetContent(container.NewPadded(layer_2)) },
hotkey.Key1,
)
if err != nil {
log.Println(err)
}
}()
go func() {
defer wg.Done()
err := listenHotkey(
func() { w.SetContent(container.NewPadded(layer_1)) },
func() { log.Println("up") },
hotkey.Key2,
)
if err != nil {
log.Println(err)
}
}()
wg.Wait()
}()
w.ShowAndRun()
}
func listenHotkey(upfn func(), downfn func(), key hotkey.Key, mods ...hotkey.Modifier) (err error) {
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()
}
}
}