egui/emigui/src/layout.rs

58 lines
1.4 KiB
Rust
Raw Normal View History

use serde_derive::{Deserialize, Serialize};
use crate::math::*;
2018-12-28 22:53:15 +00:00
// ----------------------------------------------------------------------------
#[derive(Clone, Copy, Debug, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
2019-01-06 15:34:01 +00:00
pub enum Direction {
2018-12-28 09:39:08 +00:00
Horizontal,
Vertical,
}
impl Default for Direction {
fn default() -> Direction {
Direction::Vertical
}
}
#[derive(Clone, Copy, Debug, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum Align {
/// Left/Top
Min,
/// Note: requires a bounded/known available_width.
Center,
/// Right/Bottom
/// Note: requires a bounded/known available_width.
Max,
2020-05-10 11:07:33 +00:00
/// Full width/height.
/// Use this when you want
Justified,
}
impl Default for Align {
fn default() -> Align {
Align::Min
}
}
2020-05-10 11:07:33 +00:00
/// Give a position within the rect, specified by the aligns
pub fn align_rect(rect: Rect, align: (Align, Align)) -> Rect {
let x = match align.0 {
2020-05-10 11:07:33 +00:00
Align::Min | Align::Justified => rect.left(),
Align::Center => rect.left() - 0.5 * rect.width(),
Align::Max => rect.left() - rect.width(),
};
let y = match align.1 {
2020-05-10 11:07:33 +00:00
Align::Min | Align::Justified => rect.top(),
Align::Center => rect.top() - 0.5 * rect.height(),
Align::Max => rect.top() - rect.height(),
};
Rect::from_min_size(pos2(x, y), rect.size())
}