use egui::{Align2, Response, Ui, Widget};
use crate::*;
pub trait Alignable: Widget + Sized {
fn align(self, ui: &mut Ui, align: impl Alignment) -> Response;
fn center(self, ui: &mut Ui) -> Response {
self.align(ui, Align2::CENTER_CENTER)
}
fn top(self, ui: &mut Ui) -> Response {
self.align(ui, Align2::CENTER_TOP)
}
fn bottom(self, ui: &mut Ui) -> Response {
self.align(ui, Align2::CENTER_BOTTOM)
}
fn left(self, ui: &mut Ui) -> Response {
self.align(ui, Align2::LEFT_CENTER)
}
fn right(self, ui: &mut Ui) -> Response {
self.align(ui, Align2::RIGHT_CENTER)
}
fn top_left(self, ui: &mut Ui) -> Response {
self.align(ui, Align2::LEFT_TOP)
}
fn top_right(self, ui: &mut Ui) -> Response {
self.align(ui, Align2::RIGHT_TOP)
}
fn bottom_left(self, ui: &mut Ui) -> Response {
self.align(ui, Align2::LEFT_BOTTOM)
}
fn bottom_right(self, ui: &mut Ui) -> Response {
self.align(ui, Align2::RIGHT_BOTTOM)
}
}
impl<T: Widget> Alignable for T {
fn align(self, ui: &mut Ui, align: impl Alignment) -> Response {
Aligner::from_align(align).show(ui, |ui| self.ui(ui)).inner
}
}