Fix Output Device toggle

This commit is contained in:
NeilClack
2026-08-08 00:54:18 -05:00
parent 85402b42f3
commit 843170b282
2 changed files with 51 additions and 15 deletions
+22 -15
View File
@@ -15,7 +15,10 @@ import (
"rhemawavetech.com/rhemawave/internal/shaderManager"
)
const focusToggle = -1
// focusToggle is the focus state of the audio on/off toggle, the bottommost
// focusable item. Focus states increase from top to bottom on screen:
// 0 = Audio Track entry, 1 = Output Device entry, focusToggle = toggle.
const focusToggle = 2
const triangleSize = float32(16)
@@ -325,6 +328,20 @@ func (p *AudioOptions) ToggleAudio() {
p.layout()
}
// moveFocus returns the focus state after moving by delta (1 = down, -1 = up)
// on screen. Focus states run 0 (Audio Track) to focusToggle (toggle), so
// navigation never skips the Output Device entry.
func moveFocus(current, delta int) int {
next := current + delta
if next < 0 {
next = 0
}
if next > focusToggle {
next = focusToggle
}
return next
}
func (p *AudioOptions) HandleEvent(event *sdl.Event) error {
e, ok := (*event).(*sdl.KeyboardEvent)
if !ok || e.Type != sdl.KEYDOWN {
@@ -343,22 +360,12 @@ func (p *AudioOptions) HandleEvent(event *sdl.Event) error {
}
case sdl.K_DOWN:
if p.focusState == focusToggle {
p.focusState = 0
p.updateCursorPosition()
} else if p.focusState < 1 {
p.focusState++
p.updateCursorPosition()
}
p.focusState = moveFocus(p.focusState, 1)
p.updateCursorPosition()
case sdl.K_UP:
if p.focusState == 0 {
p.focusState = focusToggle
p.updateCursorPosition()
} else if p.focusState > 0 {
p.focusState--
p.updateCursorPosition()
}
p.focusState = moveFocus(p.focusState, -1)
p.updateCursorPosition()
case sdl.K_RIGHT:
p.UpdateVolume(10)