Fix info pane height stability
This commit is contained in:
parent
941708970b
commit
1d5704d5b3
1 changed files with 23 additions and 13 deletions
|
|
@ -906,10 +906,12 @@ func (m *Model) resizePreview() {
|
||||||
_, previewWidth, _ := m.layoutWidths()
|
_, previewWidth, _ := m.layoutWidths()
|
||||||
metaHeight := 0
|
metaHeight := 0
|
||||||
if m.cfg.Preview.ShowMetadata {
|
if m.cfg.Preview.ShowMetadata {
|
||||||
metaHeight = 6
|
metaHeight = 7
|
||||||
}
|
}
|
||||||
m.previewModel.Width = max(previewWidth-4, 10)
|
innerWidth := max(previewWidth-2, 1)
|
||||||
m.previewModel.Height = max(m.bodyHeight()-metaHeight-4, 3)
|
innerHeight := max(m.bodyHeight()-2, 1)
|
||||||
|
m.previewModel.Width = max(innerWidth-2, 10)
|
||||||
|
m.previewModel.Height = max(innerHeight-metaHeight-3, 3)
|
||||||
}
|
}
|
||||||
|
|
||||||
func renderPreviewPane(preview vfs.Preview, viewportModel *viewport.Model, cfg config.Config, palette theme.Palette, width int, height int) string {
|
func renderPreviewPane(preview vfs.Preview, viewportModel *viewport.Model, cfg config.Config, palette theme.Palette, width int, height int) string {
|
||||||
|
|
@ -933,10 +935,16 @@ func renderPreviewPane(preview vfs.Preview, viewportModel *viewport.Model, cfg c
|
||||||
Render("PREVIEW " + previewIcon(preview) + " " + preview.Title)
|
Render("PREVIEW " + previewIcon(preview) + " " + preview.Title)
|
||||||
|
|
||||||
parts := []string{title}
|
parts := []string{title}
|
||||||
|
usedHeight := lipgloss.Height(title)
|
||||||
if cfg.Preview.ShowMetadata {
|
if cfg.Preview.ShowMetadata {
|
||||||
parts = append(parts, renderMetadata(preview.Metadata, palette, innerWidth))
|
metaView := renderMetadata(preview.Metadata, palette, innerWidth)
|
||||||
|
parts = append(parts, metaView)
|
||||||
|
usedHeight += lipgloss.Height(metaView)
|
||||||
}
|
}
|
||||||
parts = append(parts, renderPreviewContent(viewportModel, palette, innerWidth))
|
contentHeight := max(innerHeight-usedHeight, 3)
|
||||||
|
viewportModel.Width = max(innerWidth-2, 10)
|
||||||
|
viewportModel.Height = max(contentHeight-3, 1)
|
||||||
|
parts = append(parts, renderPreviewContent(viewportModel, palette, innerWidth, contentHeight))
|
||||||
|
|
||||||
return box.Render(lipgloss.JoinVertical(lipgloss.Left, parts...))
|
return box.Render(lipgloss.JoinVertical(lipgloss.Left, parts...))
|
||||||
}
|
}
|
||||||
|
|
@ -1046,7 +1054,7 @@ func renderStatus(m Model) string {
|
||||||
|
|
||||||
func renderFooter(m Model) string {
|
func renderFooter(m Model) string {
|
||||||
helpModel := m.helpModel
|
helpModel := m.helpModel
|
||||||
helpModel.Width = max(m.width-28, 20)
|
helpModel.Width = max(m.width-4, 20)
|
||||||
helpView := helpModel.View(m.keys)
|
helpView := helpModel.View(m.keys)
|
||||||
modeLabel := ""
|
modeLabel := ""
|
||||||
if m.selectMode {
|
if m.selectMode {
|
||||||
|
|
@ -1055,14 +1063,11 @@ func renderFooter(m Model) string {
|
||||||
Bold(true).
|
Bold(true).
|
||||||
Render(" SELECT TEXT MODE")
|
Render(" SELECT TEXT MODE")
|
||||||
}
|
}
|
||||||
legend := lipgloss.NewStyle().
|
|
||||||
Foreground(m.palette.Muted).
|
|
||||||
Render(" dir text config exec image bin")
|
|
||||||
return lipgloss.NewStyle().
|
return lipgloss.NewStyle().
|
||||||
Width(m.width).
|
Width(m.width).
|
||||||
Padding(0, 1).
|
Padding(0, 1).
|
||||||
Background(m.palette.Panel).
|
Background(m.palette.Panel).
|
||||||
Render(lipgloss.JoinHorizontal(lipgloss.Top, helpView, modeLabel, " ", legend))
|
Render(lipgloss.JoinHorizontal(lipgloss.Top, helpView, modeLabel))
|
||||||
}
|
}
|
||||||
|
|
||||||
func renderModal(modal modalState, palette theme.Palette, width int) string {
|
func renderModal(modal modalState, palette theme.Palette, width int) string {
|
||||||
|
|
@ -1097,7 +1102,9 @@ func overlayCenter(base string, overlay string, width int) string {
|
||||||
return base + "\n" + centered
|
return base + "\n" + centered
|
||||||
}
|
}
|
||||||
|
|
||||||
func renderPreviewContent(viewportModel *viewport.Model, palette theme.Palette, width int) string {
|
func renderPreviewContent(viewportModel *viewport.Model, palette theme.Palette, width int, height int) string {
|
||||||
|
innerHeight := max(height-1, 1)
|
||||||
|
|
||||||
header := lipgloss.NewStyle().
|
header := lipgloss.NewStyle().
|
||||||
Width(width).
|
Width(width).
|
||||||
Padding(0, 1).
|
Padding(0, 1).
|
||||||
|
|
@ -1108,12 +1115,14 @@ func renderPreviewContent(viewportModel *viewport.Model, palette theme.Palette,
|
||||||
|
|
||||||
body := lipgloss.NewStyle().
|
body := lipgloss.NewStyle().
|
||||||
Width(width).
|
Width(width).
|
||||||
|
Height(max(innerHeight-lipgloss.Height(header), 1)).
|
||||||
Padding(0, 1).
|
Padding(0, 1).
|
||||||
Background(palette.Panel).
|
Background(palette.Panel).
|
||||||
Render(viewportModel.View())
|
Render(viewportModel.View())
|
||||||
|
|
||||||
return lipgloss.NewStyle().
|
return lipgloss.NewStyle().
|
||||||
Width(width).
|
Width(width).
|
||||||
|
Height(innerHeight).
|
||||||
BorderStyle(lipgloss.NormalBorder()).
|
BorderStyle(lipgloss.NormalBorder()).
|
||||||
BorderTop(true).
|
BorderTop(true).
|
||||||
BorderForeground(palette.Border).
|
BorderForeground(palette.Border).
|
||||||
|
|
@ -1380,10 +1389,11 @@ func (m *Model) mouseTarget(x, y int) (PaneID, int, bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func paneIndexFromMouse(localY int, height int, pane *BrowserPane) (int, bool) {
|
func paneIndexFromMouse(localY int, height int, pane *BrowserPane) (int, bool) {
|
||||||
if localY < 1 || localY >= height-1 {
|
const listStartY = 3
|
||||||
|
if localY < listStartY || localY >= height-1 {
|
||||||
return 0, false
|
return 0, false
|
||||||
}
|
}
|
||||||
row := localY - 1
|
row := localY - listStartY
|
||||||
index := pane.Offset + row
|
index := pane.Offset + row
|
||||||
if index < 0 {
|
if index < 0 {
|
||||||
index = 0
|
index = 0
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue