From 2e2e7a7839b059265eb9edfe3a18604d2e7d448a Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Sun, 23 Dec 2018 20:06:40 +0100 Subject: [PATCH] Refactor with some better types --- Cargo.toml | 3 +- docs/emgui.d.ts | 8 ---- docs/emgui.js | 53 ---------------------- docs/emgui_bg.wasm | Bin 125328 -> 145753 bytes docs/frontend.js | 49 ++++++++++---------- docs/frontend.ts | 85 ++++++++++++++++------------------- src/lib.rs | 108 ++++++++++++++++++++++++--------------------- src/types.rs | 55 +++++++++++++++++++++++ 8 files changed, 176 insertions(+), 185 deletions(-) create mode 100644 src/types.rs diff --git a/Cargo.toml b/Cargo.toml index 787860ae..f48a3445 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,12 +2,13 @@ name = "emgui" version = "0.1.0" authors = ["Emil Ernerfeldt "] +# edition = "2018" // TODO: update [lib] crate-type = ["cdylib", "rlib"] [dependencies] -# rand = { version="0.6", features = ['wasm-bindgen'] } +lazy_static = "1" serde = "1" serde_derive = "1" serde_json = "1" diff --git a/docs/emgui.d.ts b/docs/emgui.d.ts index 7eec4b07..2614fc9a 100644 --- a/docs/emgui.d.ts +++ b/docs/emgui.d.ts @@ -1,11 +1,3 @@ /* tslint:disable */ export function show_gui(arg0: string): string; -export class Input { -free(): void; -screen_width: number -screen_height: number -mouse_x: number -mouse_y: number - -} diff --git a/docs/emgui.js b/docs/emgui.js index eec87cd1..07a839c5 100644 --- a/docs/emgui.js +++ b/docs/emgui.js @@ -67,59 +67,6 @@ }; - function freeInput(ptr) { - - wasm.__wbg_input_free(ptr); - } - /** - */ - class Input { - - free() { - const ptr = this.ptr; - this.ptr = 0; - freeInput(ptr); - } - - /** - * @returns {number} - */ - get screen_width() { - return wasm.__wbg_get_input_screen_width(this.ptr); - } - set screen_width(arg0) { - return wasm.__wbg_set_input_screen_width(this.ptr, arg0); - } - /** - * @returns {number} - */ - get screen_height() { - return wasm.__wbg_get_input_screen_height(this.ptr); - } - set screen_height(arg0) { - return wasm.__wbg_set_input_screen_height(this.ptr, arg0); - } - /** - * @returns {number} - */ - get mouse_x() { - return wasm.__wbg_get_input_mouse_x(this.ptr); - } - set mouse_x(arg0) { - return wasm.__wbg_set_input_mouse_x(this.ptr, arg0); - } - /** - * @returns {number} - */ - get mouse_y() { - return wasm.__wbg_get_input_mouse_y(this.ptr); - } - set mouse_y(arg0) { - return wasm.__wbg_set_input_mouse_y(this.ptr, arg0); - } - } - __exports.Input = Input; - __exports.__wbindgen_throw = function(ptr, len) { throw new Error(getStringFromWasm(ptr, len)); }; diff --git a/docs/emgui_bg.wasm b/docs/emgui_bg.wasm index 526b6f0be557c388716ae36e20d1c1ae44cd4bd2..980c22b233a14d1a9b3c4a09856ca5a02663a26e 100644 GIT binary patch delta 45887 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 Self { + App { count: 0 } + } -#[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, - }, + fn show_gui(&mut self, input: &Input) -> Vec { + let rect = Rect { + pos: Vec2 { x: 100.0, y: 100.0 }, + size: Vec2 { x: 200.0, y: 200.0 }, + }; + + let is_hovering = rect.contains(&input.mouse_pos); + + vec![ + PaintCmd::Clear { + fill_style: "#44444400".to_string(), + }, + PaintCmd::Text { + fill_style: "#11ff00".to_string(), + font: "14px Palatino".to_string(), + pos: Vec2 { x: 200.0, y: 32.0 }, + text: format!( + "Mouse pos: {} {}, is_hovering: {}", + input.mouse_pos.x, input.mouse_pos.y, is_hovering + ), + text_align: TextAlign::Center, + }, + PaintCmd::Text { + fill_style: "#11ff00".to_string(), + font: "14px Palatino".to_string(), + pos: Vec2 { x: 200.0, y: 64.0 }, + text: format!("Count: {}", self.count), + text_align: TextAlign::Center, + }, + PaintCmd::RoundedRect { + fill_style: "#1111ff".to_string(), + pos: rect.pos, + corner_radius: 40.0, + size: rect.size, + }, + ] + } } #[wasm_bindgen] pub fn show_gui(input_json: &str) -> String { + lazy_static::lazy_static! { + static ref APP: Mutex = Mutex::new(App::new()); + } + + // TODO: faster interface than JSON 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, - }, - ]; + let commands = APP.lock().unwrap().show_gui(&input); serde_json::to_string(&commands).unwrap() } diff --git a/src/types.rs b/src/types.rs new file mode 100644 index 00000000..498ca99b --- /dev/null +++ b/src/types.rs @@ -0,0 +1,55 @@ +#[derive(Deserialize, Serialize)] +pub struct Vec2 { + pub x: f32, + pub y: f32, +} + +#[derive(Deserialize, Serialize)] +pub struct Rect { + pub pos: Vec2, + pub size: Vec2, +} + +impl Rect { + pub fn contains(&self, p: &Vec2) -> bool { + self.pos.x <= p.x + && p.x <= self.pos.x + self.size.x + && self.pos.y <= p.y + && p.y <= self.pos.y + self.size.y + } +} + +#[derive(Deserialize)] +pub struct Input { + pub screen_size: Vec2, + pub mouse_pos: Vec2, +} + +#[derive(Serialize)] +#[serde(rename_all = "snake_case")] +pub enum TextAlign { + Start, + Center, + End, +} + +#[derive(Serialize)] +#[serde(rename_all = "snake_case", tag = "kind")] +pub enum PaintCmd { + Clear { + fill_style: String, + }, + RoundedRect { + fill_style: String, + pos: Vec2, + size: Vec2, + corner_radius: f32, + }, + Text { + fill_style: String, + font: String, + pos: Vec2, + text: String, + text_align: TextAlign, + }, +}