logo_web/
lib.rs

1use wasm_bindgen::prelude::*;
2
3use logo_renderer::Context;
4use logo_renderer::logo_runtime::state::StateData;
5
6#[wasm_bindgen]
7pub fn context_create(width: i32, height: i32) -> Context {
8   Context::new(width, height)
9}
10
11#[wasm_bindgen]
12pub fn context_render(context: &mut Context, proc_source: &str, cmd_source: &str) -> Result<Vec<u8>, String> {
13    context.render(proc_source, cmd_source)
14}
15
16#[wasm_bindgen]
17pub fn context_get_state(context: &mut Context) -> StateData {
18    context.state.state.data
19}
20
21#[wasm_bindgen]
22pub fn render(proc_source: &str, cmd_source: &str, width: i32, height: i32) -> Result<Vec<u8>, String> {
23    let mut context = Context::new(width, height);
24    context.render(proc_source, cmd_source)
25}
26
27#[cfg(target_arch = "wasm32")]
28#[wasm_bindgen]
29pub fn context_set_show_fn(context: &mut Context, f: js_sys::Function) {
30    context.state.state.delegate.show_fn = Some(Box::new(move |msg: &str| {
31        let this = JsValue::null();
32        let _ = f.call1(&this, &JsValue::from(msg));
33    }));
34}