2025-11-26 08:55:07 -07:00
|
|
|
#![warn(clippy::all, rust_2018_idioms)]
|
|
|
|
|
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release
|
|
|
|
|
|
|
|
|
|
// When compiling natively:
|
|
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
|
|
|
fn main() -> eframe::Result {
|
2025-11-28 18:39:14 -07:00
|
|
|
// pretty_env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`).
|
|
|
|
|
|
|
|
|
|
// let native_options = eframe::NativeOptions {
|
|
|
|
|
// viewport: egui::ViewportBuilder::default()
|
|
|
|
|
// .with_inner_size([400.0, 300.0])
|
|
|
|
|
// .with_min_inner_size([300.0, 220.0]),
|
|
|
|
|
// ..Default::default()
|
|
|
|
|
// };
|
|
|
|
|
// eframe::run_native(
|
|
|
|
|
// "eframe template",
|
|
|
|
|
// native_options,
|
|
|
|
|
// Box::new(|cc| Ok(Box::new(TemplateApp::new(cc)))),
|
|
|
|
|
// )
|
|
|
|
|
todo!()
|
2025-11-26 08:55:07 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// When compiling to web using trunk:
|
|
|
|
|
#[cfg(target_arch = "wasm32")]
|
|
|
|
|
fn main() {
|
|
|
|
|
use eframe::wasm_bindgen::JsCast as _;
|
|
|
|
|
|
2025-11-28 18:39:14 -07:00
|
|
|
use unshell_gui::app::TemplateApp;
|
|
|
|
|
|
2025-11-26 08:55:07 -07:00
|
|
|
// Redirect `log` message to `console.log` and friends:
|
|
|
|
|
eframe::WebLogger::init(log::LevelFilter::Debug).ok();
|
|
|
|
|
|
|
|
|
|
let web_options = eframe::WebOptions::default();
|
|
|
|
|
|
|
|
|
|
wasm_bindgen_futures::spawn_local(async {
|
|
|
|
|
let document = web_sys::window()
|
|
|
|
|
.expect("No window")
|
|
|
|
|
.document()
|
|
|
|
|
.expect("No document");
|
|
|
|
|
|
|
|
|
|
let canvas = document
|
|
|
|
|
.get_element_by_id("the_canvas_id")
|
|
|
|
|
.expect("Failed to find the_canvas_id")
|
|
|
|
|
.dyn_into::<web_sys::HtmlCanvasElement>()
|
|
|
|
|
.expect("the_canvas_id was not a HtmlCanvasElement");
|
|
|
|
|
|
|
|
|
|
let start_result = eframe::WebRunner::new()
|
|
|
|
|
.start(
|
|
|
|
|
canvas,
|
|
|
|
|
web_options,
|
|
|
|
|
Box::new(|cc| Ok(Box::new(TemplateApp::new(cc)))),
|
|
|
|
|
)
|
|
|
|
|
.await;
|
|
|
|
|
|
|
|
|
|
// Remove the loading text and spinner:
|
|
|
|
|
if let Some(loading_text) = document.get_element_by_id("loading_text") {
|
|
|
|
|
match start_result {
|
|
|
|
|
Ok(_) => {
|
|
|
|
|
loading_text.remove();
|
|
|
|
|
}
|
|
|
|
|
Err(e) => {
|
|
|
|
|
loading_text.set_inner_html(
|
|
|
|
|
"<p> The app has crashed. See the developer console for details. </p>",
|
|
|
|
|
);
|
|
|
|
|
panic!("Failed to start eframe: {e:?}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|