Files
supersonic/ui/widgets/auxcontrols.go
T
2022-12-29 14:40:10 -08:00

109 lines
2.1 KiB
Go

package widgets
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/layout"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
)
type AuxControls struct {
widget.BaseWidget
VolumeControl *VolumeControl
container *fyne.Container
}
func NewAuxControls() *AuxControls {
a := &AuxControls{
VolumeControl: NewVolumeControl(),
}
a.container = container.NewHBox(layout.NewSpacer(), a.VolumeControl)
return a
}
func (a *AuxControls) CreateRenderer() fyne.WidgetRenderer {
a.ExtendBaseWidget(a)
return widget.NewSimpleRenderer(a.container)
}
type volumeSlider struct {
widget.Slider
Width float32
}
func NewVolumeSlider(width float32) *volumeSlider {
v := &volumeSlider{
Slider: widget.Slider{
Min: 0,
Max: 100,
Step: 1,
Orientation: widget.Horizontal,
Value: 100,
},
Width: width,
}
v.ExtendBaseWidget(v)
return v
}
func (v *volumeSlider) MinSize() fyne.Size {
h := v.Slider.MinSize().Height
return fyne.NewSize(v.Width, h)
}
type VolumeControl struct {
widget.BaseWidget
icon *widget.Icon
slider *volumeSlider
OnVolumeChanged func(int)
container *fyne.Container
}
func NewVolumeControl() *VolumeControl {
v := &VolumeControl{}
v.ExtendBaseWidget(v)
v.icon = widget.NewIcon(theme.VolumeUpIcon())
v.slider = NewVolumeSlider(100)
v.slider.Step = 1
v.slider.Orientation = widget.Horizontal
v.slider.Value = 100
v.slider.OnChanged = v.onChanged
v.container = container.NewHBox(v.icon, v.slider)
return v
}
func (v *VolumeControl) onChanged(volume float64) {
vol := int(volume)
if vol <= 0 {
vol = 0
v.icon.Resource = theme.VolumeMuteIcon()
} else if vol < 50 {
v.icon.Resource = theme.VolumeDownIcon()
} else {
if vol > 100 {
vol = 100
}
v.icon.Resource = theme.VolumeUpIcon()
}
v.icon.Refresh()
if v.OnVolumeChanged != nil {
v.OnVolumeChanged(vol)
}
}
func (v *VolumeControl) CreateRenderer() fyne.WidgetRenderer {
v.ExtendBaseWidget(v)
return widget.NewSimpleRenderer(v.container)
}
func (v *VolumeControl) SetVolume(vol int) {
v.slider.Value = float64(vol)
}