canvases.go 754 B

123456789101112131415161718192021222324252627282930313233343536
  1. package cache
  2. import (
  3. "sync"
  4. "fyne.io/fyne/v2"
  5. )
  6. var canvasesLock sync.RWMutex
  7. var canvases = make(map[fyne.CanvasObject]*canvasInfo, 1024)
  8. // GetCanvasForObject returns the canvas for the specified object.
  9. func GetCanvasForObject(obj fyne.CanvasObject) fyne.Canvas {
  10. canvasesLock.RLock()
  11. cinfo, ok := canvases[obj]
  12. canvasesLock.RUnlock()
  13. if cinfo == nil || !ok {
  14. return nil
  15. }
  16. cinfo.setAlive()
  17. return cinfo.canvas
  18. }
  19. // SetCanvasForObject sets the canvas for the specified object.
  20. func SetCanvasForObject(obj fyne.CanvasObject, canvas fyne.Canvas) {
  21. cinfo := &canvasInfo{canvas: canvas}
  22. cinfo.setAlive()
  23. canvasesLock.Lock()
  24. canvases[obj] = cinfo
  25. canvasesLock.Unlock()
  26. }
  27. type canvasInfo struct {
  28. expiringCache
  29. canvas fyne.Canvas
  30. }