mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-11-13 00:18:58 +00:00
An approval question that a control request, MCP, injected input, or a file dialog one of them opened leads to now keeps OK disabled and refuses every confirm, a person's click included. The dialog says to choose Object › Plug-ins › Install Plug-in…, and ui.installPlugin answers approval: "personMustStartInstall". The person's own Install Plug-in…, File › Open or drop inspects the module again and asks a new question with its half-second delay. The origin is fixed when the request is made and goes with a native file dialog's deferred answer and the web picker's answers, which now arrive apart from drops and from window.vectorcraft.openFile (always automation). A question about taking another module's place now opens in the approval dialog, and automation's replace: true no longer skips it. A module that needs no approval still installs at once.
46 lines
1.8 KiB
Rust
46 lines
1.8 KiB
Rust
//! VectorCraft in the browser.
|
|
//!
|
|
//! Runs the same [`vectorcraft_ui_egui::VectorcraftApp`] as the desktop app through eframe's web
|
|
//! runner (wgpu: WebGPU where available, WebGL2 otherwise). Build with `trunk build --release`
|
|
//! from this directory; see `docs/development.md` ("Web build").
|
|
//!
|
|
//! Differences from the desktop app:
|
|
//! - no TCP control server (browsers can't listen on sockets);
|
|
//! - File → Open uses the browser file picker; bytes arrive asynchronously through
|
|
//! `Services::picked_inbox`;
|
|
//! - Save / Export trigger a browser download;
|
|
//! - dropped files are read asynchronously by `web::WebShell` and delivered through the inbox;
|
|
//! - pen and finger input is read from Pointer Events by `pencil` (Apple Pencil pressure and
|
|
//! hover, palm rejection, fingers navigate once a pen has been seen, the pen's eraser end
|
|
//! selects the Eraser tool);
|
|
//! - a Cmd or Ctrl chord the keymap binds runs its command, not the browser's own action as well
|
|
//! (`Cmd+=` zooms the canvas, not the page; `Cmd+Z` undoes in the document) (`keys`).
|
|
//!
|
|
//! URL query flags: `?webgl` forces the WebGL2 backend instead of WebGPU; `?lang=es` (any
|
|
//! language code) stands in for the browser's languages when the interface language is Automatic.
|
|
|
|
#[cfg(target_arch = "wasm32")]
|
|
mod api;
|
|
#[cfg(target_arch = "wasm32")]
|
|
mod fonts;
|
|
#[cfg(any(target_arch = "wasm32", test))]
|
|
mod keys;
|
|
#[cfg(target_arch = "wasm32")]
|
|
mod locks;
|
|
#[cfg(any(target_arch = "wasm32", test))]
|
|
mod pencil;
|
|
#[cfg(any(target_arch = "wasm32", test))]
|
|
mod saved_files;
|
|
#[cfg(target_arch = "wasm32")]
|
|
mod web;
|
|
|
|
#[cfg(target_arch = "wasm32")]
|
|
fn main() {
|
|
web::start();
|
|
}
|
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
fn main() {
|
|
eprintln!("vectorcraft-web only runs in the browser: build it with `trunk build --release` in apps/vectorcraft-web");
|
|
}
|