mirror of
https://github.com/vsariola/sointu.git
synced 2025-06-04 01:28:45 -04:00
refactor(tracker): change so that all icon initialization is a lazy & cache in iconcache
This commit is contained in:
parent
c667ffb4e1
commit
3cf2fc70a8
22
tracker/iconcache.go
Normal file
22
tracker/iconcache.go
Normal file
@ -0,0 +1,22 @@
|
||||
package tracker
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"gioui.org/widget"
|
||||
)
|
||||
|
||||
var iconCache = map[*byte]*widget.Icon{}
|
||||
|
||||
// widgetForIcon returns a widget for IconVG data, but caching the results
|
||||
func widgetForIcon(icon []byte) *widget.Icon {
|
||||
if widget, ok := iconCache[&icon[0]]; ok {
|
||||
return widget
|
||||
}
|
||||
widget, err := widget.NewIcon(icon)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
iconCache[&icon[0]] = widget
|
||||
return widget
|
||||
}
|
@ -11,6 +11,7 @@ import (
|
||||
"gioui.org/unit"
|
||||
"gioui.org/widget"
|
||||
"gioui.org/widget/material"
|
||||
"golang.org/x/exp/shiny/materialdesign/icons"
|
||||
)
|
||||
|
||||
type C = layout.Context
|
||||
@ -25,7 +26,7 @@ func (t *Tracker) updateInstrumentScroll() {
|
||||
}
|
||||
|
||||
func (t *Tracker) layoutInstruments() layout.Widget {
|
||||
btnStyle := material.IconButton(t.Theme, t.NewInstrumentBtn, addIcon)
|
||||
btnStyle := material.IconButton(t.Theme, t.NewInstrumentBtn, widgetForIcon(icons.ContentAdd))
|
||||
btnStyle.Background = transparent
|
||||
btnStyle.Inset = layout.UniformInset(unit.Dp(6))
|
||||
if t.song.Patch.TotalVoices() < 32 {
|
||||
@ -57,7 +58,7 @@ func (t *Tracker) layoutInstrumentHeader() layout.Widget {
|
||||
return layout.Dimensions{Size: gtx.Constraints.Min}
|
||||
}
|
||||
header := func(gtx C) D {
|
||||
deleteInstrumentBtnStyle := material.IconButton(t.Theme, t.DeleteInstrumentBtn, deleteIcon)
|
||||
deleteInstrumentBtnStyle := material.IconButton(t.Theme, t.DeleteInstrumentBtn, widgetForIcon(icons.ActionDelete))
|
||||
deleteInstrumentBtnStyle.Background = transparent
|
||||
deleteInstrumentBtnStyle.Inset = layout.UniformInset(unit.Dp(6))
|
||||
if len(t.song.Patch.Instruments) > 1 {
|
||||
|
@ -3,7 +3,6 @@ package tracker
|
||||
import (
|
||||
"image"
|
||||
"image/color"
|
||||
"log"
|
||||
|
||||
"gioui.org/layout"
|
||||
"gioui.org/op"
|
||||
@ -12,50 +11,9 @@ import (
|
||||
"gioui.org/unit"
|
||||
"gioui.org/widget"
|
||||
"gioui.org/widget/material"
|
||||
|
||||
"golang.org/x/exp/shiny/materialdesign/icons"
|
||||
)
|
||||
|
||||
var upIcon *widget.Icon
|
||||
var downIcon *widget.Icon
|
||||
var addIcon *widget.Icon
|
||||
var loadIcon *widget.Icon
|
||||
var saveIcon *widget.Icon
|
||||
var clearIcon *widget.Icon
|
||||
var deleteIcon *widget.Icon
|
||||
|
||||
func init() {
|
||||
var err error
|
||||
upIcon, err = widget.NewIcon(icons.NavigationArrowUpward)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
downIcon, err = widget.NewIcon(icons.NavigationArrowDownward)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
addIcon, err = widget.NewIcon(icons.ContentAdd)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
loadIcon, err = widget.NewIcon(icons.FileFolder)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
saveIcon, err = widget.NewIcon(icons.ContentSave)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
clearIcon, err = widget.NewIcon(icons.ContentClear)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
deleteIcon, err = widget.NewIcon(icons.ActionDelete)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func smallButton(icStyle material.IconButtonStyle) material.IconButtonStyle {
|
||||
icStyle.Size = unit.Dp(14)
|
||||
icStyle.Inset = layout.UniformInset(unit.Dp(1))
|
||||
@ -178,7 +136,7 @@ func (t *Tracker) layoutTracks(gtx layout.Context) layout.Dimensions {
|
||||
subtractOctaveBtnStyle.Color = primaryColor
|
||||
subtractOctaveBtnStyle.Background = transparent
|
||||
subtractOctaveBtnStyle.Inset = layout.UniformInset(unit.Dp(6))
|
||||
newTrackBtnStyle := material.IconButton(t.Theme, t.NewTrackBtn, addIcon)
|
||||
newTrackBtnStyle := material.IconButton(t.Theme, t.NewTrackBtn, widgetForIcon(icons.ContentAdd))
|
||||
newTrackBtnStyle.Background = transparent
|
||||
newTrackBtnStyle.Inset = layout.UniformInset(unit.Dp(6))
|
||||
if t.song.TotalTrackVoices() < t.song.Patch.TotalVoices() {
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
"gioui.org/op/paint"
|
||||
"gioui.org/unit"
|
||||
"gioui.org/widget/material"
|
||||
"golang.org/x/exp/shiny/materialdesign/icons"
|
||||
)
|
||||
|
||||
func (t *Tracker) layoutSongPanel(gtx C) D {
|
||||
@ -36,17 +37,17 @@ func (t *Tracker) layoutSongButtons(gtx C) D {
|
||||
t.SaveSongFile()
|
||||
}
|
||||
|
||||
newBtnStyle := material.IconButton(t.Theme, t.NewSongFileBtn, clearIcon)
|
||||
newBtnStyle := material.IconButton(t.Theme, t.NewSongFileBtn, widgetForIcon(icons.ContentClear))
|
||||
newBtnStyle.Background = transparent
|
||||
newBtnStyle.Inset = layout.UniformInset(unit.Dp(6))
|
||||
newBtnStyle.Color = primaryColor
|
||||
|
||||
loadBtnStyle := material.IconButton(t.Theme, t.LoadSongFileBtn, loadIcon)
|
||||
loadBtnStyle := material.IconButton(t.Theme, t.LoadSongFileBtn, widgetForIcon(icons.FileFolder))
|
||||
loadBtnStyle.Background = transparent
|
||||
loadBtnStyle.Inset = layout.UniformInset(unit.Dp(6))
|
||||
loadBtnStyle.Color = primaryColor
|
||||
|
||||
saveBtnStyle := material.IconButton(t.Theme, t.SaveSongFileBtn, saveIcon)
|
||||
saveBtnStyle := material.IconButton(t.Theme, t.SaveSongFileBtn, widgetForIcon(icons.ContentSave))
|
||||
saveBtnStyle.Background = transparent
|
||||
saveBtnStyle.Inset = layout.UniformInset(unit.Dp(6))
|
||||
saveBtnStyle.Color = primaryColor
|
||||
|
Loading…
x
Reference in New Issue
Block a user