github.com/jmigpin/editor@v1.6.0/ui/mainmenu.go (about)

     1  package ui
     2  
     3  import (
     4  	"github.com/jmigpin/editor/util/drawutil/drawer4"
     5  	"github.com/jmigpin/editor/util/uiutil/widget"
     6  )
     7  
     8  type MainMenuButton struct {
     9  	*widget.FloatBoxButton
    10  	sa      *widget.ScrollArea
    11  	Toolbar *Toolbar
    12  }
    13  
    14  func NewMainMenuButton(root *Root) *MainMenuButton {
    15  	mmb := &MainMenuButton{}
    16  
    17  	content := &widget.ENode{}
    18  
    19  	mmb.FloatBoxButton = widget.NewFloatBoxButton(root.UI, root.MultiLayer, root.MenuLayer, content)
    20  	mmb.FloatBoxButton.Label.Text.SetStr(string(rune(8801))) // 3 lines rune
    21  	mmb.FloatBoxButton.Label.Pad.Left = 5
    22  	mmb.FloatBoxButton.Label.Pad.Right = 5
    23  
    24  	// theme
    25  	mmb.SetThemePaletteNamePrefix("mm_")
    26  	content.SetThemePaletteNamePrefix("mm_content_")
    27  
    28  	// float content
    29  	mmb.Toolbar = NewToolbar(root.UI)
    30  	if d, ok := mmb.Toolbar.Drawer.(*drawer4.Drawer); ok {
    31  		d.Opt.EarlyExitMeasure = false // full measure to avoid flicker (want the menu size stable)
    32  	}
    33  	mmb.sa = widget.NewScrollArea(root.UI, mmb.Toolbar, false, true)
    34  	mmb.sa.LeftScroll = ScrollBarLeft
    35  	border := widget.NewBorder(root.UI, mmb.sa)
    36  	border.SetAll(1)
    37  	n1 := WrapInBottomShadowOrNone(root.UI, border)
    38  	content.Append(n1)
    39  
    40  	return mmb
    41  }