54 lines
1.5 KiB
Rust
54 lines
1.5 KiB
Rust
use crate::Rectangle;
|
|
|
|
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
|
|
pub enum Axis {
|
|
Horizontal,
|
|
Vertical,
|
|
}
|
|
|
|
impl Axis {
|
|
pub(super) fn split(
|
|
&self,
|
|
rectangle: &Rectangle,
|
|
ratio: f32,
|
|
halved_spacing: f32,
|
|
) -> (Rectangle, Rectangle) {
|
|
match self {
|
|
Axis::Horizontal => {
|
|
let height_top =
|
|
(rectangle.height * ratio).round() - halved_spacing;
|
|
let height_bottom =
|
|
rectangle.height - height_top - halved_spacing;
|
|
|
|
(
|
|
Rectangle {
|
|
height: height_top,
|
|
..*rectangle
|
|
},
|
|
Rectangle {
|
|
y: rectangle.y + height_top + halved_spacing,
|
|
height: height_bottom,
|
|
..*rectangle
|
|
},
|
|
)
|
|
}
|
|
Axis::Vertical => {
|
|
let width_left =
|
|
(rectangle.width * ratio).round() - halved_spacing;
|
|
let width_right = rectangle.width - width_left - halved_spacing;
|
|
|
|
(
|
|
Rectangle {
|
|
width: width_left,
|
|
..*rectangle
|
|
},
|
|
Rectangle {
|
|
x: rectangle.x + width_left + halved_spacing,
|
|
width: width_right,
|
|
..*rectangle
|
|
},
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|