101 lines
2.4 KiB
Go
101 lines
2.4 KiB
Go
package widget
|
||
|
||
import (
|
||
"fyne.io/fyne/v2"
|
||
"fyne.io/fyne/v2/driver/desktop"
|
||
)
|
||
|
||
var _ fyne.Widget = (*OverlayContainer)(nil)
|
||
var _ fyne.Tappable = (*OverlayContainer)(nil)
|
||
|
||
// OverlayContainer is a transparent widget containing one fyne.CanvasObject and meant to be used as overlay.
|
||
type OverlayContainer struct {
|
||
Base
|
||
Content fyne.CanvasObject
|
||
|
||
canvas fyne.Canvas
|
||
onDismiss func()
|
||
shown bool
|
||
}
|
||
|
||
// NewOverlayContainer creates an OverlayContainer.
|
||
func NewOverlayContainer(c fyne.CanvasObject, canvas fyne.Canvas, onDismiss func()) *OverlayContainer {
|
||
o := &OverlayContainer{canvas: canvas, Content: c, onDismiss: onDismiss}
|
||
o.ExtendBaseWidget(o)
|
||
return o
|
||
}
|
||
|
||
// CreateRenderer returns a new renderer for the overlay container.
|
||
//
|
||
// Implements: fyne.Widget
|
||
func (o *OverlayContainer) CreateRenderer() fyne.WidgetRenderer {
|
||
return &overlayRenderer{BaseRenderer{[]fyne.CanvasObject{o.Content}}, o}
|
||
}
|
||
|
||
// Hide hides the overlay container.
|
||
//
|
||
// Implements: fyne.Widget
|
||
func (o *OverlayContainer) Hide() {
|
||
if o.shown {
|
||
o.canvas.Overlays().Remove(o)
|
||
o.shown = false
|
||
}
|
||
o.Base.Hide()
|
||
}
|
||
|
||
// MouseIn catches mouse-in events not handled by the container’s content. It does nothing.
|
||
//
|
||
// Implements: desktop.Hoverable
|
||
func (o *OverlayContainer) MouseIn(*desktop.MouseEvent) {
|
||
}
|
||
|
||
// MouseMoved catches mouse-moved events not handled by the container’s content. It does nothing.
|
||
//
|
||
// Implements: desktop.Hoverable
|
||
func (o *OverlayContainer) MouseMoved(*desktop.MouseEvent) {
|
||
}
|
||
|
||
// MouseOut catches mouse-out events not handled by the container’s content. It does nothing.
|
||
//
|
||
// Implements: desktop.Hoverable
|
||
func (o *OverlayContainer) MouseOut() {
|
||
}
|
||
|
||
// Show makes the overlay container visible.
|
||
//
|
||
// Implements: fyne.Widget
|
||
func (o *OverlayContainer) Show() {
|
||
if !o.shown {
|
||
o.canvas.Overlays().Add(o)
|
||
o.shown = true
|
||
}
|
||
o.Base.Show()
|
||
}
|
||
|
||
// Tapped catches tap events not handled by the container’s content.
|
||
// It performs the overlay container’s dismiss action.
|
||
//
|
||
// Implements: fyne.Tappable
|
||
func (o *OverlayContainer) Tapped(*fyne.PointEvent) {
|
||
if o.onDismiss != nil {
|
||
o.onDismiss()
|
||
}
|
||
}
|
||
|
||
type overlayRenderer struct {
|
||
BaseRenderer
|
||
o *OverlayContainer
|
||
}
|
||
|
||
var _ fyne.WidgetRenderer = (*overlayRenderer)(nil)
|
||
|
||
func (r *overlayRenderer) Layout(fyne.Size) {
|
||
}
|
||
|
||
func (r *overlayRenderer) MinSize() fyne.Size {
|
||
return r.o.canvas.Size()
|
||
}
|
||
|
||
func (r *overlayRenderer) Refresh() {
|
||
}
|