use crate::utils::duration::DurExt;
use inquiry::Choice;
use std::time::Duration;
#[derive(Debug, Clone, Copy, Choice, PartialEq)]
pub enum ImageProcessingMethod {
Otsu,
Kapur,
Wolfs,
Bernsens,
Sauvola,
}
#[derive(Debug, Clone, Copy, Choice, PartialEq)]
pub enum ScalingMode {
Stretch,
Fit,
Fill,
Center,
Tile,
}
#[derive(Debug, Clone, Copy, Choice, PartialEq)]
pub enum RegionPickMode {
Interactive,
Manual,
}
#[derive(Debug, Clone, Copy, Choice, PartialEq)]
pub enum DrawingAccuracy {
Fast,
Balanced,
Accurate,
}
#[derive(Debug, Clone, Copy, Choice, PartialEq)]
pub enum DrawingSpeed {
UniverseAnnihilating,
UltraFast,
Fast,
Medium,
Slow,
}
#[derive(Debug, Clone, Copy, Choice, PartialEq)]
pub enum LineOrder {
InOrder,
Shuffled,
}
pub fn get_step(drawing_accuracy: DrawingAccuracy) -> i32 {
match drawing_accuracy {
DrawingAccuracy::Fast => 3,
DrawingAccuracy::Balanced => 2,
DrawingAccuracy::Accurate => 1,
}
}
pub fn get_speed(speed: DrawingSpeed) -> Duration {
match speed {
DrawingSpeed::UniverseAnnihilating => {
let confirmation = inquire::prompt_confirmation(
"This will break things. Are you sure you want to use this speed?",
)
.expect("Failed to read confirmation");
if confirmation {
Duration::from_picos(1)
} else {
panic!("Cancelled operation");
}
}
DrawingSpeed::UltraFast => Duration::from_micros(1),
DrawingSpeed::Fast => Duration::from_micros(10),
DrawingSpeed::Medium => Duration::from_micros(50),
DrawingSpeed::Slow => Duration::from_micros(200),
}
}