Add some helpful wrapper around web_sys

This commit is contained in:
Emil Ernerfeldt 2019-02-11 20:27:32 +01:00
parent eb589757a8
commit 68db833a3a
5 changed files with 40 additions and 30 deletions

2
Cargo.lock generated
View file

@ -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]]

View file

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

View file

@ -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));
}

View file

@ -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',
]

View file

@ -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
}