BlueGit

golden-age paperdoll-renderer

Files

paperdoll-renderer / src / main.rs

main.rs

main.rs 2.4 KiB Download Raw
1//! Desktop shell for Paperdoll Renderer project files.
2//!
3//! The window creates and saves a `.ppd` project directory. It does not import
4//! models and it does not render paperdolls.
5
6use std::process::ExitCode;
7
8use paperdoll_renderer::editor::EditorApp;
9use paperdoll_renderer::foundation::{help_text, parse_cli, report, CliError, CliRequest};
10
11fn main() -> ExitCode {
12 let args: Vec<String> = std::env::args().skip(1).collect();
13 let borrowed: Vec<&str> = args.iter().map(String::as_str).collect();
14 match parse_cli(borrowed) {
15 Ok(CliRequest::PrintHelp) => {
16 println!("{}", help_text());
17 ExitCode::SUCCESS
18 }
19 Ok(CliRequest::PrintStatus) => {
20 println!("{}", report());
21 ExitCode::SUCCESS
22 }
23 Ok(CliRequest::OpenWindow) => {
24 if let Some(message) = window_preflight() {
25 eprintln!("paperdoll-renderer: {message}");
26 return ExitCode::from(1);
27 }
28 match run_window() {
29 Ok(()) => ExitCode::SUCCESS,
30 Err(err) => {
31 eprintln!("paperdoll-renderer: het projectvenster openen is mislukt: {err}");
32 ExitCode::from(1)
33 }
34 }
35 }
36 Err(CliError::UnknownArgument(arg)) => {
37 eprintln!("paperdoll-renderer: onbekend argument '{arg}'.");
38 eprintln!("Import en render zijn niet gebouwd. Gebruik --help.");
39 ExitCode::from(2)
40 }
41 }
42}
43
44fn window_preflight() -> Option<String> {
45 #[cfg(target_os = "linux")]
46 {
47 let missing = paperdoll_renderer::foundation::missing_window_libraries();
48 if missing.is_empty() {
49 None
50 } else {
51 Some(paperdoll_renderer::foundation::missing_library_message(
52 &missing,
53 ))
54 }
55 }
56 #[cfg(not(target_os = "linux"))]
57 {
58 None
59 }
60}
61
62fn run_window() -> eframe::Result<()> {
63 let options = eframe::NativeOptions {
64 viewport: eframe::egui::ViewportBuilder::default()
65 .with_title("Paperdoll Renderer")
66 .with_inner_size([980.0, 680.0])
67 .with_min_inner_size([720.0, 480.0]),
68 ..Default::default()
69 };
70 eframe::run_native(
71 "Paperdoll Renderer",
72 options,
73 Box::new(|_creation| Ok(Box::<EditorApp>::default())),
74 )
75}