oxipdf-ir 0.1.0

Intermediate representation types for the oxipdf PDF engine
Documentation
//! Flexbox style properties.

use crate::units::{Dimension, LengthPercentage};

/// Flexbox-specific style properties.
///
/// Only meaningful when the parent node has `Display::Flex`.
#[derive(Debug, Clone, PartialEq)]
pub struct FlexStyle {
    /// Direction of the main axis.
    pub direction: FlexDirection,
    /// Whether flex items wrap to new lines.
    pub wrap: FlexWrap,
    /// Alignment of items along the main axis.
    pub justify_content: JustifyContent,
    /// Default alignment of items along the cross axis.
    pub align_items: AlignItems,
    /// Per-item override of cross-axis alignment.
    pub align_self: AlignSelf,
    /// Alignment of wrapped lines along the cross axis.
    pub align_content: AlignContent,
    /// Flex grow factor.
    pub flex_grow: f64,
    /// Flex shrink factor.
    pub flex_shrink: f64,
    /// Initial main size before growing/shrinking.
    pub flex_basis: Dimension,
    /// Gap between items along the main axis.
    pub column_gap: LengthPercentage,
    /// Gap between lines along the cross axis.
    pub row_gap: LengthPercentage,
    /// Ordering index for flex items.
    pub order: i32,
}

impl Default for FlexStyle {
    fn default() -> Self {
        Self {
            direction: FlexDirection::Row,
            wrap: FlexWrap::NoWrap,
            justify_content: JustifyContent::FlexStart,
            align_items: AlignItems::Stretch,
            align_self: AlignSelf::Auto,
            align_content: AlignContent::Stretch,
            flex_grow: 0.0,
            flex_shrink: 1.0,
            flex_basis: Dimension::Auto,
            column_gap: LengthPercentage::ZERO,
            row_gap: LengthPercentage::ZERO,
            order: 0,
        }
    }
}

/// Main axis direction.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum FlexDirection {
    #[default]
    Row,
    RowReverse,
    Column,
    ColumnReverse,
}

/// Whether flex items wrap.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum FlexWrap {
    #[default]
    NoWrap,
    Wrap,
    WrapReverse,
}

/// Main-axis alignment.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum JustifyContent {
    #[default]
    FlexStart,
    FlexEnd,
    Center,
    SpaceBetween,
    SpaceAround,
    SpaceEvenly,
}

/// Cross-axis alignment for all items.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum AlignItems {
    FlexStart,
    FlexEnd,
    Center,
    Baseline,
    #[default]
    Stretch,
}

/// Per-item cross-axis alignment override.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum AlignSelf {
    #[default]
    Auto,
    FlexStart,
    FlexEnd,
    Center,
    Baseline,
    Stretch,
}

/// Cross-axis alignment for wrapped lines.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum AlignContent {
    FlexStart,
    FlexEnd,
    Center,
    SpaceBetween,
    SpaceAround,
    #[default]
    Stretch,
}