Browse Source

Add some helpful wrapper around web_sys

pull/1/head
Emil Ernerfeldt 6 years ago
parent
commit
68db833a3a
  1. 2
      Cargo.lock
  2. 2
      emigui_wasm/Cargo.toml
  3. 32
      emigui_wasm/src/lib.rs
  4. 17
      example/Cargo.toml
  5. 17
      example/src/lib.rs

2
Cargo.lock

@ -113,11 +113,9 @@ version = "0.1.0"
dependencies = [
"emigui 0.1.0",
"emigui_wasm 0.1.0",
"js-sys 0.3.10 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.87 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)",
"wasm-bindgen 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
"web-sys 0.3.10 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]

2
emigui_wasm/Cargo.toml

@ -18,10 +18,12 @@ emigui = { path = "../emigui" }
[dependencies.web-sys]
version = "0.3"
features = [
'console',
'Document',
'Element',
'HtmlCanvasElement',
'Performance',
'Storage',
'WebGlBuffer',
'WebGlProgram',
'WebGlRenderingContext',

32
emigui_wasm/src/lib.rs

@ -5,3 +5,35 @@ extern crate wasm_bindgen;
extern crate emigui;
pub mod webgl;
// ----------------------------------------------------------------------------
// Helpers to hide some of the verbosity of web_sys
pub fn console_log(s: String) {
web_sys::console::log_1(&s.into());
}
pub fn now_sec() -> f64 {
web_sys::window()
.expect("should have a Window")
.performance()
.expect("should have a Performance")
.now()
/ 1000.0
}
pub fn local_storage() -> Option<web_sys::Storage> {
web_sys::window()?.local_storage().ok()?
}
pub fn local_storage_get(key: &str) -> Option<String> {
local_storage().map(|storage| storage.get_item(key).ok())??
}
pub fn local_storage_set(key: &str, value: &str) {
local_storage().map(|storage| storage.set_item(key, value));
}
pub fn local_storage_remove(key: &str) {
local_storage().map(|storage| storage.remove_item(key));
}

17
example/Cargo.toml

@ -8,26 +8,9 @@ edition = "2018"
crate-type = ["cdylib", "rlib"]
[dependencies]
js-sys = "0.3"
serde = "1"
serde_json = "1"
wasm-bindgen = "0.2"
emigui = { path = "../emigui" }
emigui_wasm = { path = "../emigui_wasm" }
[dependencies.web-sys]
version = "0.3"
features = [
'Document',
'Element',
'HtmlCanvasElement',
'Performance',
'WebGlBuffer',
'WebGlProgram',
'WebGlRenderingContext',
'WebGlShader',
'WebGlTexture',
'WebGlUniformLocation',
'Window',
]

17
example/src/lib.rs

@ -6,20 +6,15 @@ extern crate wasm_bindgen;
extern crate emigui;
extern crate emigui_wasm;
use emigui::{label, widgets::Label, Align, Emigui, RawInput};
use {
emigui::{label, widgets::Label, Align, Emigui, RawInput},
emigui_wasm::now_sec,
};
use wasm_bindgen::prelude::*;
mod app;
fn now_ms() -> f64 {
web_sys::window()
.expect("should have a Window")
.performance()
.expect("should have a Performance")
.now()
}
#[wasm_bindgen]
pub struct State {
app: app::App,
@ -39,7 +34,7 @@ impl State {
}
fn run(&mut self, raw_input: RawInput) -> Result<(), JsValue> {
let everything_start = now_ms();
let everything_start = now_sec();
self.emigui.new_frame(raw_input);
@ -60,7 +55,7 @@ impl State {
self.webgl_painter
.paint(&frame, self.emigui.texture(), raw_input.pixels_per_point);
self.everything_ms = now_ms() - everything_start;
self.everything_ms = 1000.0 * (now_sec() - everything_start);
result
}

Loading…
Cancel
Save