54 lines
1.6 KiB
Rust
54 lines
1.6 KiB
Rust
use crate::Rectangle;
|
|
|
|
/// A fixed reference line for the measurement of coordinates.
|
|
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
|
|
pub enum Axis {
|
|
/// The horizontal axis: —
|
|
Horizontal,
|
|
/// The vertical axis: |
|
|
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();
|
|
let height_bottom = rectangle.height - height_top;
|
|
|
|
(
|
|
Rectangle {
|
|
height: height_top - halved_spacing,
|
|
..*rectangle
|
|
},
|
|
Rectangle {
|
|
y: rectangle.y + height_top + halved_spacing,
|
|
height: height_bottom - halved_spacing,
|
|
..*rectangle
|
|
},
|
|
)
|
|
}
|
|
Axis::Vertical => {
|
|
let width_left = (rectangle.width * ratio).round();
|
|
let width_right = rectangle.width - width_left;
|
|
|
|
(
|
|
Rectangle {
|
|
width: width_left - halved_spacing,
|
|
..*rectangle
|
|
},
|
|
Rectangle {
|
|
x: rectangle.x + width_left + halved_spacing,
|
|
width: width_right - halved_spacing,
|
|
..*rectangle
|
|
},
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|