adam-gui/vendor/fyne.io/fyne/v2/internal/widget/shadowing_renderer.go
2024-04-29 19:13:50 +02:00

50 lines
1.3 KiB
Go

package widget
import (
"fyne.io/fyne/v2"
)
// ShadowingRenderer is a renderer that adds a shadow arount the rendered content.
// When using the ShadowingRenderer the embedding renderer should call
// LayoutShadow(contentSize, contentPos) to lay out the shadow.
type ShadowingRenderer struct {
BaseRenderer
shadow fyne.CanvasObject
}
// NewShadowingRenderer creates a ShadowingRenderer.
func NewShadowingRenderer(objects []fyne.CanvasObject, level ElevationLevel) *ShadowingRenderer {
var s fyne.CanvasObject
if level > 0 {
s = NewShadow(ShadowAround, level)
}
r := &ShadowingRenderer{shadow: s}
r.SetObjects(objects)
return r
}
// LayoutShadow adjusts the size and position of the shadow if necessary.
func (r *ShadowingRenderer) LayoutShadow(size fyne.Size, pos fyne.Position) {
if r.shadow == nil {
return
}
r.shadow.Resize(size)
r.shadow.Move(pos)
}
// SetObjects updates the renderer's objects including the shadow if necessary.
func (r *ShadowingRenderer) SetObjects(objects []fyne.CanvasObject) {
if r.shadow != nil && len(objects) > 0 && r.shadow != objects[0] {
objects = append([]fyne.CanvasObject{r.shadow}, objects...)
}
r.BaseRenderer.SetObjects(objects)
}
// RefreshShadow asks the shadow graphical element to update to current theme
func (r *ShadowingRenderer) RefreshShadow() {
if r.shadow == nil {
return
}
r.shadow.Refresh()
}