Crates.io | egui_wings_host |
lib.rs | egui_wings_host |
version | |
source | src |
created_at | 2024-08-10 22:28:49.670268 |
updated_at | 2024-11-13 17:01:46.028653 |
description | egui bindings for WASM plugins |
homepage | |
repository | https://github.com/DouglasDwyer/egui_wings |
max_upload_size | |
id | 1332767 |
Cargo.toml error: | TOML parse error at line 17, column 1 | 17 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
This crate facilitates sharing an egui::Context
between a host and multiple guest WASM modules. This allows WASM plugins to draw UI and easily display it via the host.
The following code snippet shows how to use egui_wings
from a WASM plugin (the complete example may be found in the egui_wings_example
folder). It defines a WingsSystem
which will store the WASM plugin's state. Each frame, the draw_ui
method is invoked. It accesses the host egui::Context
via a system dependency and then makes normal egui
calls to draw a UI.
use egui_wings::*;
use example_host::*;
use wings::*;
instantiate_systems!(ExampleHost, [PluginSystem]);
/// An object that will be instantiated inside a WASM plugin.
#[export_system]
pub struct PluginSystem {
/// A handle for accessing system dependencies.
ctx: WingsContextHandle<Self>,
}
impl PluginSystem {
/// Submits the `egui` commands to draw the debug windows.
fn draw_ui(&mut self, _: &example_host::on::Render) {
let egui = self.ctx.get::<dyn Egui>();
Window::new("webassembly says hello!")
.resizable(true)
.vscroll(true)
.default_open(false)
.show(&egui.context(), |ui| {
ui.label("Hello there!");
});
}
}
impl WingsSystem for PluginSystem {
const DEPENDENCIES: Dependencies = dependencies().with::<dyn Egui>();
const EVENT_HANDLERS: EventHandlers<Self> = event_handlers().with(Self::draw_ui);
fn new(ctx: WingsContextHandle<Self>) -> Self {
Self { ctx }
}
}