feat(tracker): allow user to move rows through song using arrows

This commit is contained in:
vsariola
2021-01-06 18:50:07 +02:00
parent 492b2252bf
commit e7cd1b295b

View File

@ -79,19 +79,19 @@ func (t *Tracker) KeyEvent(e key.Event) bool {
} }
} }
case key.NameUpArrow: case key.NameUpArrow:
delta := -1
if e.Modifiers.Contain(key.ModCtrl) { if e.Modifiers.Contain(key.ModCtrl) {
t.DisplayPattern = (t.DisplayPattern + t.song.SequenceLength() - 1) % t.song.SequenceLength() delta = -t.song.PatternRows()
} else {
t.CursorRow = (t.CursorRow + t.song.PatternRows() - 1) % t.song.PatternRows()
} }
t.moveCursor(delta)
t.NoteTracking = false t.NoteTracking = false
return true return true
case key.NameDownArrow: case key.NameDownArrow:
delta := 1
if e.Modifiers.Contain(key.ModCtrl) { if e.Modifiers.Contain(key.ModCtrl) {
t.DisplayPattern = (t.DisplayPattern + 1) % t.song.SequenceLength() delta = t.song.PatternRows()
} else {
t.CursorRow = (t.CursorRow + 1) % t.song.PatternRows()
} }
t.moveCursor(delta)
t.NoteTracking = false t.NoteTracking = false
return true return true
case key.NameLeftArrow: case key.NameLeftArrow:
@ -123,6 +123,21 @@ func (t *Tracker) KeyEvent(e key.Event) bool {
return false return false
} }
func (t *Tracker) moveCursor(delta int) {
newRow := t.CursorRow + delta
remainder := (newRow + t.song.PatternRows()) % t.song.PatternRows()
t.DisplayPattern += (newRow - remainder) / t.song.PatternRows()
if t.DisplayPattern < 0 {
t.CursorRow = 0
t.DisplayPattern = 0
} else if t.DisplayPattern >= t.song.SequenceLength() {
t.CursorRow = t.song.PatternRows() - 1
t.DisplayPattern = t.song.SequenceLength() - 1
} else {
t.CursorRow = remainder
}
}
// setCurrent sets the (note) value in current pattern under cursor to iv // setCurrent sets the (note) value in current pattern under cursor to iv
func (t *Tracker) setCurrent(iv byte) { func (t *Tracker) setCurrent(iv byte) {
t.song.Tracks[t.ActiveTrack].Patterns[t.song.Tracks[t.ActiveTrack].Sequence[t.DisplayPattern]][t.CursorRow] = iv t.song.Tracks[t.ActiveTrack].Patterns[t.song.Tracks[t.ActiveTrack].Sequence[t.DisplayPattern]][t.CursorRow] = iv