mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-28 03:10:24 -04:00
53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package tracker
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"gioui.org/layout"
|
|
)
|
|
|
|
func (t *Tracker) Layout(gtx layout.Context) {
|
|
layout.Flex{Axis: layout.Vertical}.Layout(gtx,
|
|
layout.Rigid(t.layoutControls),
|
|
layout.Rigid(Lowered(t.layoutPatterns(
|
|
t.song.Tracks,
|
|
t.ActiveTrack,
|
|
t.DisplayPattern,
|
|
t.CursorColumn,
|
|
t.PlayPattern,
|
|
))),
|
|
layout.Flexed(1, Lowered(t.layoutTracker)),
|
|
)
|
|
}
|
|
|
|
func (t *Tracker) layoutTracker(gtx layout.Context) layout.Dimensions {
|
|
flexTracks := make([]layout.FlexChild, len(t.song.Tracks))
|
|
t.playRowPatMutex.RLock()
|
|
defer t.playRowPatMutex.RUnlock()
|
|
playRow := int(t.PlayRow)
|
|
if t.DisplayPattern != t.PlayPattern {
|
|
playRow = -1
|
|
}
|
|
for i, trk := range t.song.Tracks {
|
|
flexTracks[i] = layout.Rigid(Lowered(t.layoutTrack(
|
|
t.song.Patterns[trk.Sequence[t.DisplayPattern]],
|
|
t.ActiveTrack == i,
|
|
t.CursorRow,
|
|
t.CursorColumn,
|
|
playRow,
|
|
)))
|
|
}
|
|
return layout.Flex{Axis: layout.Horizontal}.Layout(gtx,
|
|
flexTracks...,
|
|
)
|
|
}
|
|
|
|
func (t *Tracker) layoutControls(gtx layout.Context) layout.Dimensions {
|
|
gtx.Constraints.Min.Y = 200
|
|
gtx.Constraints.Max.Y = 200
|
|
return layout.Stack{Alignment: layout.NW}.Layout(gtx,
|
|
layout.Expanded(t.QuitButton.Layout),
|
|
layout.Stacked(Raised(Label(fmt.Sprintf("Current octave: %v", t.CurrentOctave), white))),
|
|
)
|
|
}
|