109 lines
2.1 KiB
Go
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)
|
|
}
|