mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2025-12-13 13:38:16 +08:00
Initial commit
This commit is contained in:
61
gui/player_lyric.go
Normal file
61
gui/player_lyric.go
Normal file
@@ -0,0 +1,61 @@
|
||||
package gui
|
||||
|
||||
import (
|
||||
"AynaLivePlayer/controller"
|
||||
"AynaLivePlayer/event"
|
||||
"AynaLivePlayer/player"
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/container"
|
||||
"fyne.io/fyne/v2/widget"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func createLyricWindow() fyne.Window {
|
||||
|
||||
// create widgets
|
||||
w := App.NewWindow("Lyric")
|
||||
currentLrc := newLabelWithWrapping("", fyne.TextWrapBreak)
|
||||
currentLrc.Alignment = fyne.TextAlignCenter
|
||||
lrcs := make([]string, len(controller.CurrentLyric.Lyrics))
|
||||
for i := 0; i < len(lrcs); i++ {
|
||||
lrcs[i] = controller.CurrentLyric.Lyrics[i].Lyric
|
||||
}
|
||||
fullLrc := widget.NewRichTextWithText(strings.Join(lrcs, "\n\n"))
|
||||
fullLrc.Scroll = container.ScrollVerticalOnly
|
||||
fullLrc.Wrapping = fyne.TextWrapWord
|
||||
w.SetContent(container.NewBorder(nil,
|
||||
container.NewVBox(widget.NewSeparator(), currentLrc),
|
||||
nil, nil,
|
||||
fullLrc))
|
||||
w.Resize(fyne.NewSize(360, 540))
|
||||
w.CenterOnScreen()
|
||||
|
||||
// register handlers
|
||||
controller.CurrentLyric.Handler.RegisterA(player.EventLyricUpdate, "player.lyric.current_lyric", func(event *event.Event) {
|
||||
e := event.Data.(player.LyricUpdateEvent)
|
||||
if e.Lyric == nil {
|
||||
currentLrc.SetText("")
|
||||
return
|
||||
}
|
||||
currentLrc.SetText(e.Lyric.Lyric)
|
||||
})
|
||||
controller.CurrentLyric.Handler.RegisterA(player.EventLyricReload, "player.lyric.new_media", func(event *event.Event) {
|
||||
e := event.Data.(player.LyricReloadEvent)
|
||||
lrcs := make([]string, len(e.Lyrics.Lyrics))
|
||||
for i := 0; i < len(lrcs); i++ {
|
||||
lrcs[i] = e.Lyrics.Lyrics[i].Lyric
|
||||
}
|
||||
fullLrc.Segments[0] = &widget.TextSegment{
|
||||
Style: widget.RichTextStyleInline,
|
||||
Text: strings.Join(lrcs, "\n\n"),
|
||||
}
|
||||
fullLrc.Refresh()
|
||||
})
|
||||
|
||||
w.SetOnClosed(func() {
|
||||
controller.CurrentLyric.Handler.Unregister("player.lyric.current_lyric")
|
||||
controller.CurrentLyric.Handler.Unregister("player.lyric.new_media")
|
||||
PlayController.LrcWindowOpen = false
|
||||
})
|
||||
return w
|
||||
}
|
||||
Reference in New Issue
Block a user