overlay_container.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package widget
  2. import (
  3. "fyne.io/fyne/v2"
  4. "fyne.io/fyne/v2/driver/desktop"
  5. )
  6. var _ fyne.Widget = (*OverlayContainer)(nil)
  7. var _ fyne.Tappable = (*OverlayContainer)(nil)
  8. // OverlayContainer is a transparent widget containing one fyne.CanvasObject and meant to be used as overlay.
  9. type OverlayContainer struct {
  10. Base
  11. Content fyne.CanvasObject
  12. canvas fyne.Canvas
  13. onDismiss func()
  14. shown bool
  15. }
  16. // NewOverlayContainer creates an OverlayContainer.
  17. func NewOverlayContainer(c fyne.CanvasObject, canvas fyne.Canvas, onDismiss func()) *OverlayContainer {
  18. o := &OverlayContainer{canvas: canvas, Content: c, onDismiss: onDismiss}
  19. o.ExtendBaseWidget(o)
  20. return o
  21. }
  22. // CreateRenderer returns a new renderer for the overlay container.
  23. //
  24. // Implements: fyne.Widget
  25. func (o *OverlayContainer) CreateRenderer() fyne.WidgetRenderer {
  26. return &overlayRenderer{BaseRenderer{[]fyne.CanvasObject{o.Content}}, o}
  27. }
  28. // Hide hides the overlay container.
  29. //
  30. // Implements: fyne.Widget
  31. func (o *OverlayContainer) Hide() {
  32. if o.shown {
  33. o.canvas.Overlays().Remove(o)
  34. o.shown = false
  35. }
  36. o.Base.Hide()
  37. }
  38. // MouseIn catches mouse-in events not handled by the container’s content. It does nothing.
  39. //
  40. // Implements: desktop.Hoverable
  41. func (o *OverlayContainer) MouseIn(*desktop.MouseEvent) {
  42. }
  43. // MouseMoved catches mouse-moved events not handled by the container’s content. It does nothing.
  44. //
  45. // Implements: desktop.Hoverable
  46. func (o *OverlayContainer) MouseMoved(*desktop.MouseEvent) {
  47. }
  48. // MouseOut catches mouse-out events not handled by the container’s content. It does nothing.
  49. //
  50. // Implements: desktop.Hoverable
  51. func (o *OverlayContainer) MouseOut() {
  52. }
  53. // Show makes the overlay container visible.
  54. //
  55. // Implements: fyne.Widget
  56. func (o *OverlayContainer) Show() {
  57. if !o.shown {
  58. o.canvas.Overlays().Add(o)
  59. o.shown = true
  60. }
  61. o.Base.Show()
  62. }
  63. // Tapped catches tap events not handled by the container’s content.
  64. // It performs the overlay container’s dismiss action.
  65. //
  66. // Implements: fyne.Tappable
  67. func (o *OverlayContainer) Tapped(*fyne.PointEvent) {
  68. if o.onDismiss != nil {
  69. o.onDismiss()
  70. }
  71. }
  72. type overlayRenderer struct {
  73. BaseRenderer
  74. o *OverlayContainer
  75. }
  76. var _ fyne.WidgetRenderer = (*overlayRenderer)(nil)
  77. func (r *overlayRenderer) Layout(fyne.Size) {
  78. }
  79. func (r *overlayRenderer) MinSize() fyne.Size {
  80. return r.o.canvas.Size()
  81. }
  82. func (r *overlayRenderer) Refresh() {
  83. }