aboutsummaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/panes.rs56
1 files changed, 44 insertions, 12 deletions
diff --git a/src/ui/panes.rs b/src/ui/panes.rs
index fbd7b8eb..ab3e352a 100644
--- a/src/ui/panes.rs
+++ b/src/ui/panes.rs
@@ -91,11 +91,12 @@ fn shrink_for_one_cell_gap(size: u16) -> u16 {
pub(crate) fn apply_pane_chrome(
panes: Vec<PaneInfo>,
- pane_borders: bool,
+ pane_borders: crate::config::PaneBordersConfig,
pane_gaps: bool,
pane_outer_borders: bool,
) -> Vec<PaneInfo> {
let multi_pane = panes.len() > 1;
+ let bordered = pane_borders.shows_borders(multi_pane);
let outer_left = panes.iter().map(|info| info.rect.x).min().unwrap_or(0);
let outer_top = panes.iter().map(|info| info.rect.y).min().unwrap_or(0);
let outer_right = panes
@@ -115,7 +116,7 @@ pub(crate) fn apply_pane_chrome(
let right_neighbor = multi_pane.then(|| pane_to_right(&info, &panes)).flatten();
let below_neighbor = multi_pane.then(|| pane_below(&info, &panes)).flatten();
- if multi_pane && pane_gaps && !pane_borders {
+ if multi_pane && pane_gaps && !pane_borders.draws_borders() {
if right_neighbor.is_some() {
info.rect.width = shrink_for_one_cell_gap(info.rect.width);
}
@@ -124,7 +125,7 @@ pub(crate) fn apply_pane_chrome(
}
}
- info.borders = if !multi_pane || !pane_borders {
+ info.borders = if !bordered {
Borders::NONE
} else {
let mut borders = Borders::ALL;
@@ -219,7 +220,7 @@ pub(super) fn resize_tab_panes(
if let Some((terminal_id, rt)) =
runtime_for_tab_pane(app, terminal_runtimes, workspace_index, tab, focused_id)
{
- let borders = if multi_pane && app.pane_borders && app.pane_outer_borders {
+ let borders = if app.pane_borders.shows_borders(multi_pane) && app.pane_outer_borders {
Borders::ALL
} else {
Borders::NONE
@@ -284,7 +285,7 @@ pub(super) fn compute_pane_infos_for_tab(
if tab.zoomed {
let focused_id = tab.layout.focused();
- let borders = if multi_pane && app.pane_borders && app.pane_outer_borders {
+ let borders = if app.pane_borders.shows_borders(multi_pane) && app.pane_outer_borders {
Borders::ALL
} else {
Borders::NONE
@@ -457,7 +458,7 @@ fn render_pane_borders(
split_borders: &[crate::layout::SplitBorder],
frame: &mut Frame,
) {
- if !app.pane_borders || pane_infos.iter().all(|info| info.borders.is_empty()) {
+ if !app.pane_borders.draws_borders() || pane_infos.iter().all(|info| info.borders.is_empty()) {
return;
}
@@ -830,6 +831,7 @@ fn color_to_rgb(color: Color) -> Option<Rgb> {
#[cfg(test)]
mod tests {
use super::*;
+ use crate::config::PaneBordersConfig;
use crate::layout::PaneId;
use crate::selection::Selection;
use crate::terminal::TerminalRuntime;
@@ -916,7 +918,7 @@ mod tests {
let infos = apply_pane_chrome(
workspace.tabs[0].layout.panes(Rect::new(0, 0, 100, 20)),
- true,
+ PaneBordersConfig::Auto,
false,
true,
);
@@ -937,7 +939,7 @@ mod tests {
let infos = apply_pane_chrome(
workspace.tabs[0].layout.panes(Rect::new(0, 0, 100, 20)),
- true,
+ PaneBordersConfig::Auto,
false,
true,
);
@@ -958,7 +960,7 @@ mod tests {
let infos = apply_pane_chrome(
workspace.tabs[0].layout.panes(Rect::new(0, 0, 100, 20)),
- true,
+ PaneBordersConfig::Auto,
false,
false,
);
@@ -978,7 +980,7 @@ mod tests {
let infos = apply_pane_chrome(
workspace.tabs[0].layout.panes(Rect::new(0, 0, 100, 20)),
- true,
+ PaneBordersConfig::Auto,
true,
true,
);
@@ -999,7 +1001,7 @@ mod tests {
let infos = apply_pane_chrome(
workspace.tabs[0].layout.panes(Rect::new(0, 0, 100, 20)),
- false,
+ PaneBordersConfig::Off,
true,
true,
);
@@ -1019,7 +1021,7 @@ mod tests {
let infos = apply_pane_chrome(
workspace.tabs[0].layout.panes(Rect::new(0, 0, 100, 20)),
- false,
+ PaneBordersConfig::Off,
false,
true,
);
@@ -1031,6 +1033,36 @@ mod tests {
}
#[test]
+ fn always_pane_borders_frame_lone_pane() {
+ let workspace = Workspace::test_new("test");
+ let area = Rect::new(0, 0, 100, 20);
+
+ let default_infos = apply_pane_chrome(
+ workspace.tabs[0].layout.panes(area),
+ PaneBordersConfig::Auto,
+ false,
+ true,
+ );
+ assert_eq!(default_infos[0].borders, Borders::NONE);
+
+ let framed_infos = apply_pane_chrome(
+ workspace.tabs[0].layout.panes(area),
+ PaneBordersConfig::Always,
+ false,
+ true,
+ );
+ assert_eq!(framed_infos[0].borders, Borders::ALL);
+
+ let no_outer_infos = apply_pane_chrome(
+ workspace.tabs[0].layout.panes(area),
+ PaneBordersConfig::Always,
+ false,
+ false,
+ );
+ assert_eq!(no_outer_infos[0].borders, Borders::NONE);
+ }
+
+ #[test]
fn global_pane_border_renderer_composes_junctions_and_focus_style() {
let mut app = AppState::test_new();
app.view.terminal_area = Rect::new(0, 0, 4, 4);