aboutsummaryrefslogtreecommitdiff
path: root/src/app/input.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-04-03 16:58:16 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-04-03 16:58:16 +0300
commitf159ef69ffe59fd327a4a4f3c4a53aaea567b32a (patch)
tree829168c8d518ddb908ac744227a3241ce250f0f6 /src/app/input.rs
parent282fb654649ea89cd9b22b1dcf43e435a18c7179 (diff)
refactor modal section spacing layout
Diffstat (limited to 'src/app/input.rs')
-rw-r--r--src/app/input.rs55
1 files changed, 18 insertions, 37 deletions
diff --git a/src/app/input.rs b/src/app/input.rs
index a1ad6d0c..7191a8fa 100644
--- a/src/app/input.rs
+++ b/src/app/input.rs
@@ -1234,15 +1234,7 @@ impl AppState {
if inner.height < 8 || inner.width < 4 {
return None;
}
- let rows = ratatui::layout::Layout::vertical([
- ratatui::layout::Constraint::Length(1),
- ratatui::layout::Constraint::Length(1),
- ratatui::layout::Constraint::Length(1),
- ratatui::layout::Constraint::Min(1),
- ratatui::layout::Constraint::Length(1),
- ])
- .areas::<5>(inner);
- Some(rows[3])
+ Some(crate::ui::modal_stack_areas(inner, 2, 1, 0, 1).content)
}
fn release_notes_scroll_metrics(&self) -> Option<crate::pane::ScrollMetrics> {
@@ -1334,12 +1326,10 @@ impl AppState {
let Some(inner) = self.onboarding_modal_inner(64, 16) else {
return;
};
- let button = crate::ui::onboarding_welcome_continue_rect(Rect::new(
- inner.x,
- inner.y + 10,
- inner.width,
- 1,
- ));
+ let actions = crate::ui::modal_stack_areas(inner, 2, 0, 1, 1)
+ .actions
+ .unwrap_or_default();
+ let button = crate::ui::onboarding_welcome_continue_rect(actions);
if matches!(mouse.kind, MouseEventKind::Down(MouseButton::Left))
&& modal_action_from_buttons(
mouse.column,
@@ -1354,19 +1344,16 @@ impl AppState {
let Some(inner) = self.onboarding_modal_inner(56, 14) else {
return;
};
- let options_start_y = inner.y + 5;
- if mouse.row >= options_start_y && mouse.row < options_start_y + 4 {
+ let stack = crate::ui::modal_stack_areas(inner, 3, 0, 1, 1);
+ if mouse.row >= stack.content.y && mouse.row < stack.content.y + 4 {
self.onboarding_list
- .select((mouse.row - options_start_y) as usize);
+ .select((mouse.row - stack.content.y) as usize);
return;
}
- let (back, save) = crate::ui::onboarding_notification_button_rects(Rect::new(
- inner.x,
- inner.y + 10,
- inner.width,
- 1,
- ));
+ let (back, save) = crate::ui::onboarding_notification_button_rects(
+ stack.actions.unwrap_or_default(),
+ );
if matches!(mouse.kind, MouseEventKind::Down(MouseButton::Left)) {
match modal_action_from_buttons(
mouse.column,
@@ -1466,14 +1453,7 @@ impl AppState {
if inner.height < 6 || inner.width < 4 {
return None;
}
- let rows = ratatui::layout::Layout::vertical([
- ratatui::layout::Constraint::Length(1),
- ratatui::layout::Constraint::Length(1),
- ratatui::layout::Constraint::Min(1),
- ratatui::layout::Constraint::Length(1),
- ])
- .areas::<4>(inner);
- Some(rows[2])
+ Some(crate::ui::modal_stack_areas(inner, 2, 1, 0, 1).content)
}
fn keybind_help_scroll_metrics(&self) -> Option<crate::pane::ScrollMetrics> {
@@ -1577,8 +1557,7 @@ impl AppState {
fn settings_content_rect(&self) -> Rect {
let inner = self.settings_inner_rect();
- let y = inner.y + 3;
- Rect::new(inner.x, y, inner.width, inner.y + inner.height - y)
+ crate::ui::modal_stack_areas(inner, 3, 2, 0, 1).content
}
fn settings_list_index_at(&self, col: u16, row: u16) -> Option<usize> {
@@ -2897,7 +2876,8 @@ mod tests {
app.state.onboarding_list.select(1);
let inner = app.state.onboarding_modal_inner(56, 14).unwrap();
- app.handle_mouse(mouse(MouseEventKind::Moved, inner.x + 2, inner.y + 7));
+ let content = crate::ui::modal_stack_areas(inner, 3, 0, 1, 1).content;
+ app.handle_mouse(mouse(MouseEventKind::Moved, content.x + 2, content.y));
assert_eq!(app.state.onboarding_list.selected, 1);
}
@@ -2910,10 +2890,11 @@ mod tests {
app.state.onboarding_list.select(0);
let inner = app.state.onboarding_modal_inner(56, 14).unwrap();
+ let content = crate::ui::modal_stack_areas(inner, 3, 0, 1, 1).content;
app.handle_mouse(mouse(
MouseEventKind::Down(MouseButton::Left),
- inner.x + 2,
- inner.y + 7,
+ content.x + 2,
+ content.y + 2,
));
assert_eq!(app.state.onboarding_list.selected, 2);