| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 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
- }
|