LauncherGoDev/sysgo/UI/sound_patch.go
2021-10-11 13:55:54 +08:00

121 lines
2.2 KiB
Go

package UI
import (
"log"
"github.com/cuu/gogame/draw"
"github.com/cuu/gogame/rect"
"github.com/itchyny/volume-go"
//"github.com/cuu/gogame/color"
)
type SoundPatch struct {
AboveAllPatch
snd_segs [][2]int
Needle int
Parent *MainScreen
}
func NewSoundPatch() *SoundPatch {
p := &SoundPatch{}
p.PosX = Width / 2
p.PosY = Height / 2
p.Width = 50
p.Height = 120
p.FontObj = Fonts["veramono20"]
p.Color = MySkinManager.GiveColor("Text")
p.ValColor = MySkinManager.GiveColor("URL")
p.Icons = make(map[string]IconItemInterface)
p.Value = 0
p.snd_segs = [][2]int{[2]int{0, 20}, [2]int{21, 40}, [2]int{41, 50},
[2]int{51, 60}, [2]int{61, 70}, [2]int{71, 85},
[2]int{86, 90}, [2]int{91, 95}, [2]int{96, 100}}
return p
}
func (self *SoundPatch) Init() {
self.SetCanvasHWND(self.Parent.CanvasHWND)
}
func (self *SoundPatch) VolumeUp() int {
vol, err := volume.GetVolume()
if err != nil {
log.Printf("SoundPatch VolumeUp get volume failed: %+v", err)
vol = 0
}
for i, v := range self.snd_segs {
if vol >= v[0] && vol <= v[1] {
self.Needle = i
break
}
}
self.Needle += 1
if self.Needle > len(self.snd_segs)-1 {
self.Needle = len(self.snd_segs) - 1
}
val := self.snd_segs[self.Needle][0] + (self.snd_segs[self.Needle][1]-self.snd_segs[self.Needle][0])/2
volume.SetVolume(val)
self.Value = self.snd_segs[self.Needle][1]
self.Parent.TitleBar.SetSoundVolume(val)
return self.Value
}
func (self *SoundPatch) VolumeDown() int {
vol, err := volume.GetVolume()
if err != nil {
log.Printf("SoundPatch VolumeDown get volume failed: %+v\n", err)
vol = 0
}
for i, v := range self.snd_segs {
if vol >= v[0] && vol <= v[1] {
self.Needle = i
break
}
}
self.Needle -= 1
if self.Needle < 0 {
self.Needle = 0
}
val := self.snd_segs[self.Needle][0]
if val < 0 {
val = 0
}
volume.SetVolume(val)
self.Value = val
self.Parent.TitleBar.SetSoundVolume(val)
return self.Value
}
func (self *SoundPatch) Draw() {
for i := 0; i < (self.Needle + 1); i++ {
vol_rect := rect.Rect(80+i*20, self.Height/2+20, 10, 40)
draw.AARoundRect(self.CanvasHWND, &vol_rect, MySkinManager.GiveColor("Front"), 3, 0, MySkinManager.GiveColor("Front"))
}
}