use crate::units::{Dimension, LengthPercentage, Pt};
#[derive(Debug, Clone, PartialEq)]
pub struct LayoutStyle {
pub display: Display,
pub position: Position,
pub box_sizing: BoxSizing,
pub width: Dimension,
pub height: Dimension,
pub min_width: Dimension,
pub min_height: Dimension,
pub max_width: Dimension,
pub max_height: Dimension,
pub margin_top: Dimension,
pub margin_right: Dimension,
pub margin_bottom: Dimension,
pub margin_left: Dimension,
pub padding_top: LengthPercentage,
pub padding_right: LengthPercentage,
pub padding_bottom: LengthPercentage,
pub padding_left: LengthPercentage,
pub inset_top: Dimension,
pub inset_right: Dimension,
pub inset_bottom: Dimension,
pub inset_left: Dimension,
pub overflow: Overflow,
pub column_count: u32,
pub column_gap: Pt,
pub column_rule: Option<ColumnRule>,
pub aspect_ratio: Option<f32>,
pub visibility: Visibility,
pub float: Float,
pub clear: Clear,
pub z_index: i32,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct ColumnRule {
pub width: Pt,
pub color: crate::color::Color,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum Visibility {
#[default]
Visible,
Hidden,
}
impl Default for LayoutStyle {
fn default() -> Self {
Self {
display: Display::Block,
position: Position::Static,
box_sizing: BoxSizing::ContentBox,
width: Dimension::Auto,
height: Dimension::Auto,
min_width: Dimension::Length(Pt::ZERO),
min_height: Dimension::Length(Pt::ZERO),
max_width: Dimension::Auto,
max_height: Dimension::Auto,
margin_top: Dimension::Length(Pt::ZERO),
margin_right: Dimension::Length(Pt::ZERO),
margin_bottom: Dimension::Length(Pt::ZERO),
margin_left: Dimension::Length(Pt::ZERO),
padding_top: LengthPercentage::ZERO,
padding_right: LengthPercentage::ZERO,
padding_bottom: LengthPercentage::ZERO,
padding_left: LengthPercentage::ZERO,
inset_top: Dimension::Auto,
inset_right: Dimension::Auto,
inset_bottom: Dimension::Auto,
inset_left: Dimension::Auto,
overflow: Overflow::Visible,
column_count: 1,
column_gap: Pt::ZERO,
column_rule: None,
aspect_ratio: None,
visibility: Visibility::Visible,
float: Float::None,
clear: Clear::None,
z_index: 0,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum Display {
#[default]
Block,
Flex,
Grid,
Inline,
None,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum Position {
#[default]
Static,
Relative,
Absolute,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum BoxSizing {
#[default]
ContentBox,
BorderBox,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum Overflow {
#[default]
Visible,
Hidden,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum Float {
#[default]
None,
Left,
Right,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum Clear {
#[default]
None,
Left,
Right,
Both,
}