mirror of
https://github.com/typst/typst
synced 2025-05-20 03:55:29 +08:00
84 lines
2.0 KiB
Rust
84 lines
2.0 KiB
Rust
use super::*;
|
|
|
|
/// The four directions into which content can be laid out.
|
|
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
|
|
pub enum Dir {
|
|
/// Left to right.
|
|
LTR,
|
|
/// Right to left.
|
|
RTL,
|
|
/// Top to bottom.
|
|
TTB,
|
|
/// Bottom to top.
|
|
BTT,
|
|
}
|
|
|
|
impl Dir {
|
|
/// The side this direction starts at.
|
|
pub fn start(self) -> Side {
|
|
match self {
|
|
Self::LTR => Side::Left,
|
|
Self::RTL => Side::Right,
|
|
Self::TTB => Side::Top,
|
|
Self::BTT => Side::Bottom,
|
|
}
|
|
}
|
|
|
|
/// The side this direction ends at.
|
|
pub fn end(self) -> Side {
|
|
match self {
|
|
Self::LTR => Side::Right,
|
|
Self::RTL => Side::Left,
|
|
Self::TTB => Side::Bottom,
|
|
Self::BTT => Side::Top,
|
|
}
|
|
}
|
|
|
|
/// The specific axis this direction belongs to.
|
|
pub fn axis(self) -> SpecAxis {
|
|
match self {
|
|
Self::LTR | Self::RTL => SpecAxis::Horizontal,
|
|
Self::TTB | Self::BTT => SpecAxis::Vertical,
|
|
}
|
|
}
|
|
|
|
/// Whether this direction points into the positive coordinate direction.
|
|
///
|
|
/// The positive directions are left-to-right and top-to-bottom.
|
|
pub fn is_positive(self) -> bool {
|
|
match self {
|
|
Self::LTR | Self::TTB => true,
|
|
Self::RTL | Self::BTT => false,
|
|
}
|
|
}
|
|
|
|
/// The factor for this direction.
|
|
///
|
|
/// - `1.0` if the direction is positive.
|
|
/// - `-1.0` if the direction is negative.
|
|
pub fn factor(self) -> f64 {
|
|
if self.is_positive() { 1.0 } else { -1.0 }
|
|
}
|
|
|
|
/// The inverse direction.
|
|
pub fn inv(self) -> Self {
|
|
match self {
|
|
Self::LTR => Self::RTL,
|
|
Self::RTL => Self::LTR,
|
|
Self::TTB => Self::BTT,
|
|
Self::BTT => Self::TTB,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Display for Dir {
|
|
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
|
|
f.pad(match self {
|
|
Self::LTR => "ltr",
|
|
Self::RTL => "rtl",
|
|
Self::TTB => "ttb",
|
|
Self::BTT => "btt",
|
|
})
|
|
}
|
|
}
|