98 lines
1.8 KiB
Go
98 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()
|
||
|
}
|
||
|
}
|
||
|
}
|