Skip to main content

ferroui_base/layout/
layout_extensions.rs

1use super::{HorizontalAlignment, VerticalAlignment};
2use crate::Rect;
3
4/// Extension methods for layout types.
5pub struct LayoutExtensions;
6
7impl LayoutExtensions {
8    /// Aligns a rect in a constraining rect according to horizontal and
9    /// vertical alignment settings.
10    pub fn align(
11        mut rect: Rect,
12        constraint: Rect,
13        horizontal_alignment: HorizontalAlignment,
14        vertical_alignment: VerticalAlignment,
15    ) -> Rect {
16        match horizontal_alignment {
17            HorizontalAlignment::Center => rect = rect.with_x((constraint.width - rect.width) / 2.0),
18            HorizontalAlignment::Right => rect = rect.with_x(constraint.width - rect.width),
19            HorizontalAlignment::Stretch => {
20                rect = Rect::new(0.0, rect.y, constraint.width.max(rect.width), rect.height)
21            }
22            HorizontalAlignment::Left => {}
23        }
24
25        match vertical_alignment {
26            VerticalAlignment::Center => rect = rect.with_y((constraint.height - rect.height) / 2.0),
27            VerticalAlignment::Bottom => rect = rect.with_y(constraint.height - rect.height),
28            VerticalAlignment::Stretch => {
29                rect = Rect::new(rect.x, 0.0, rect.width, constraint.height.max(rect.height))
30            }
31            VerticalAlignment::Top => {}
32        }
33
34        rect
35    }
36}