//! Desktop shell for Paperdoll Renderer project files. //! //! The window creates and saves a `.ppd` project directory. It does not import //! models and it does not render paperdolls. use std::process::ExitCode; use paperdoll_renderer::editor::EditorApp; use paperdoll_renderer::foundation::{help_text, parse_cli, report, CliError, CliRequest}; fn main() -> ExitCode { let args: Vec = std::env::args().skip(1).collect(); let borrowed: Vec<&str> = args.iter().map(String::as_str).collect(); match parse_cli(borrowed) { Ok(CliRequest::PrintHelp) => { println!("{}", help_text()); ExitCode::SUCCESS } Ok(CliRequest::PrintStatus) => { println!("{}", report()); ExitCode::SUCCESS } Ok(CliRequest::OpenWindow) => { if let Some(message) = window_preflight() { eprintln!("paperdoll-renderer: {message}"); return ExitCode::from(1); } match run_window() { Ok(()) => ExitCode::SUCCESS, Err(err) => { eprintln!("paperdoll-renderer: het projectvenster openen is mislukt: {err}"); ExitCode::from(1) } } } Err(CliError::UnknownArgument(arg)) => { eprintln!("paperdoll-renderer: onbekend argument '{arg}'."); eprintln!("Import en render zijn niet gebouwd. Gebruik --help."); ExitCode::from(2) } } } fn window_preflight() -> Option { #[cfg(target_os = "linux")] { let missing = paperdoll_renderer::foundation::missing_window_libraries(); if missing.is_empty() { None } else { Some(paperdoll_renderer::foundation::missing_library_message( &missing, )) } } #[cfg(not(target_os = "linux"))] { None } } fn run_window() -> eframe::Result<()> { let options = eframe::NativeOptions { viewport: eframe::egui::ViewportBuilder::default() .with_title("Paperdoll Renderer") .with_inner_size([980.0, 680.0]) .with_min_inner_size([720.0, 480.0]), ..Default::default() }; eframe::run_native( "Paperdoll Renderer", options, Box::new(|_creation| Ok(Box::::default())), ) }