#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum NodeMarker {
DoubleRing,
Boundary,
Frontier,
Warning,
}
#[derive(Clone, Debug, PartialEq)]
pub enum DashPattern {
Dashed,
Pattern(Vec<f32>),
}
impl DashPattern {
pub(crate) fn resolved(&self) -> Option<Vec<f32>> {
let values = match self {
Self::Dashed => vec![8.0, 5.0],
Self::Pattern(values) => values.clone(),
};
if values.is_empty() || values.iter().any(|value| !value.is_finite() || *value <= 0.0) {
None
} else {
Some(values)
}
}
}
#[derive(Clone, Debug, Default, PartialEq)]
pub struct NodeVisualStyle {
pub fill: Option<String>,
pub outline: Option<String>,
pub alpha: Option<f32>,
pub outline_width: Option<f32>,
pub marker: Option<NodeMarker>,
}
#[derive(Clone, Debug, Default, PartialEq)]
pub struct EdgeVisualStyle {
pub tint: Option<String>,
pub alpha: Option<f32>,
pub width: Option<f32>,
pub dash: Option<DashPattern>,
pub lateral_offset: Option<f32>,
pub directed: bool,
}