mirror of
https://github.com/vsariola/sointu.git
synced 2025-06-04 01:28:45 -04:00
feat(tracker): add buttons for increasing and decreasing song length
This commit is contained in:
parent
8b666064b2
commit
dcb0877c71
@ -188,6 +188,14 @@ func (t *Tracker) layoutControls(gtx layout.Context) layout.Dimensions {
|
|||||||
t.SaveSongFile()
|
t.SaveSongFile()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for t.SongLengthUpBtn.Clicked() {
|
||||||
|
t.IncreaseSongLength()
|
||||||
|
}
|
||||||
|
|
||||||
|
for t.SongLengthDownBtn.Clicked() {
|
||||||
|
t.DecreaseSongLength()
|
||||||
|
}
|
||||||
|
|
||||||
return layout.Flex{Axis: layout.Horizontal}.Layout(gtx,
|
return layout.Flex{Axis: layout.Horizontal}.Layout(gtx,
|
||||||
layout.Rigid(t.layoutPatterns(
|
layout.Rigid(t.layoutPatterns(
|
||||||
t.song.Tracks,
|
t.song.Tracks,
|
||||||
@ -196,6 +204,12 @@ func (t *Tracker) layoutControls(gtx layout.Context) layout.Dimensions {
|
|||||||
t.CursorColumn,
|
t.CursorColumn,
|
||||||
playPat,
|
playPat,
|
||||||
)),
|
)),
|
||||||
|
layout.Rigid(func(gtx layout.Context) layout.Dimensions {
|
||||||
|
return in.Layout(gtx, smallButton(material.IconButton(t.Theme, t.SongLengthUpBtn, upIcon)).Layout)
|
||||||
|
}),
|
||||||
|
layout.Rigid(func(gtx layout.Context) layout.Dimensions {
|
||||||
|
return in.Layout(gtx, enableButton(smallButton(material.IconButton(t.Theme, t.SongLengthDownBtn, downIcon)), t.song.SequenceLength() > 1).Layout)
|
||||||
|
}),
|
||||||
layout.Rigid(Label(fmt.Sprintf("BPM: %3v", t.song.BPM), white)),
|
layout.Rigid(Label(fmt.Sprintf("BPM: %3v", t.song.BPM), white)),
|
||||||
layout.Rigid(func(gtx layout.Context) layout.Dimensions {
|
layout.Rigid(func(gtx layout.Context) layout.Dimensions {
|
||||||
return in.Layout(gtx, enableButton(smallButton(material.IconButton(t.Theme, t.BPMUpBtn, upIcon)), t.song.BPM < 999).Layout)
|
return in.Layout(gtx, enableButton(smallButton(material.IconButton(t.Theme, t.BPMUpBtn, upIcon)), t.song.BPM < 999).Layout)
|
||||||
|
@ -37,6 +37,8 @@ type Tracker struct {
|
|||||||
NewTrackBtn *widget.Clickable
|
NewTrackBtn *widget.Clickable
|
||||||
NewInstrumentBtn *widget.Clickable
|
NewInstrumentBtn *widget.Clickable
|
||||||
LoadSongFileBtn *widget.Clickable
|
LoadSongFileBtn *widget.Clickable
|
||||||
|
SongLengthUpBtn *widget.Clickable
|
||||||
|
SongLengthDownBtn *widget.Clickable
|
||||||
SaveSongFileBtn *widget.Clickable
|
SaveSongFileBtn *widget.Clickable
|
||||||
ParameterSliders []*widget.Float
|
ParameterSliders []*widget.Float
|
||||||
UnitBtns []*widget.Clickable
|
UnitBtns []*widget.Clickable
|
||||||
@ -253,28 +255,47 @@ func (t *Tracker) SetCurrentPattern(pat byte) {
|
|||||||
t.song.Tracks[t.ActiveTrack].Sequence[t.DisplayPattern] = pat
|
t.song.Tracks[t.ActiveTrack].Sequence[t.DisplayPattern] = pat
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Tracker) IncreaseSongLength() {
|
||||||
|
t.SaveUndo()
|
||||||
|
for i := range t.song.Tracks {
|
||||||
|
seq := t.song.Tracks[i].Sequence
|
||||||
|
t.song.Tracks[i].Sequence = append(seq, seq[len(seq)-1])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Tracker) DecreaseSongLength() {
|
||||||
|
t.SaveUndo()
|
||||||
|
for i := range t.song.Tracks {
|
||||||
|
if len(t.song.Tracks[i].Sequence) > 0 {
|
||||||
|
t.song.Tracks[i].Sequence = t.song.Tracks[i].Sequence[0 : len(t.song.Tracks[i].Sequence)-1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func New(audioContext sointu.AudioContext) *Tracker {
|
func New(audioContext sointu.AudioContext) *Tracker {
|
||||||
t := &Tracker{
|
t := &Tracker{
|
||||||
Theme: material.NewTheme(gofont.Collection()),
|
Theme: material.NewTheme(gofont.Collection()),
|
||||||
QuitButton: new(widget.Clickable),
|
QuitButton: new(widget.Clickable),
|
||||||
CurrentOctave: 4,
|
CurrentOctave: 4,
|
||||||
audioContext: audioContext,
|
audioContext: audioContext,
|
||||||
OctaveUpBtn: new(widget.Clickable),
|
OctaveUpBtn: new(widget.Clickable),
|
||||||
OctaveDownBtn: new(widget.Clickable),
|
OctaveDownBtn: new(widget.Clickable),
|
||||||
BPMUpBtn: new(widget.Clickable),
|
BPMUpBtn: new(widget.Clickable),
|
||||||
BPMDownBtn: new(widget.Clickable),
|
BPMDownBtn: new(widget.Clickable),
|
||||||
NewTrackBtn: new(widget.Clickable),
|
NewTrackBtn: new(widget.Clickable),
|
||||||
NewInstrumentBtn: new(widget.Clickable),
|
NewInstrumentBtn: new(widget.Clickable),
|
||||||
LoadSongFileBtn: new(widget.Clickable),
|
LoadSongFileBtn: new(widget.Clickable),
|
||||||
SaveSongFileBtn: new(widget.Clickable),
|
SaveSongFileBtn: new(widget.Clickable),
|
||||||
setPlaying: make(chan bool),
|
SongLengthUpBtn: new(widget.Clickable),
|
||||||
rowJump: make(chan int),
|
SongLengthDownBtn: new(widget.Clickable),
|
||||||
patternJump: make(chan int),
|
setPlaying: make(chan bool),
|
||||||
ticked: make(chan struct{}),
|
rowJump: make(chan int),
|
||||||
closer: make(chan struct{}),
|
patternJump: make(chan int),
|
||||||
undoStack: []sointu.Song{},
|
ticked: make(chan struct{}),
|
||||||
redoStack: []sointu.Song{},
|
closer: make(chan struct{}),
|
||||||
InstrumentList: &layout.List{Axis: layout.Horizontal},
|
undoStack: []sointu.Song{},
|
||||||
|
redoStack: []sointu.Song{},
|
||||||
|
InstrumentList: &layout.List{Axis: layout.Horizontal},
|
||||||
}
|
}
|
||||||
t.Theme.Color.Primary = primaryColor
|
t.Theme.Color.Primary = primaryColor
|
||||||
t.Theme.Color.InvText = black
|
t.Theme.Color.InvText = black
|
||||||
|
Loading…
x
Reference in New Issue
Block a user