in src/components/alignment.rs [78:124]
fn draw_unchecked(
&self,
state: &State,
dimensions: Dimensions,
mode: DrawMode,
) -> anyhow::Result<Vec<Line>> {
let Dimensions { x, y } = dimensions;
let mut output = self.child.draw(state, dimensions, mode)?;
let number_of_lines = output.len();
let padding_needed = (y as usize).saturating_sub(number_of_lines);
match self.vertical {
VerticalAlignmentKind::Top => {}
VerticalAlignmentKind::Center => {
let top_pad = padding_needed / 2;
output.pad_lines_top(top_pad);
output.pad_lines_bottom(padding_needed - top_pad);
}
VerticalAlignmentKind::Bottom => {
output.pad_lines_top(padding_needed);
}
}
match self.horizontal {
HorizontalAlignmentKind::Left(justified) => {
if justified {
output.justify();
}
}
HorizontalAlignmentKind::Center => {
for line in output.iter_mut() {
let output_len = line.len();
let padding_needed = (x as usize).saturating_sub(output_len);
let left_pad = padding_needed / 2;
line.pad_left(left_pad);
// handles any rounding issues
line.pad_right(padding_needed - left_pad);
}
}
HorizontalAlignmentKind::Right => {
for line in output.iter_mut() {
line.pad_left((x as usize).saturating_sub(line.len()));
}
}
}
Ok(output)
}