Expand description
§egui_wings
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.
§Usage
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 }
}
}Re-exports§
pub use egui;
Structs§
- Context
Snapshot Deltas - Tracks changes that occur to a
Contextso that a partialContextSnapshotcan be generated containing only information that has changed since the previous snapshot was applied. - Egui
Handle - Provides access to an
egui::Contextwhich is synchronized with the host. Theegui::Contextmay be cloned, but the context is invalidated when this handle is dropped.
Traits§
- Egui
- Allows for accessing the shared
egui::Contextfor plugins.