Add callbacks for resize and move

This commit is contained in:
Maarten Heremans
2024-06-14 14:15:47 +02:00
parent 36d12fd547
commit bfd94a9e26
4 changed files with 57 additions and 2 deletions

View File

@@ -57,8 +57,12 @@ type ScreenHandler interface {
}
type Screen struct {
fyne.CanvasObject
rootElement *Element
screenHandler ScreenHandler
resizeCallbacks []func(fyne.Size)
moveCallbacks []func(fyne.Position)
}
func New(
@@ -107,13 +111,44 @@ func NewTemplate(
}
func (s *Screen) Initialize() (obj fyne.CanvasObject, err error) {
if obj, err = s.rootElement.BuildUI(s.screenHandler); err != nil {
if s.CanvasObject, err = s.rootElement.BuildUI(s.screenHandler); err != nil {
err = fmt.Errorf("failed to build screen: %w", err)
return
}
obj = s
return
}
func (s *Screen) Move(p fyne.Position) {
s.CanvasObject.Move(p)
for _, cb := range s.moveCallbacks {
cb(p)
}
}
func (s *Screen) Resize(sz fyne.Size) {
s.CanvasObject.Resize(sz)
for _, cb := range s.resizeCallbacks {
cb(sz)
}
}
func (s *Screen) CreateRenderer() fyne.WidgetRenderer {
return widget.NewSimpleRenderer(s.CanvasObject)
}
func (s *Screen) RegisterResizeCallback(cb func(fyne.Size)) {
s.resizeCallbacks = append(s.resizeCallbacks, cb)
}
func (s *Screen) RegisterMoveCallback(cb func(fyne.Position)) {
s.moveCallbacks = append(s.moveCallbacks, cb)
}
func (s *Screen) AsContainer() *fyne.Container {
return s.CanvasObject.(*fyne.Container)
}
type TemplateScreenHandler struct {
localizer *i18n.Localizer
elementsMap map[string]*UIElement