fix appearance of waveform seek cursor
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user