First one-shot pass
This commit is contained in:
53
src/ui/layout.rs
Normal file
53
src/ui/layout.rs
Normal file
@@ -0,0 +1,53 @@
|
||||
use ratatui::layout::{Constraint, Direction, Layout, Rect};
|
||||
|
||||
pub struct AppLayout {
|
||||
pub header: Rect,
|
||||
pub main: Rect,
|
||||
pub sidebar: Rect,
|
||||
pub footer: Rect,
|
||||
}
|
||||
|
||||
impl AppLayout {
|
||||
pub fn new(area: Rect) -> Self {
|
||||
let vertical = Layout::default()
|
||||
.direction(Direction::Vertical)
|
||||
.constraints([
|
||||
Constraint::Length(3),
|
||||
Constraint::Min(10),
|
||||
Constraint::Length(3),
|
||||
])
|
||||
.split(area);
|
||||
|
||||
let horizontal = Layout::default()
|
||||
.direction(Direction::Horizontal)
|
||||
.constraints([Constraint::Percentage(70), Constraint::Percentage(30)])
|
||||
.split(vertical[1]);
|
||||
|
||||
Self {
|
||||
header: vertical[0],
|
||||
main: horizontal[0],
|
||||
sidebar: horizontal[1],
|
||||
footer: vertical[2],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn centered_rect(percent_x: u16, percent_y: u16, area: Rect) -> Rect {
|
||||
let vertical = Layout::default()
|
||||
.direction(Direction::Vertical)
|
||||
.constraints([
|
||||
Constraint::Percentage((100 - percent_y) / 2),
|
||||
Constraint::Percentage(percent_y),
|
||||
Constraint::Percentage((100 - percent_y) / 2),
|
||||
])
|
||||
.split(area);
|
||||
|
||||
Layout::default()
|
||||
.direction(Direction::Horizontal)
|
||||
.constraints([
|
||||
Constraint::Percentage((100 - percent_x) / 2),
|
||||
Constraint::Percentage(percent_x),
|
||||
Constraint::Percentage((100 - percent_x) / 2),
|
||||
])
|
||||
.split(vertical[1])[1]
|
||||
}
|
||||
Reference in New Issue
Block a user