adam-gui/vendor/fyne.io/fyne/v2/internal/widget/overlay_container.go

101 lines
2.4 KiB
Go
Raw Normal View History

2024-04-29 19:13:50 +02:00
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 containers content. It does nothing.
//
// Implements: desktop.Hoverable
func (o *OverlayContainer) MouseIn(*desktop.MouseEvent) {
}
// MouseMoved catches mouse-moved events not handled by the containers content. It does nothing.
//
// Implements: desktop.Hoverable
func (o *OverlayContainer) MouseMoved(*desktop.MouseEvent) {
}
// MouseOut catches mouse-out events not handled by the containers 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 containers content.
// It performs the overlay containers 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() {
}