diff options
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/mobile.rs | 6 | ||||
| -rw-r--r-- | src/ui/panes.rs | 76 | ||||
| -rw-r--r-- | src/ui/sidebar.rs | 4 | ||||
| -rw-r--r-- | src/ui/tabs.rs | 8 |
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 { |
