Fix desktop header menu layout
This commit is contained in:
@@ -2024,6 +2024,7 @@ func (u *ui) detailPanel(gtx layout.Context) layout.Dimensions {
|
|||||||
if u.shouldShowDesktopWorkingHeader() {
|
if u.shouldShowDesktopWorkingHeader() {
|
||||||
return layout.Flex{Axis: layout.Vertical}.Layout(gtx,
|
return layout.Flex{Axis: layout.Vertical}.Layout(gtx,
|
||||||
layout.Rigid(u.headerActions),
|
layout.Rigid(u.headerActions),
|
||||||
|
layout.Rigid(u.desktopHeaderMenus),
|
||||||
layout.Rigid(layout.Spacer{Height: unit.Dp(12)}.Layout),
|
layout.Rigid(layout.Spacer{Height: unit.Dp(12)}.Layout),
|
||||||
layout.Flexed(1, func(gtx layout.Context) layout.Dimensions {
|
layout.Flexed(1, func(gtx layout.Context) layout.Dimensions {
|
||||||
return u.detailPanelContent(gtx)
|
return u.detailPanelContent(gtx)
|
||||||
|
|||||||
@@ -1312,6 +1312,9 @@ func (u *ui) primaryContent(gtx layout.Context) layout.Dimensions {
|
|||||||
case u.shouldUseLockedSinglePane():
|
case u.shouldUseLockedSinglePane():
|
||||||
return u.detailPanel(gtx)
|
return u.detailPanel(gtx)
|
||||||
case !u.shouldShowDetailPane():
|
case !u.shouldShowDetailPane():
|
||||||
|
if !u.usesCompactViewport() {
|
||||||
|
return u.desktopListOnlyContent(gtx)
|
||||||
|
}
|
||||||
return u.listPanel(gtx)
|
return u.listPanel(gtx)
|
||||||
case u.usesCompactViewport():
|
case u.usesCompactViewport():
|
||||||
return u.compactPrimaryContent(gtx)
|
return u.compactPrimaryContent(gtx)
|
||||||
@@ -1368,6 +1371,21 @@ func (u *ui) widePrimaryContent(gtx layout.Context) layout.Dimensions {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u *ui) desktopListOnlyContent(gtx layout.Context) layout.Dimensions {
|
||||||
|
return layout.Flex{Axis: layout.Vertical}.Layout(gtx,
|
||||||
|
layout.Rigid(func(gtx layout.Context) layout.Dimensions {
|
||||||
|
return card(gtx, func(gtx layout.Context) layout.Dimensions {
|
||||||
|
return layout.Flex{Axis: layout.Vertical}.Layout(gtx,
|
||||||
|
layout.Rigid(u.headerActions),
|
||||||
|
layout.Rigid(u.desktopHeaderMenus),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
layout.Rigid(layout.Spacer{Height: unit.Dp(12)}.Layout),
|
||||||
|
layout.Flexed(1, u.listPanel),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
func (u *ui) syncDialogOverlay(gtx layout.Context) layout.Dimensions {
|
func (u *ui) syncDialogOverlay(gtx layout.Context) layout.Dimensions {
|
||||||
if !u.syncDialogOpen {
|
if !u.syncDialogOpen {
|
||||||
return layout.Dimensions{}
|
return layout.Dimensions{}
|
||||||
|
|||||||
+18
-23
@@ -49,9 +49,6 @@ func (u *ui) headerActions(gtx layout.Context) layout.Dimensions {
|
|||||||
cluster.prepareCompactMenus(gtx, u)
|
cluster.prepareCompactMenus(gtx, u)
|
||||||
return layout.Dimensions{Size: image.Pt(gtx.Constraints.Max.X, rowDims.Size.Y)}
|
return layout.Dimensions{Size: image.Pt(gtx.Constraints.Max.X, rowDims.Size.Y)}
|
||||||
}
|
}
|
||||||
|
|
||||||
cluster.drawOverlayMenus(gtx, u, headerlayout.DropdownSurface{ContainerWidth: gtx.Constraints.Max.X, LeftInset: 0, TopInset: 0})
|
|
||||||
|
|
||||||
return rowDims
|
return rowDims
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,24 +143,7 @@ func (c *headerActionCluster) prepareCompactMenus(gtx layout.Context, u *ui) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c headerActionCluster) drawOverlayMenus(gtx layout.Context, u *ui, surface headerlayout.DropdownSurface) {
|
func (c headerActionCluster) layoutMenuRow(gtx layout.Context) layout.Dimensions {
|
||||||
if c.ShowSyncMenu() {
|
|
||||||
placement, menuCall := surface.Place(gtx, c.Metrics.SyncAnchor(), c.SyncMenu)
|
|
||||||
u.maybeLogHeaderMenuPlacement("sync", surface, placement)
|
|
||||||
stack := op.Offset(placement.Origin).Push(gtx.Ops)
|
|
||||||
menuCall.Add(gtx.Ops)
|
|
||||||
stack.Pop()
|
|
||||||
}
|
|
||||||
if c.ShowMainMenu() {
|
|
||||||
placement, menuCall := surface.Place(gtx, c.Metrics.MainAnchor(), c.MainMenu)
|
|
||||||
u.maybeLogHeaderMenuPlacement("main", surface, placement)
|
|
||||||
stack := op.Offset(placement.Origin).Push(gtx.Ops)
|
|
||||||
menuCall.Add(gtx.Ops)
|
|
||||||
stack.Pop()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c headerActionCluster) layoutCompactMenuRow(gtx layout.Context) layout.Dimensions {
|
|
||||||
menu := c.activeMenu()
|
menu := c.activeMenu()
|
||||||
if menu == nil {
|
if menu == nil {
|
||||||
return layout.Dimensions{}
|
return layout.Dimensions{}
|
||||||
@@ -223,7 +203,7 @@ func (u *ui) phoneHeaderMenus(gtx layout.Context) layout.Dimensions {
|
|||||||
return layout.UniformInset(unit.Dp(16)).Layout(gtx, func(gtx layout.Context) layout.Dimensions {
|
return layout.UniformInset(unit.Dp(16)).Layout(gtx, func(gtx layout.Context) layout.Dimensions {
|
||||||
stack := op.Offset(image.Pt(0, max(0, u.phoneSyncMenuOrigin.Y-u.frameInsetPx))).Push(gtx.Ops)
|
stack := op.Offset(image.Pt(0, max(0, u.phoneSyncMenuOrigin.Y-u.frameInsetPx))).Push(gtx.Ops)
|
||||||
defer stack.Pop()
|
defer stack.Pop()
|
||||||
dims := cluster.layoutCompactMenuRow(gtx)
|
dims := cluster.layoutMenuRow(gtx)
|
||||||
return layout.Dimensions{Size: image.Pt(gtx.Constraints.Max.X, max(dims.Size.Y, u.phoneSyncMenuOrigin.Y))}
|
return layout.Dimensions{Size: image.Pt(gtx.Constraints.Max.X, max(dims.Size.Y, u.phoneSyncMenuOrigin.Y))}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -231,13 +211,28 @@ func (u *ui) phoneHeaderMenus(gtx layout.Context) layout.Dimensions {
|
|||||||
return layout.UniformInset(unit.Dp(16)).Layout(gtx, func(gtx layout.Context) layout.Dimensions {
|
return layout.UniformInset(unit.Dp(16)).Layout(gtx, func(gtx layout.Context) layout.Dimensions {
|
||||||
stack := op.Offset(image.Pt(0, max(0, u.phoneMainMenuOrigin.Y-u.frameInsetPx))).Push(gtx.Ops)
|
stack := op.Offset(image.Pt(0, max(0, u.phoneMainMenuOrigin.Y-u.frameInsetPx))).Push(gtx.Ops)
|
||||||
defer stack.Pop()
|
defer stack.Pop()
|
||||||
dims := cluster.layoutCompactMenuRow(gtx)
|
dims := cluster.layoutMenuRow(gtx)
|
||||||
return layout.Dimensions{Size: image.Pt(gtx.Constraints.Max.X, max(dims.Size.Y, u.phoneMainMenuOrigin.Y))}
|
return layout.Dimensions{Size: image.Pt(gtx.Constraints.Max.X, max(dims.Size.Y, u.phoneMainMenuOrigin.Y))}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return layout.Dimensions{}
|
return layout.Dimensions{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u *ui) desktopHeaderMenus(gtx layout.Context) layout.Dimensions {
|
||||||
|
if u.usesCompactViewport() || (!u.syncMenuOpen && !u.mainMenuOpen) {
|
||||||
|
return layout.Dimensions{}
|
||||||
|
}
|
||||||
|
cluster := u.newHeaderActionCluster(gtx)
|
||||||
|
dims := cluster.layoutMenuRow(gtx)
|
||||||
|
if dims.Size.Y == 0 {
|
||||||
|
return dims
|
||||||
|
}
|
||||||
|
return layout.Flex{Axis: layout.Vertical}.Layout(gtx,
|
||||||
|
layout.Rigid(layout.Spacer{Height: unit.Dp(6)}.Layout),
|
||||||
|
layout.Rigid(func(gtx layout.Context) layout.Dimensions { return dims }),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
func (u *ui) syncMenuVisibleOnPhone() bool {
|
func (u *ui) syncMenuVisibleOnPhone() bool {
|
||||||
return u.usesCompactViewport() && u.phoneSyncMenuVisible && u.syncMenuOpen
|
return u.usesCompactViewport() && u.phoneSyncMenuVisible && u.syncMenuOpen
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user