use yog_ids::screen_anchor as a;
use yog_ui::layout::Align;
const ANCHORS: [(&str, Align, Align); 9] = [
(a::CENTER, Align::Center, Align::Center),
(a::TOP_LEFT, Align::Start, Align::Start),
(a::TOP, Align::Center, Align::Start),
(a::TOP_RIGHT, Align::End, Align::Start),
(a::LEFT, Align::Start, Align::Center),
(a::RIGHT, Align::End, Align::Center),
(a::BOTTOM_LEFT, Align::Start, Align::End),
(a::BOTTOM, Align::Center, Align::End),
(a::BOTTOM_RIGHT, Align::End, Align::End),
];
#[derive(Debug, Clone, Copy, PartialEq)]
pub(crate) enum Anchor {
Fill,
At(Align, Align),
}
impl Anchor {
pub(crate) fn parse(word: &str) -> Option<Anchor> {
if word.trim() == a::FILL {
return Some(Anchor::Fill);
}
ANCHORS
.iter()
.find(|(w, _, _)| *w == word.trim())
.map(|&(_, h, v)| Anchor::At(h, v))
}
pub(crate) fn words() -> Vec<&'static str> {
ANCHORS
.iter()
.map(|(w, _, _)| *w)
.chain([a::FILL])
.collect()
}
pub(crate) fn of(written: Option<&str>) -> Option<Anchor> {
Anchor::parse(written.unwrap_or(a::CENTER))
}
}