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/widget"
"github.com/dweymouth/supersonic/backend"
myTheme "github.com/dweymouth/supersonic/ui/theme"
)
type WaveformSeekbar struct {
@@ -26,7 +25,7 @@ type WaveformSeekbar struct {
imgProgressPixel int
img *canvas.Image
cursor *myTheme.ThemedRectangle
cursor *canvas.Rectangle
}
func NewWaveformSeekbar() *WaveformSeekbar {
@@ -34,10 +33,10 @@ func NewWaveformSeekbar() *WaveformSeekbar {
img: &canvas.Image{
ScaleMode: canvas.ImageScaleFastest,
},
cursor: myTheme.NewThemedRectangle(theme.ColorNameForeground),
cursor: canvas.NewRectangle(color.Transparent),
}
w.cursor.Hide()
w.ExtendBaseWidget(w)
w.cursor.Hidden = true
return w
}
@@ -49,22 +48,26 @@ func (w *WaveformSeekbar) UpdateImage(img *backend.WaveformImage) {
}
func (w *WaveformSeekbar) Refresh() {
w.cursor.Resize(fyne.NewSize(1.5, w.Size().Height-4))
w.cursor.Refresh()
w.cursor.Resize(fyne.NewSize(1, w.Size().Height-4))
prm, fg := w.getThemeColors()
if w.recolorImage(prm, fg, w.imgProgressPixel) {
w.img.Refresh()
}
w.recolorImage(prm, fg, w.imgProgressPixel)
w.recolorCursor(prm, fg, w.cursor.Position().X)
w.BaseWidget.Refresh()
}
var _ desktop.Hoverable = (*WaveformSeekbar)(nil)
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.Show()
}
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))
}
@@ -107,6 +110,15 @@ func (w *WaveformSeekbar) getThemeColors() (primary, foreground color.Color) {
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) {
if w.img.Image == nil {
return false