diff --git a/src/main.rs b/src/main.rs index 1d63685..58526be 100644 --- a/src/main.rs +++ b/src/main.rs @@ -466,38 +466,24 @@ fn draw_command_bar(f: &mut Frame, area: Rect, app: &App) { ); } -fn center_rect(area: Rect, width: u16, height: u16) -> Rect { - let w = width.min(area.width); - let h = height.min(area.height); - let x = area.x + area.width.saturating_sub(w) / 2; - let y = area.y + area.height.saturating_sub(h) / 2; - Rect::new(x, y, w, h) -} - -fn draw_popup_frame( - f: &mut Frame, - popup: Rect, - title: &str, - border_color: Color, -) -> Rect { - f.render_widget(Clear, popup); - let block = Block::default() - .borders(Borders::ALL) - .border_style(Style::default().fg(border_color)) - .title(title); - let inner = block.inner(popup); - f.render_widget(block, popup); - inner -} - fn draw_export_prompt(f: &mut Frame, area: Rect, app: &App) { let buf = if let AppMode::ExportPrompt { buffer } = &app.mode { buffer.as_str() } else { "" }; - let popup = center_rect(area, 64, 3); - let inner = draw_popup_frame(f, popup, " Export CSV — path (Esc cancel) ", Color::Yellow); + let popup_w = 64u16.min(area.width); + let x = area.x + area.width.saturating_sub(popup_w) / 2; + let y = area.y + area.height / 2; + let popup_area = Rect::new(x, y, popup_w, 3); + + f.render_widget(Clear, popup_area); + let block = Block::default() + .borders(Borders::ALL) + .border_style(Style::default().fg(Color::Yellow)) + .title(" Export CSV — path (Esc cancel) "); + let inner = block.inner(popup_area); + f.render_widget(block, popup_area); f.render_widget( Paragraph::new(format!("{buf}▌")).style(Style::default().fg(Color::Green)), inner, @@ -505,8 +491,20 @@ fn draw_export_prompt(f: &mut Frame, area: Rect, app: &App) { } fn draw_welcome(f: &mut Frame, area: Rect, _app: &App) { - let popup = center_rect(area, 58, 20); - let inner = draw_popup_frame(f, popup, " Welcome to improvise ", Color::Blue); + let w = 58u16.min(area.width.saturating_sub(4)); + let h = 20u16.min(area.height.saturating_sub(2)); + let x = area.x + area.width.saturating_sub(w) / 2; + let y = area.y + area.height.saturating_sub(h) / 2; + let popup = Rect::new(x, y, w, h); + + f.render_widget(Clear, popup); + + let block = Block::default() + .borders(Borders::ALL) + .border_style(Style::default().fg(Color::Blue)) + .title(" Welcome to improvise "); + let inner = block.inner(popup); + f.render_widget(block, popup); let lines: &[(&str, Style)] = &[ (