aboutsummaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/mobile.rs6
-rw-r--r--src/ui/panes.rs76
-rw-r--r--src/ui/sidebar.rs4
-rw-r--r--src/ui/tabs.rs8
4 files changed, 45 insertions, 49 deletions
diff --git a/src/ui/mobile.rs b/src/ui/mobile.rs
index 50cbed0c..41f29f89 100644
--- a/src/ui/mobile.rs
+++ b/src/ui/mobile.rs
@@ -745,11 +745,7 @@ fn render_left_scrollbar(
.max(1)
.min(track.height as usize) as u16;
let travel = track.height.saturating_sub(thumb_len);
- let thumb_top = if max_scroll == 0 {
- track.y
- } else {
- track.y + ((travel as usize * scroll.min(max_scroll)) / max_scroll) as u16
- };
+ let thumb_top = track.y + ((travel as usize * scroll.min(max_scroll)) / max_scroll) as u16;
for y in track.y..track.y + track.height {
let is_thumb = y >= thumb_top && y < thumb_top + thumb_len;
diff --git a/src/ui/panes.rs b/src/ui/panes.rs
index 82be8bf1..c4ba0c54 100644
--- a/src/ui/panes.rs
+++ b/src/ui/panes.rs
@@ -219,6 +219,44 @@ fn render_selection_highlight(
}
}
+fn render_empty(app: &AppState, frame: &mut Frame, area: Rect) {
+ let p = &app.palette;
+ let lines = vec![
+ Line::from(""),
+ Line::from(""),
+ Line::from(Span::styled(
+ " No workspaces yet",
+ Style::default().fg(p.overlay0),
+ )),
+ Line::from(""),
+ Line::from(Span::styled(
+ " A workspace is one project context.",
+ Style::default().fg(p.overlay1),
+ )),
+ Line::from(Span::styled(
+ " Its root pane (top-left) sets the default repo or folder name.",
+ Style::default().fg(p.overlay1),
+ )),
+ Line::from(""),
+ Line::from(vec![
+ Span::styled(" Press ", Style::default().fg(p.overlay0)),
+ Span::styled(
+ app.keybinds.new_workspace_label.to_string(),
+ Style::default().fg(p.accent).add_modifier(Modifier::BOLD),
+ ),
+ Span::styled(" to create one", Style::default().fg(p.overlay0)),
+ ]),
+ ];
+ frame.render_widget(
+ Paragraph::new(lines).block(
+ Block::default()
+ .borders(Borders::ALL)
+ .border_style(Style::default().fg(p.surface_dim)),
+ ),
+ area,
+ );
+}
+
#[cfg(test)]
mod tests {
use super::*;
@@ -315,41 +353,3 @@ mod tests {
assert_eq!(info.inner_rect, Rect::new(10, 3, 39, 8));
}
}
-
-fn render_empty(app: &AppState, frame: &mut Frame, area: Rect) {
- let p = &app.palette;
- let lines = vec![
- Line::from(""),
- Line::from(""),
- Line::from(Span::styled(
- " No workspaces yet",
- Style::default().fg(p.overlay0),
- )),
- Line::from(""),
- Line::from(Span::styled(
- " A workspace is one project context.",
- Style::default().fg(p.overlay1),
- )),
- Line::from(Span::styled(
- " Its root pane (top-left) sets the default repo or folder name.",
- Style::default().fg(p.overlay1),
- )),
- Line::from(""),
- Line::from(vec![
- Span::styled(" Press ", Style::default().fg(p.overlay0)),
- Span::styled(
- format!("{}", app.keybinds.new_workspace_label),
- Style::default().fg(p.accent).add_modifier(Modifier::BOLD),
- ),
- Span::styled(" to create one", Style::default().fg(p.overlay0)),
- ]),
- ];
- frame.render_widget(
- Paragraph::new(lines).block(
- Block::default()
- .borders(Borders::ALL)
- .border_style(Style::default().fg(p.surface_dim)),
- ),
- area,
- );
-}
diff --git a/src/ui/sidebar.rs b/src/ui/sidebar.rs
index 04a3acd9..83ceebe0 100644
--- a/src/ui/sidebar.rs
+++ b/src/ui/sidebar.rs
@@ -32,7 +32,7 @@ fn sidebar_section_heights(total_h: u16, split_ratio: f32) -> (u16, u16) {
}
if total_h < 6 {
- let ws_h = (total_h + 1) / 2;
+ let ws_h = total_h.div_ceil(2);
return (ws_h, total_h.saturating_sub(ws_h));
}
@@ -385,7 +385,7 @@ pub(crate) fn collapsed_sidebar_sections(area: Rect) -> (Rect, Option<u16>, Rect
}
let total_h = content.height as usize;
- let ws_h = (total_h + 1) / 2;
+ let ws_h = total_h.div_ceil(2);
let detail_h = total_h.saturating_sub(ws_h + 1);
if ws_h == 0 || detail_h == 0 {
return (content, None, Rect::default());
diff --git a/src/ui/tabs.rs b/src/ui/tabs.rs
index 400ee65f..a6ce0e68 100644
--- a/src/ui/tabs.rs
+++ b/src/ui/tabs.rs
@@ -33,14 +33,14 @@ fn layout_tab_hit_areas(ws: &crate::workspace::Workspace, area: Rect, scroll: us
let mut x = area.x;
let right = area.x + area.width;
- for idx in scroll..ws.tabs.len() {
+ for (idx, rect) in rects.iter_mut().enumerate().skip(scroll) {
if x >= right {
break;
}
let desired = tab_width(&ws.tabs[idx]);
let remaining = right.saturating_sub(x);
let width = desired.min(remaining).max(1);
- rects[idx] = Rect::new(x, area.y, width, 1);
+ *rect = Rect::new(x, area.y, width, 1);
x = x.saturating_add(width + 1);
}
rects
@@ -178,14 +178,14 @@ fn tab_drop_indicator_x(
ws: &crate::workspace::Workspace,
insert_idx: usize,
) -> Option<u16> {
- let visible_tabs = app
+ let mut visible_tabs = app
.view
.tab_hit_areas
.iter()
.enumerate()
.filter(|(_, rect)| rect.width > 0);
let first_visible = visible_tabs.clone().next()?;
- let last_visible = visible_tabs.last().unwrap_or(first_visible);
+ let last_visible = visible_tabs.next_back().unwrap_or(first_visible);
if insert_idx == 0 {
return Some(if first_visible.0 == 0 {