94 lines
2.4 KiB
Go
94 lines
2.4 KiB
Go
package controller
|
|
|
|
import (
|
|
"math"
|
|
"time"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/lang"
|
|
"github.com/dweymouth/supersonic/backend/player"
|
|
"github.com/dweymouth/supersonic/ui/shortcuts"
|
|
"github.com/dweymouth/supersonic/ui/util"
|
|
"github.com/dweymouth/supersonic/ui/visualizations"
|
|
)
|
|
|
|
// embedded in parent controller struct
|
|
type visualizationData struct {
|
|
peakMeter *visualizations.PeakMeter
|
|
peakMeterWin fyne.Window
|
|
|
|
visualizationAnim *fyne.Animation
|
|
}
|
|
|
|
func (c *Controller) initVisualizations() {
|
|
c.App.LocalPlayer.OnStopped(c.stopVisualizationAnim)
|
|
c.App.LocalPlayer.OnPaused(c.stopVisualizationAnim)
|
|
c.App.LocalPlayer.OnPlaying(func() {
|
|
if c.peakMeter != nil {
|
|
c.startVisualizationAnim()
|
|
}
|
|
})
|
|
}
|
|
|
|
func (c *Controller) ShowPeakMeter() {
|
|
if c.peakMeterWin != nil {
|
|
c.peakMeterWin.Show()
|
|
return
|
|
}
|
|
c.peakMeterWin = fyne.CurrentApp().NewWindow(lang.L("Peak Meter"))
|
|
|
|
onClose := func() {
|
|
c.stopVisualizationAnim()
|
|
c.peakMeter = nil
|
|
util.SaveWindowSize(c.peakMeterWin,
|
|
&c.App.Config.PeakMeter.WindowWidth,
|
|
&c.App.Config.PeakMeter.WindowHeight)
|
|
c.peakMeterWin.Close()
|
|
c.peakMeterWin = nil
|
|
}
|
|
|
|
c.peakMeterWin.SetCloseIntercept(onClose)
|
|
c.peakMeterWin.Canvas().AddShortcut(&shortcuts.ShortcutCloseWindow, func(_ fyne.Shortcut) {
|
|
onClose()
|
|
})
|
|
if c.App.Config.PeakMeter.WindowHeight > 0 {
|
|
c.peakMeterWin.Resize(fyne.NewSize(
|
|
float32(c.App.Config.PeakMeter.WindowWidth),
|
|
float32(c.App.Config.PeakMeter.WindowHeight)))
|
|
}
|
|
c.peakMeter = visualizations.NewPeakMeter()
|
|
c.peakMeterWin.SetContent(c.peakMeter)
|
|
if c.App.LocalPlayer.GetStatus().State == player.Playing {
|
|
c.startVisualizationAnim()
|
|
} else {
|
|
// TODO: why is this needed?
|
|
c.peakMeter.Refresh()
|
|
}
|
|
c.peakMeterWin.Show()
|
|
}
|
|
|
|
func (c *Controller) stopVisualizationAnim() {
|
|
if c.visualizationAnim != nil {
|
|
c.visualizationAnim.Stop()
|
|
c.visualizationAnim = nil
|
|
// c.App.LocalPlayer.SetPeaksEnabled(false)
|
|
}
|
|
}
|
|
|
|
func (c *Controller) startVisualizationAnim() {
|
|
if c.visualizationAnim == nil {
|
|
//c.App.LocalPlayer.SetPeaksEnabled(true)
|
|
c.visualizationAnim = fyne.NewAnimation(
|
|
time.Duration(math.MaxInt64), /*until stopped*/
|
|
c.tickVisualizations)
|
|
c.visualizationAnim.Start()
|
|
}
|
|
}
|
|
|
|
func (c *Controller) tickVisualizations(_ float32) {
|
|
//lP, rP, lRMS, rRMS := c.App.LocalPlayer.GetPeaks()
|
|
if c.visualizationData.peakMeter != nil {
|
|
//c.visualizationData.peakMeter.UpdatePeaks(lP, rP, lRMS, rRMS)
|
|
}
|
|
}
|