Some tweaks to pop-up UIs

This commit is contained in:
2026-02-18 05:26:52 +00:00
parent d0605f8426
commit 4e39e99732
2 changed files with 148 additions and 33 deletions

View File

@@ -807,7 +807,7 @@ fn handle_skill_tree_key(app: &mut App, key: KeyEvent) {
fn skill_tree_detail_max_scroll(app: &App) -> usize {
let (w, h) = crossterm::terminal::size().unwrap_or((120, 40));
let screen = Rect::new(0, 0, w, h);
let centered = ui::layout::centered_rect(70, 90, screen);
let centered = skill_tree_popup_rect(screen);
let inner = Rect::new(
centered.x.saturating_add(1),
centered.y.saturating_add(1),
@@ -837,6 +837,12 @@ fn skill_tree_detail_max_scroll(app: &App) -> usize {
total_lines.saturating_sub(detail_height)
}
fn skill_tree_popup_rect(area: Rect) -> Rect {
let percent_x = if area.width < 120 { 95 } else { 85 };
let percent_y = if area.height < 40 { 95 } else { 90 };
ui::layout::centered_rect(percent_x, percent_y, area)
}
fn render(frame: &mut ratatui::Frame, app: &App) {
let area = frame.area();
let colors = &app.theme.colors;
@@ -1446,7 +1452,7 @@ fn render_code_language_select(frame: &mut ratatui::Frame, app: &App) {
String::new()
};
let style = if is_disabled {
let name_style = if is_disabled {
Style::default().fg(colors.text_pending())
} else if is_selected {
Style::default()
@@ -1455,11 +1461,18 @@ fn render_code_language_select(frame: &mut ratatui::Frame, app: &App) {
} else {
Style::default().fg(colors.fg())
};
let status_style = Style::default()
.fg(colors.text_pending())
.add_modifier(Modifier::DIM);
lines.push(Line::from(Span::styled(
format!("{indicator}{display}{current_marker}{availability}"),
style,
)));
let mut spans = vec![Span::styled(
format!("{indicator}{display}{current_marker}"),
name_style,
)];
if !availability.is_empty() {
spans.push(Span::styled(availability, status_style));
}
lines.push(Line::from(spans));
}
// Show scroll indicator at bottom if more items below
@@ -1550,7 +1563,7 @@ fn render_passage_book_select(frame: &mut ratatui::Frame, app: &App) {
} else {
" (download required)".to_string()
};
let style = if is_disabled {
let name_style = if is_disabled {
Style::default().fg(colors.text_pending())
} else if is_selected {
Style::default()
@@ -1559,10 +1572,17 @@ fn render_passage_book_select(frame: &mut ratatui::Frame, app: &App) {
} else {
Style::default().fg(colors.fg())
};
lines.push(Line::from(Span::styled(
format!("{indicator}[{}] {label}{availability}", i + 1),
style,
)));
let status_style = Style::default()
.fg(colors.text_pending())
.add_modifier(Modifier::DIM);
let mut spans = vec![Span::styled(
format!("{indicator}[{}] {label}", i + 1),
name_style,
)];
if !availability.is_empty() {
spans.push(Span::styled(availability, status_style));
}
lines.push(Line::from(spans));
}
Paragraph::new(lines).render(list_area, frame.buffer_mut());
@@ -2039,7 +2059,7 @@ fn render_code_download_progress(frame: &mut ratatui::Frame, app: &App) {
fn render_skill_tree(frame: &mut ratatui::Frame, app: &App) {
let area = frame.area();
let centered = ui::layout::centered_rect(70, 90, area);
let centered = skill_tree_popup_rect(area);
let widget = SkillTreeWidget::new(
&app.skill_tree,
&app.key_stats,