feat(wasm): open files in the browser
Wire up file open for the web build: - `io::pick_and_load_web`: browser file picker → read bytes → parse via `load_bytes` → build caches, returning the same payload as the native loader so it feeds the shared `Message::FileOpened` handler. - `Message::OpenFile` cfg-dispatches: native picks a path then loads on a worker thread; web picks + parses in one async step. The web branch also sets `opening` (the handler drops results when no open is in progress). - Disable the cosmic-text shaping / fallback paths on wasm: the web has no system fonts, so cosmic-text panics with "no default font found". LFF stroke fonts (embedded) still render; LFF-missing glyphs are skipped. Native build + 75 tests unchanged. Hatches still don't draw on the web. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
c49ad887b8
commit
6996343e84
3 changed files with 69 additions and 1 deletions
|
|
@ -148,7 +148,29 @@ impl OpenCADStudio {
|
|||
}
|
||||
|
||||
Message::OpenFile => {
|
||||
Task::perform(crate::io::pick_open_path(), Message::OpenPathPicked)
|
||||
// Native: pick a path, then load on a worker thread. Web: the
|
||||
// browser hands back bytes, so pick + parse in one step and feed
|
||||
// the shared `FileOpened` handler directly.
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
{
|
||||
Task::perform(crate::io::pick_open_path(), Message::OpenPathPicked)
|
||||
}
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
{
|
||||
// `FileOpened` only installs the result when an open is in
|
||||
// progress, so mark one. The browser picker + parse happen
|
||||
// inside `pick_and_load_web`; the real name is unknown until
|
||||
// then, so show a generic label meanwhile.
|
||||
self.opening = Some(super::OpenProgress {
|
||||
name: "Opening…".into(),
|
||||
size_bytes: 0,
|
||||
phase: std::sync::Arc::new(std::sync::atomic::AtomicU8::new(
|
||||
super::OPEN_PHASE_READING,
|
||||
)),
|
||||
started: Instant::now(),
|
||||
});
|
||||
Task::perform(crate::io::pick_and_load_web(), Message::FileOpened)
|
||||
}
|
||||
}
|
||||
|
||||
Message::OpenPathPicked(None) => Task::none(),
|
||||
|
|
|
|||
Loading…
Reference in a new issue