#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Anchor {
TopLeft,
TopCenter,
TopRight,
CenterLeft,
Center,
CenterRight,
BottomLeft,
BottomCenter,
BottomRight,
}
pub fn parse_anchor(s: &str) -> Option<Anchor> {
match s {
"top-left" => Some(Anchor::TopLeft),
"top-center" => Some(Anchor::TopCenter),
"top-right" => Some(Anchor::TopRight),
"center-left" => Some(Anchor::CenterLeft),
"center" => Some(Anchor::Center),
"center-right" => Some(Anchor::CenterRight),
"bottom-left" => Some(Anchor::BottomLeft),
"bottom-center" => Some(Anchor::BottomCenter),
"bottom-right" => Some(Anchor::BottomRight),
_ => None,
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AnchorEdge {
Above,
Below,
Before,
After,
}
pub fn parse_anchor_edge(s: &str) -> Option<AnchorEdge> {
match s {
"above" => Some(AnchorEdge::Above),
"below" => Some(AnchorEdge::Below),
"before" => Some(AnchorEdge::Before),
"after" => Some(AnchorEdge::After),
_ => None,
}
}
pub fn anchor_xy(anchor: Anchor, page_w: f64, page_h: f64, node_w: f64, node_h: f64) -> (f64, f64) {
match anchor {
Anchor::TopLeft => (0.0, 0.0),
Anchor::TopCenter => ((page_w - node_w) / 2.0, 0.0),
Anchor::TopRight => (page_w - node_w, 0.0),
Anchor::CenterLeft => (0.0, (page_h - node_h) / 2.0),
Anchor::Center => ((page_w - node_w) / 2.0, (page_h - node_h) / 2.0),
Anchor::CenterRight => (page_w - node_w, (page_h - node_h) / 2.0),
Anchor::BottomLeft => (0.0, page_h - node_h),
Anchor::BottomCenter => ((page_w - node_w) / 2.0, page_h - node_h),
Anchor::BottomRight => (page_w - node_w, page_h - node_h),
}
}