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() {
|
|||
|
}
|