adam-gui/vendor/fyne.io/fyne/v2/internal/cache/canvases.go

43 lines
944 B
Go
Raw Permalink Normal View History

2024-04-29 19:13:50 +02:00
package cache
import (
"sync"
"fyne.io/fyne/v2"
)
var canvasesLock sync.RWMutex
var canvases = make(map[fyne.CanvasObject]*canvasInfo, 1024)
// GetCanvasForObject returns the canvas for the specified object.
func GetCanvasForObject(obj fyne.CanvasObject) fyne.Canvas {
canvasesLock.RLock()
cinfo, ok := canvases[obj]
canvasesLock.RUnlock()
if cinfo == nil || !ok {
return nil
}
cinfo.setAlive()
return cinfo.canvas
}
// SetCanvasForObject sets the canvas for the specified object.
// The passed function will be called if the item was not previously attached to this canvas
func SetCanvasForObject(obj fyne.CanvasObject, c fyne.Canvas, setup func()) {
cinfo := &canvasInfo{canvas: c}
cinfo.setAlive()
canvasesLock.Lock()
old, found := canvases[obj]
canvases[obj] = cinfo
canvasesLock.Unlock()
if (!found || old.canvas != c) && setup != nil {
setup()
}
}
type canvasInfo struct {
expiringCache
canvas fyne.Canvas
}