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