joyful/internal/mappingrules/rule_target_modeselect.go
Anna Rose Wiggins ff38db6596 Big Refactor (#2)
Refactor Everything.

Co-authored-by: Anna Rose Wiggins <annabunches@gmail.com>
Co-committed-by: Anna Rose Wiggins <annabunches@gmail.com>
2025-07-08 03:26:24 +00:00

43 lines
1 KiB
Go

package mappingrules
import (
"errors"
"slices"
"git.annabunches.net/annabunches/joyful/internal/logger"
"github.com/holoplot/go-evdev"
)
type RuleTargetModeSelect struct {
Modes []string
}
func NewRuleTargetModeSelect(modes []string) (*RuleTargetModeSelect, error) {
if len(modes) == 0 {
return nil, errors.New("cannot create RuleTargetModeSelect: mode list is empty")
}
return &RuleTargetModeSelect{
Modes: modes,
}, nil
}
// RuleTargetModeSelect doesn't make sense as an input type
func (target *RuleTargetModeSelect) NormalizeValue(_ int32) int32 {
return -1
}
func (target *RuleTargetModeSelect) CreateEvent(_ int32, mode *string) *evdev.InputEvent {
index := 0
if currentMode := slices.Index(target.Modes, *mode); currentMode != -1 {
// find the next mode
index = (currentMode + 1) % len(target.Modes)
}
*mode = target.Modes[index]
logger.Logf("Mode changed to '%s'", *mode)
return nil
}
func (target *RuleTargetModeSelect) MatchEvent(_ *evdev.InputDevice, _ *evdev.InputEvent) bool {
return false
}