package header import ( "image/color" "image" "gioui.org/layout" "gioui.org/unit" "gioui.org/widget" "gioui.org/widget/material" headerlayout "git.julianfamily.org/keepassgo/internal/appui/header/layout" ) func MainMenu(gtx layout.Context, theme *material.Theme, rows []layout.Widget, card func(layout.Context, layout.Widget) layout.Dimensions, logger func(name string, constraints layout.Constraints, dims layout.Dimensions)) layout.Dimensions { rowWidth := headerlayout.MenuActionWidth(gtx, rows) if logger != nil { logger("row-width", gtx.Constraints, layout.Dimensions{Size: image.Pt(rowWidth, 0)}) } dims := headerlayout.IntrinsicCompactCard(gtx, func(gtx layout.Context) layout.Dimensions { children := make([]layout.FlexChild, 0, (len(rows)*2)-1) for i, row := range rows { if i > 0 { children = append(children, layout.Rigid(layout.Spacer{Height: unit.Dp(6)}.Layout)) } current := row children = append(children, layout.Rigid(func(gtx layout.Context) layout.Dimensions { return headerlayout.RightAlignedAction(gtx, rowWidth, current) })) } dims := layout.Flex{Axis: layout.Vertical}.Layout(gtx, children...) if logger != nil { logger("rows", gtx.Constraints, dims) } return dims }, card, logger) if logger != nil { logger("card", gtx.Constraints, dims) } return dims } func MainMenuButtonGroup(gtx layout.Context, theme *material.Theme, click *widget.Clickable, icon *widget.Icon, open bool, selectedColor, accentColor color.NRGBA) layout.Dimensions { btn := material.IconButton(theme, click, icon, "Menu") if open { btn.Background = accentColor btn.Color = color.NRGBA{R: 255, G: 252, B: 247, A: 255} } else { btn.Background = selectedColor btn.Color = accentColor } btn.Size = unit.Dp(18) btn.Inset = layout.UniformInset(unit.Dp(8)) return btn.Layout(gtx) }