fix appearance of waveform seek cursor

This commit is contained in:
Drew Weymouth
2025-08-01 08:37:08 -07:00
parent 8f50e1087b
commit e0cb2a57ac
+21 -9
View File
@@ -13,7 +13,6 @@ import (
"fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget" "fyne.io/fyne/v2/widget"
"github.com/dweymouth/supersonic/backend" "github.com/dweymouth/supersonic/backend"
myTheme "github.com/dweymouth/supersonic/ui/theme"
) )
type WaveformSeekbar struct { type WaveformSeekbar struct {
@@ -26,7 +25,7 @@ type WaveformSeekbar struct {
imgProgressPixel int imgProgressPixel int
img *canvas.Image img *canvas.Image
cursor *myTheme.ThemedRectangle cursor *canvas.Rectangle
} }
func NewWaveformSeekbar() *WaveformSeekbar { func NewWaveformSeekbar() *WaveformSeekbar {
@@ -34,10 +33,10 @@ func NewWaveformSeekbar() *WaveformSeekbar {
img: &canvas.Image{ img: &canvas.Image{
ScaleMode: canvas.ImageScaleFastest, ScaleMode: canvas.ImageScaleFastest,
}, },
cursor: myTheme.NewThemedRectangle(theme.ColorNameForeground), cursor: canvas.NewRectangle(color.Transparent),
} }
w.cursor.Hide()
w.ExtendBaseWidget(w) w.ExtendBaseWidget(w)
w.cursor.Hidden = true
return w return w
} }
@@ -49,22 +48,26 @@ func (w *WaveformSeekbar) UpdateImage(img *backend.WaveformImage) {
} }
func (w *WaveformSeekbar) Refresh() { func (w *WaveformSeekbar) Refresh() {
w.cursor.Resize(fyne.NewSize(1.5, w.Size().Height-4)) w.cursor.Resize(fyne.NewSize(1, w.Size().Height-4))
w.cursor.Refresh()
prm, fg := w.getThemeColors() prm, fg := w.getThemeColors()
if w.recolorImage(prm, fg, w.imgProgressPixel) { w.recolorImage(prm, fg, w.imgProgressPixel)
w.img.Refresh() w.recolorCursor(prm, fg, w.cursor.Position().X)
} w.BaseWidget.Refresh()
} }
var _ desktop.Hoverable = (*WaveformSeekbar)(nil) var _ desktop.Hoverable = (*WaveformSeekbar)(nil)
func (w *WaveformSeekbar) MouseIn(e *desktop.MouseEvent) { func (w *WaveformSeekbar) MouseIn(e *desktop.MouseEvent) {
prm, fg := w.getThemeColors()
w.recolorCursor(prm, fg, e.Position.X)
w.cursor.Resize(fyne.NewSize(1, w.Size().Height-4))
w.cursor.Move(fyne.NewPos(e.Position.X, 2)) w.cursor.Move(fyne.NewPos(e.Position.X, 2))
w.cursor.Show() w.cursor.Show()
} }
func (w *WaveformSeekbar) MouseMoved(e *desktop.MouseEvent) { func (w *WaveformSeekbar) MouseMoved(e *desktop.MouseEvent) {
prm, fg := w.getThemeColors()
w.recolorCursor(prm, fg, e.Position.X)
w.cursor.Move(fyne.NewPos(e.Position.X, 2)) w.cursor.Move(fyne.NewPos(e.Position.X, 2))
} }
@@ -107,6 +110,15 @@ func (w *WaveformSeekbar) getThemeColors() (primary, foreground color.Color) {
return primary, foreground return primary, foreground
} }
func (w *WaveformSeekbar) recolorCursor(prm, fg color.Color, posX float32) {
progress := float32(w.imgProgressPixel) / 1024 /*waveform image width*/
if posX/w.Size().Width < progress {
w.cursor.FillColor = fg
} else {
w.cursor.FillColor = prm
}
}
func (w *WaveformSeekbar) recolorImage(cL, cR color.Color, progress int) (updated bool) { func (w *WaveformSeekbar) recolorImage(cL, cR color.Color, progress int) (updated bool) {
if w.img.Image == nil { if w.img.Image == nil {
return false return false