mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-28 03:10:24 -04:00
fix(tracker): make sure undo & redo stack never grow beyond limit
This commit is contained in:
parent
048de55f00
commit
7ee43f199a
@ -981,12 +981,10 @@ func (m *Model) Undo() {
|
||||
if !m.CanUndo() {
|
||||
return
|
||||
}
|
||||
if len(m.d.RedoStack) >= maxUndo {
|
||||
m.d.RedoStack = m.d.RedoStack[1:]
|
||||
}
|
||||
m.d.RedoStack = append(m.d.RedoStack, m.d.Song.Copy())
|
||||
m.setSongNoUndo(m.d.UndoStack[len(m.d.UndoStack)-1])
|
||||
m.d.UndoStack = m.d.UndoStack[:len(m.d.UndoStack)-1]
|
||||
m.limitUndoRedoLengths()
|
||||
}
|
||||
|
||||
func (m *Model) CanUndo() bool {
|
||||
@ -1006,12 +1004,10 @@ func (m *Model) Redo() {
|
||||
if !m.CanRedo() {
|
||||
return
|
||||
}
|
||||
if len(m.d.UndoStack) >= maxUndo {
|
||||
m.d.UndoStack = m.d.UndoStack[1:]
|
||||
}
|
||||
m.d.UndoStack = append(m.d.UndoStack, m.d.Song.Copy())
|
||||
m.setSongNoUndo(m.d.RedoStack[len(m.d.RedoStack)-1])
|
||||
m.d.RedoStack = m.d.RedoStack[:len(m.d.RedoStack)-1]
|
||||
m.limitUndoRedoLengths()
|
||||
}
|
||||
|
||||
func (m *Model) CanRedo() bool {
|
||||
@ -1084,6 +1080,15 @@ func (m *Model) ParamIndex() int {
|
||||
return m.d.ParamIndex
|
||||
}
|
||||
|
||||
func (m *Model) limitUndoRedoLengths() {
|
||||
if len(m.d.UndoStack) >= maxUndo {
|
||||
m.d.UndoStack = m.d.UndoStack[len(m.d.UndoStack)-maxUndo:]
|
||||
}
|
||||
if len(m.d.RedoStack) >= maxUndo {
|
||||
m.d.RedoStack = m.d.RedoStack[len(m.d.RedoStack)-maxUndo:]
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Model) clampPositions() {
|
||||
m.d.Cursor = m.d.Cursor.Wrap(m.d.Song.Score)
|
||||
m.d.SelectionCorner = m.d.SelectionCorner.Wrap(m.d.Song.Score)
|
||||
@ -1377,11 +1382,9 @@ func (m *Model) saveUndo(undoType string, undoSkipping int) {
|
||||
m.d.ChangedSinceSave = true
|
||||
m.d.PrevUndoType = undoType
|
||||
m.d.UndoSkipCounter = 0
|
||||
if len(m.d.UndoStack) >= maxUndo {
|
||||
m.d.UndoStack = m.d.UndoStack[1:]
|
||||
}
|
||||
m.d.UndoStack = append(m.d.UndoStack, m.d.Song.Copy())
|
||||
m.d.RedoStack = m.d.RedoStack[:0]
|
||||
m.limitUndoRedoLengths()
|
||||
}
|
||||
|
||||
func (m *Model) freeUnitIDs(units []sointu.Unit) {
|
||||
|
Loading…
Reference in New Issue
Block a user