use crate::plot::line::LineStyle;
use crate::plot::{FillPattern, MarkerShape};
use crate::render::render::Scene;
const BW_GREYS: &[&str] = &[
"#f0f0f0", "#383838", "#b0b0b0", "#181818", "#787878", ];
const BW_PATTERNS: &[FillPattern] = &[
FillPattern::DiagonalForward,
FillPattern::Horizontal,
FillPattern::Crosshatch,
FillPattern::Vertical,
FillPattern::Dots,
FillPattern::DiagonalBack,
FillPattern::DiagonalCrosshatch,
];
const BW_DASHES: &[LineStyle] = &[
LineStyle::Solid,
LineStyle::Dashed,
LineStyle::Dotted,
LineStyle::DashDot,
];
const BW_SHAPES: &[MarkerShape] = &[
MarkerShape::Circle,
MarkerShape::Square,
MarkerShape::Triangle,
MarkerShape::Diamond,
MarkerShape::Cross,
MarkerShape::Plus,
];
pub fn bw_fill(i: usize) -> (&'static str, FillPattern) {
let grey = BW_GREYS[i % BW_GREYS.len()];
let pat = BW_PATTERNS[i % BW_PATTERNS.len()];
(grey, pat)
}
pub fn bw_dash(i: usize) -> LineStyle {
BW_DASHES[i % BW_DASHES.len()].clone()
}
pub fn bw_shape(i: usize) -> MarkerShape {
BW_SHAPES[i % BW_SHAPES.len()]
}
pub fn register_pattern(scene: &mut Scene, pattern: FillPattern) -> String {
if !pattern.is_patterned() {
return String::new();
}
let id = pattern.id();
if !scene.defs.iter().any(|d| d.contains(id)) {
scene.defs.push(pattern.svg_def().to_string());
}
format!("url(#{id})")
}