egui/src/lib.rs

71 lines
1.6 KiB
Rust
Raw Normal View History

extern crate serde;
extern crate serde_json;
extern crate wasm_bindgen;
extern crate web_sys;
#[macro_use]
extern crate serde_derive;
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
#[derive(Deserialize)]
pub struct Input {
pub screen_width: f32,
pub screen_height: f32,
pub mouse_x: f32,
pub mouse_y: f32,
}
#[derive(Serialize)]
#[serde(rename_all = "snake_case")]
enum TextAlign {
Start,
Center,
End,
}
#[derive(Serialize)]
#[serde(rename_all = "snake_case", tag = "kind")]
enum PaintCmd {
Clear {
fill_style: String,
},
RoundedRect {
fill_style: String,
pos: [f32; 2],
size: [f32; 2],
radius: f32,
},
Text {
fill_style: String,
font: String,
pos: [f32; 2],
text: String,
text_align: TextAlign,
},
}
#[wasm_bindgen]
pub fn show_gui(input_json: &str) -> String {
let input: Input = serde_json::from_str(input_json).unwrap();
let commands = [
PaintCmd::Clear {
fill_style: "#44444400".to_string(),
},
PaintCmd::RoundedRect {
fill_style: "#1111ff".to_string(),
pos: [100.0, 100.0],
radius: 40.0,
size: [200.0, 200.0],
},
PaintCmd::Text {
fill_style: "#11ff00".to_string(),
font: "14px Palatino".to_string(),
pos: [200.0, 32.0],
text: format!("Mouse pos: {} {}", input.mouse_x, input.mouse_y),
text_align: TextAlign::Center,
},
];
serde_json::to_string(&commands).unwrap()
}