menubutton.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package mobile
  2. import (
  3. "fyne.io/fyne/v2"
  4. "fyne.io/fyne/v2/canvas"
  5. "fyne.io/fyne/v2/theme"
  6. "fyne.io/fyne/v2/widget"
  7. )
  8. type menuButton struct {
  9. widget.BaseWidget
  10. win *window
  11. menu *fyne.MainMenu
  12. }
  13. func (w *window) newMenuButton(menu *fyne.MainMenu) *menuButton {
  14. b := &menuButton{win: w, menu: menu}
  15. b.ExtendBaseWidget(b)
  16. return b
  17. }
  18. func (m *menuButton) CreateRenderer() fyne.WidgetRenderer {
  19. return &menuButtonRenderer{btn: widget.NewButtonWithIcon("", theme.MenuIcon(), func() {
  20. m.win.canvas.showMenu(m.menu)
  21. }), bg: canvas.NewRectangle(theme.BackgroundColor())}
  22. }
  23. type menuButtonRenderer struct {
  24. btn *widget.Button
  25. bg *canvas.Rectangle
  26. }
  27. func (m *menuButtonRenderer) Destroy() {
  28. }
  29. func (m *menuButtonRenderer) Layout(size fyne.Size) {
  30. m.bg.Move(fyne.NewPos(theme.Padding()/2, theme.Padding()/2))
  31. m.bg.Resize(size.Subtract(fyne.NewSize(theme.Padding(), theme.Padding())))
  32. m.btn.Resize(size)
  33. }
  34. func (m *menuButtonRenderer) MinSize() fyne.Size {
  35. return m.btn.MinSize()
  36. }
  37. func (m *menuButtonRenderer) Objects() []fyne.CanvasObject {
  38. return []fyne.CanvasObject{m.bg, m.btn}
  39. }
  40. func (m *menuButtonRenderer) Refresh() {
  41. m.bg.FillColor = theme.BackgroundColor()
  42. }