package ui type Widget struct { Locator string Children []*Widget ownClickables []clickable ownFreezables []freezable ownHoverables []hoverable ownMouseables []mouseable ownPaintables []paintable ownValueables []valueable } func (w *Widget) clickables() []clickable { out := w.ownClickables for _, widget := range w.Children { out = append(out, widget.clickables()...) } return out } func (w *Widget) freezables() []freezable { out := w.ownFreezables for _, widget := range w.Children { out = append(out, widget.freezables()...) } return out } func (w *Widget) hoverables() []hoverable { out := w.ownHoverables for _, widget := range w.Children { out = append(out, widget.hoverables()...) } return out } func (w *Widget) mouseables() []mouseable { out := w.ownMouseables for _, widget := range w.Children { out = append(out, widget.mouseables()...) } return out } func (w *Widget) paintables() []paintable { out := w.ownPaintables for _, widget := range w.Children { out = append(out, widget.paintables()...) } return out } func (w *Widget) valueables() []valueable { out := w.ownValueables for _, widget := range w.Children { out = append(out, widget.valueables()...) } return out }