36 lines
844 B
Go
36 lines
844 B
Go
package cache
|
|
|
|
import (
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/internal/async"
|
|
)
|
|
|
|
var canvases async.Map[fyne.CanvasObject, *canvasInfo]
|
|
|
|
// GetCanvasForObject returns the canvas for the specified object.
|
|
func GetCanvasForObject(obj fyne.CanvasObject) fyne.Canvas {
|
|
cinfo, ok := canvases.Load(obj)
|
|
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()
|
|
|
|
old, found := canvases.LoadOrStore(obj, cinfo)
|
|
if (!found || old.canvas != c) && setup != nil {
|
|
setup()
|
|
}
|
|
}
|
|
|
|
type canvasInfo struct {
|
|
expiringCache
|
|
canvas fyne.Canvas
|
|
}
|