use eframe::egui;
use std::process;
fn main() -> eframe::Result<()> {
match caery::cli::handle_args(std::env::args().skip(1)) {
Ok(caery::cli::StartupAction::Gui) => run_gui(),
Ok(caery::cli::StartupAction::Handled) => Ok(()),
Err(error) => {
eprintln!("caery: {error}");
if error.is_usage() {
eprintln!("{}", caery::cli::short_usage());
}
process::exit(error.exit_code());
}
}
}
fn run_gui() -> eframe::Result<()> {
let mut viewport = egui::ViewportBuilder::default()
.with_title("Caery")
.with_app_id("caery")
.with_inner_size([1060.0, 720.0])
.with_min_inner_size([680.0, 500.0]);
if let Some(icon) = load_window_icon() {
viewport = viewport.with_icon(icon);
}
let options = eframe::NativeOptions {
viewport,
..Default::default()
};
eframe::run_native(
"Caery",
options,
Box::new(|cc| Ok(Box::new(caery::app::CaeryApp::new(cc)))),
)
}
fn load_window_icon() -> Option<egui::IconData> {
let bytes = include_bytes!("../assets/logo.png");
let image = image::load_from_memory(bytes).ok()?.to_rgba8();
let (width, height) = image.dimensions();
Some(egui::IconData {
rgba: image.into_raw(),
width,
height,
})
}