mirror of https://github.com/Leinnan/rpack.git
98 lines
3.4 KiB
Rust
98 lines
3.4 KiB
Rust
#![warn(clippy::all, rust_2018_idioms)]
|
|
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] // hide console window on Windows in release
|
|
|
|
#[cfg(all(not(target_arch = "wasm32"), feature = "profiler"))]
|
|
fn start_puffin_server() {
|
|
puffin::set_scopes_on(true); // tell puffin to collect data
|
|
|
|
match puffin_http::Server::new("127.0.0.1:8585") {
|
|
Ok(puffin_server) => {
|
|
log::info!("Run: cargo install puffin_viewer && puffin_viewer --url 127.0.0.1:8585");
|
|
|
|
std::process::Command::new("puffin_viewer")
|
|
.arg("--url")
|
|
.arg("127.0.0.1:8585")
|
|
.spawn()
|
|
.ok();
|
|
|
|
// We can store the server if we want, but in this case we just want
|
|
// it to keep running. Dropping it closes the server, so let's not drop it!
|
|
#[expect(clippy::mem_forget)]
|
|
std::mem::forget(puffin_server);
|
|
}
|
|
Err(err) => {
|
|
log::error!("Failed to start puffin server: {err}");
|
|
}
|
|
}
|
|
}
|
|
|
|
// When compiling natively:
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
fn main() -> eframe::Result<()> {
|
|
env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`).
|
|
#[cfg(all(not(target_arch = "wasm32"), feature = "profiler"))]
|
|
start_puffin_server();
|
|
let file_arg: Option<String> = if std::env::args().len() > 1 {
|
|
std::env::args().nth(1)
|
|
} else {
|
|
None
|
|
};
|
|
let native_options = eframe::NativeOptions {
|
|
viewport: egui::ViewportBuilder::default()
|
|
.with_inner_size([400.0, 300.0])
|
|
.with_icon(eframe::icon_data::from_png_bytes(rpack_egui::ICON_DATA).unwrap_or_default())
|
|
.with_min_inner_size([400.0, 300.0]),
|
|
..Default::default()
|
|
};
|
|
eframe::run_native(
|
|
"rPack",
|
|
native_options,
|
|
Box::new(|cc| Ok(Box::new(rpack_egui::Application::new(cc, file_arg)))),
|
|
)
|
|
}
|
|
|
|
// When compiling to web using trunk:
|
|
#[cfg(target_arch = "wasm32")]
|
|
fn main() {
|
|
// 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 {
|
|
use web_sys::wasm_bindgen::JsCast;
|
|
use web_sys::{window, HtmlCanvasElement};
|
|
let canvas = window()
|
|
.and_then(|w| w.document())
|
|
.and_then(|d| d.get_element_by_id("the_canvas_id"))
|
|
.expect("No Canvas found")
|
|
.dyn_into::<HtmlCanvasElement>()
|
|
.expect("Could not cast to Canvas");
|
|
let start_result = eframe::WebRunner::new()
|
|
.start(
|
|
canvas,
|
|
web_options,
|
|
Box::new(|cc| Ok(Box::new(rpack_egui::Application::new(cc, None)))),
|
|
)
|
|
.await;
|
|
|
|
// Remove the loading text and spinner:
|
|
let loading_text = window()
|
|
.and_then(|w| w.document())
|
|
.and_then(|d| d.get_element_by_id("loading_text"));
|
|
if let Some(loading_text) = 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:?}");
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|