add controller logic for visualizations and add to gear menu

This commit is contained in:
Drew Weymouth
2024-07-22 18:16:18 -07:00
parent 0b3687a2ff
commit 9d0b381572
6 changed files with 87 additions and 44 deletions
+68
View File
@@ -0,0 +1,68 @@
package controller
import (
"math"
"time"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/lang"
"github.com/dweymouth/supersonic/ui/visualizations"
)
// embedded in parent controller struct
type visualizationData struct {
peakMeter *visualizations.PeakMeter
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.peakMeter != nil {
return
}
win := fyne.CurrentApp().NewWindow(lang.L("Peak Meter"))
win.SetCloseIntercept(func() {
c.stopVisualizationAnim()
c.peakMeter = nil
win.Close()
})
c.peakMeter = visualizations.NewPeakMeter()
win.SetContent(c.peakMeter)
c.startVisualizationAnim()
win.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)
}
}