diff --git a/Cargo.lock b/Cargo.lock
index bc37231e..6547154a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -702,6 +702,10 @@ dependencies = [
"criterion",
"egui",
"epi",
+ "image",
+ "serde",
+ "serde_json",
+ "syntect",
]
[[package]]
@@ -758,17 +762,6 @@ dependencies = [
"version_check",
]
-[[package]]
-name = "example_web"
-version = "0.1.0"
-dependencies = [
- "eframe",
- "image",
- "serde",
- "serde_json",
- "syntect",
-]
-
[[package]]
name = "fancy-regex"
version = "0.3.5"
diff --git a/Cargo.toml b/Cargo.toml
index 68869bc4..7ef283e1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -6,7 +6,6 @@ members = [
"egui_web",
"egui",
"epi",
- "example_web",
]
[patch.crates-io]
diff --git a/build_example_web.sh b/build_example_web.sh
deleted file mode 100755
index 439890fa..00000000
--- a/build_example_web.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-set -eu
-
-CRATE_NAME="example_web"
-
-# This is required to enable the web_sys clipboard API which egui_web uses
-# https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Clipboard.html
-# https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html
-export RUSTFLAGS=--cfg=web_sys_unstable_apis
-
-# Clear output from old stuff:
-rm -f docs/${CRATE_NAME}_bg.wasm
-
-echo "Building rust…"
-BUILD=release
-cargo build --release -p ${CRATE_NAME} --lib --target wasm32-unknown-unknown
-
-echo "Generating JS bindings for wasm…"
-TARGET_NAME="${CRATE_NAME}.wasm"
-wasm-bindgen "target/wasm32-unknown-unknown/$BUILD/$TARGET_NAME" \
- --out-dir docs --no-modules --no-typescript
-
-echo "Finished: docs/${CRATE_NAME}.wasm"
-
-open http://localhost:8888/example.html
diff --git a/check.sh b/check.sh
index 50f0f260..a48e7983 100755
--- a/check.sh
+++ b/check.sh
@@ -9,7 +9,6 @@ cargo test --workspace --doc
cargo check -p egui_web --lib --target wasm32-unknown-unknown
cargo check -p egui_demo_app --lib --target wasm32-unknown-unknown
-cargo check -p example_web --lib --target wasm32-unknown-unknown
# For finding bloat:
# cargo bloat --release --bin demo_glium -n 200 | rg egui
diff --git a/docs/egui_demo_app.js b/docs/egui_demo_app.js
index 015826e2..240d9c36 100644
--- a/docs/egui_demo_app.js
+++ b/docs/egui_demo_app.js
@@ -68,6 +68,61 @@ function getInt32Memory0() {
return cachegetInt32Memory0;
}
+let WASM_VECTOR_LEN = 0;
+
+let cachedTextEncoder = new TextEncoder('utf-8');
+
+const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
+ ? function (arg, view) {
+ return cachedTextEncoder.encodeInto(arg, view);
+}
+ : function (arg, view) {
+ const buf = cachedTextEncoder.encode(arg);
+ view.set(buf);
+ return {
+ read: arg.length,
+ written: buf.length
+ };
+});
+
+function passStringToWasm0(arg, malloc, realloc) {
+
+ if (realloc === undefined) {
+ const buf = cachedTextEncoder.encode(arg);
+ const ptr = malloc(buf.length);
+ getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);
+ WASM_VECTOR_LEN = buf.length;
+ return ptr;
+ }
+
+ let len = arg.length;
+ let ptr = malloc(len);
+
+ const mem = getUint8Memory0();
+
+ let offset = 0;
+
+ for (; offset < len; offset++) {
+ const code = arg.charCodeAt(offset);
+ if (code > 0x7F) break;
+ mem[ptr + offset] = code;
+ }
+
+ if (offset !== len) {
+ if (offset !== 0) {
+ arg = arg.slice(offset);
+ }
+ ptr = realloc(ptr, len, len = offset + arg.length * 3);
+ const view = getUint8Memory0().subarray(ptr + offset, ptr + len);
+ const ret = encodeString(arg, view);
+
+ offset += ret.written;
+ }
+
+ WASM_VECTOR_LEN = offset;
+ return ptr;
+}
+
function debugString(val) {
// primitive types
const type = typeof val;
@@ -133,61 +188,6 @@ function debugString(val) {
return className;
}
-let WASM_VECTOR_LEN = 0;
-
-let cachedTextEncoder = new TextEncoder('utf-8');
-
-const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
- ? function (arg, view) {
- return cachedTextEncoder.encodeInto(arg, view);
-}
- : function (arg, view) {
- const buf = cachedTextEncoder.encode(arg);
- view.set(buf);
- return {
- read: arg.length,
- written: buf.length
- };
-});
-
-function passStringToWasm0(arg, malloc, realloc) {
-
- if (realloc === undefined) {
- const buf = cachedTextEncoder.encode(arg);
- const ptr = malloc(buf.length);
- getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);
- WASM_VECTOR_LEN = buf.length;
- return ptr;
- }
-
- let len = arg.length;
- let ptr = malloc(len);
-
- const mem = getUint8Memory0();
-
- let offset = 0;
-
- for (; offset < len; offset++) {
- const code = arg.charCodeAt(offset);
- if (code > 0x7F) break;
- mem[ptr + offset] = code;
- }
-
- if (offset !== len) {
- if (offset !== 0) {
- arg = arg.slice(offset);
- }
- ptr = realloc(ptr, len, len = offset + arg.length * 3);
- const view = getUint8Memory0().subarray(ptr + offset, ptr + len);
- const ret = encodeString(arg, view);
-
- offset += ret.written;
- }
-
- WASM_VECTOR_LEN = offset;
- return ptr;
-}
-
function makeMutClosure(arg0, arg1, dtor, f) {
const state = { a: arg0, b: arg1, cnt: 1, dtor };
const real = (...args) => {
@@ -212,35 +212,35 @@ function makeMutClosure(arg0, arg1, dtor, f) {
return real;
}
-function __wbg_adapter_24(arg0, arg1) {
+function __wbg_adapter_26(arg0, arg1) {
wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__he4adf11b347d06cc(arg0, arg1);
}
-function __wbg_adapter_27(arg0, arg1) {
+function __wbg_adapter_29(arg0, arg1) {
wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h320442d72495657f(arg0, arg1);
}
-function __wbg_adapter_30(arg0, arg1, arg2) {
- wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h350fcf1db3baf9d9(arg0, arg1, addHeapObject(arg2));
+function __wbg_adapter_32(arg0, arg1, arg2) {
+ wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h2118079e16ce18f6(arg0, arg1, addHeapObject(arg2));
}
-function __wbg_adapter_33(arg0, arg1, arg2) {
- wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h350fcf1db3baf9d9(arg0, arg1, addHeapObject(arg2));
+function __wbg_adapter_35(arg0, arg1, arg2) {
+ wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h2118079e16ce18f6(arg0, arg1, addHeapObject(arg2));
}
-function __wbg_adapter_36(arg0, arg1, arg2) {
- wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h350fcf1db3baf9d9(arg0, arg1, addHeapObject(arg2));
+function __wbg_adapter_38(arg0, arg1, arg2) {
+ wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h2118079e16ce18f6(arg0, arg1, addHeapObject(arg2));
}
-function __wbg_adapter_39(arg0, arg1, arg2) {
- wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h350fcf1db3baf9d9(arg0, arg1, addHeapObject(arg2));
+function __wbg_adapter_41(arg0, arg1, arg2) {
+ wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h2118079e16ce18f6(arg0, arg1, addHeapObject(arg2));
}
-function __wbg_adapter_42(arg0, arg1, arg2) {
- wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h350fcf1db3baf9d9(arg0, arg1, addHeapObject(arg2));
+function __wbg_adapter_44(arg0, arg1, arg2) {
+ wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h2118079e16ce18f6(arg0, arg1, addHeapObject(arg2));
}
-function __wbg_adapter_45(arg0, arg1, arg2) {
+function __wbg_adapter_47(arg0, arg1, arg2) {
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h95a2558ec93d24e8(arg0, arg1, addHeapObject(arg2));
}
@@ -377,6 +377,10 @@ async function init(input) {
var ret = getObject(arg0).requestAnimationFrame(getObject(arg1));
return ret;
});
+ imports.wbg.__wbg_fetch_f532e04b8fe49aa0 = function(arg0, arg1) {
+ var ret = getObject(arg0).fetch(getObject(arg1));
+ return addHeapObject(ret);
+ };
imports.wbg.__wbg_setInterval_a7f9e1aa48a6feb8 = handleError(function(arg0, arg1, arg2) {
var ret = getObject(arg0).setInterval(getObject(arg1), arg2);
return ret;
@@ -389,30 +393,24 @@ async function init(input) {
var ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2));
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
- imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
- var ret = getObject(arg0);
- return addHeapObject(ret);
+ imports.wbg.__wbg_clientX_3a14a1583294607f = function(arg0) {
+ var ret = getObject(arg0).clientX;
+ return ret;
};
- imports.wbg.__wbg_setProperty_46b9bd1b0fad730b = handleError(function(arg0, arg1, arg2, arg3, arg4) {
- getObject(arg0).setProperty(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
- });
- imports.wbg.__wbg_addEventListener_6a37bc32387cb66d = handleError(function(arg0, arg1, arg2, arg3) {
- getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));
- });
- imports.wbg.__wbg_getItem_400dba7536e6a1d8 = handleError(function(arg0, arg1, arg2, arg3) {
- var ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
+ imports.wbg.__wbg_clientY_4b4a322b80551002 = function(arg0) {
+ var ret = getObject(arg0).clientY;
+ return ret;
+ };
+ imports.wbg.__wbg_get_f7c7868f719f98ec = handleError(function(arg0, arg1, arg2, arg3) {
+ var ret = getObject(arg1).get(getStringFromWasm0(arg2, arg3));
var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len0 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len0;
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
});
- imports.wbg.__wbg_setItem_57767b71f09c3545 = handleError(function(arg0, arg1, arg2, arg3, arg4) {
- getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
+ imports.wbg.__wbg_set_76c6c83392bce553 = handleError(function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).set(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
});
- imports.wbg.__wbg_writeText_f3dba2a1b4785c80 = function(arg0, arg1, arg2) {
- var ret = getObject(arg0).writeText(getStringFromWasm0(arg1, arg2));
- return addHeapObject(ret);
- };
imports.wbg.__wbg_deltaX_5fac4f36a42e6ec9 = function(arg0) {
var ret = getObject(arg0).deltaX;
return ret;
@@ -421,10 +419,75 @@ async function init(input) {
var ret = getObject(arg0).deltaY;
return ret;
};
+ imports.wbg.__wbg_instanceof_Response_f52c65c389890639 = function(arg0) {
+ var ret = getObject(arg0) instanceof Response;
+ return ret;
+ };
+ imports.wbg.__wbg_url_87c62d9fe8f97de1 = function(arg0, arg1) {
+ var ret = getObject(arg1).url;
+ var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_status_f3cb2b4d20a23f59 = function(arg0) {
+ var ret = getObject(arg0).status;
+ return ret;
+ };
+ imports.wbg.__wbg_ok_c20643e0a45dc5a0 = function(arg0) {
+ var ret = getObject(arg0).ok;
+ return ret;
+ };
+ imports.wbg.__wbg_statusText_76ce672b84096caf = function(arg0, arg1) {
+ var ret = getObject(arg1).statusText;
+ var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_headers_6fafb2c7669a8ac5 = function(arg0) {
+ var ret = getObject(arg0).headers;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_arrayBuffer_0ba17dfaad804b6f = handleError(function(arg0) {
+ var ret = getObject(arg0).arrayBuffer();
+ return addHeapObject(ret);
+ });
+ imports.wbg.__wbg_writeText_f3dba2a1b4785c80 = function(arg0, arg1, arg2) {
+ var ret = getObject(arg0).writeText(getStringFromWasm0(arg1, arg2));
+ return addHeapObject(ret);
+ };
imports.wbg.__wbg_now_7628760b7b640632 = function(arg0) {
var ret = getObject(arg0).now();
return ret;
};
+ imports.wbg.__wbg_pageX_7d397506a4ad73f2 = function(arg0) {
+ var ret = getObject(arg0).pageX;
+ return ret;
+ };
+ imports.wbg.__wbg_pageY_83f6542b172abf6f = function(arg0) {
+ var ret = getObject(arg0).pageY;
+ return ret;
+ };
+ imports.wbg.__wbg_headers_5f70b64960218e2f = function(arg0) {
+ var ret = getObject(arg0).headers;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_newwithstrandinit_11debb554792e043 = handleError(function(arg0, arg1, arg2) {
+ var ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));
+ return addHeapObject(ret);
+ });
+ imports.wbg.__wbg_get_3315e8e7e59a2c40 = function(arg0, arg1) {
+ var ret = getObject(arg0)[arg1 >>> 0];
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_getData_10c8cb329803d2b8 = handleError(function(arg0, arg1, arg2, arg3) {
+ var ret = getObject(arg1).getData(getStringFromWasm0(arg2, arg3));
+ var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ });
imports.wbg.__wbg_instanceof_HtmlCanvasElement_7bd3ee7838f11fc3 = function(arg0) {
var ret = getObject(arg0) instanceof HTMLCanvasElement;
return ret;
@@ -447,25 +510,6 @@ async function init(input) {
var ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2));
return isLikeNone(ret) ? 0 : addHeapObject(ret);
});
- imports.wbg.__wbg_pageX_7d397506a4ad73f2 = function(arg0) {
- var ret = getObject(arg0).pageX;
- return ret;
- };
- imports.wbg.__wbg_pageY_83f6542b172abf6f = function(arg0) {
- var ret = getObject(arg0).pageY;
- return ret;
- };
- imports.wbg.__wbg_clipboardData_503a7e4407c6231c = function(arg0) {
- var ret = getObject(arg0).clipboardData;
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- };
- imports.wbg.__wbg_getData_10c8cb329803d2b8 = handleError(function(arg0, arg1, arg2, arg3) {
- var ret = getObject(arg1).getData(getStringFromWasm0(arg2, arg3));
- var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- getInt32Memory0()[arg0 / 4 + 1] = len0;
- getInt32Memory0()[arg0 / 4 + 0] = ptr0;
- });
imports.wbg.__wbg_keyCode_47f9e9228bc483bf = function(arg0) {
var ret = getObject(arg0).keyCode;
return ret;
@@ -497,10 +541,6 @@ async function init(input) {
getInt32Memory0()[arg0 / 4 + 1] = len0;
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
};
- imports.wbg.__wbg_get_3315e8e7e59a2c40 = function(arg0, arg1) {
- var ret = getObject(arg0)[arg1 >>> 0];
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- };
imports.wbg.__wbg_getBoundingClientRect_505844bd8eb35668 = function(arg0) {
var ret = getObject(arg0).getBoundingClientRect();
return addHeapObject(ret);
@@ -656,6 +696,30 @@ async function init(input) {
var ret = getObject(arg0).clipboard;
return addHeapObject(ret);
};
+ imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
+ var ret = getObject(arg0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_clipboardData_503a7e4407c6231c = function(arg0) {
+ var ret = getObject(arg0).clipboardData;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_getItem_400dba7536e6a1d8 = handleError(function(arg0, arg1, arg2, arg3) {
+ var ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
+ var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ });
+ imports.wbg.__wbg_setItem_57767b71f09c3545 = handleError(function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
+ });
+ imports.wbg.__wbg_setProperty_46b9bd1b0fad730b = handleError(function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).setProperty(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
+ });
+ imports.wbg.__wbg_addEventListener_6a37bc32387cb66d = handleError(function(arg0, arg1, arg2, arg3) {
+ getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));
+ });
imports.wbg.__wbg_hash_6e2c452e02822d19 = handleError(function(arg0, arg1) {
var ret = getObject(arg1).hash;
var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
@@ -663,14 +727,6 @@ async function init(input) {
getInt32Memory0()[arg0 / 4 + 1] = len0;
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
});
- imports.wbg.__wbg_clientX_3a14a1583294607f = function(arg0) {
- var ret = getObject(arg0).clientX;
- return ret;
- };
- imports.wbg.__wbg_clientY_4b4a322b80551002 = function(arg0) {
- var ret = getObject(arg0).clientY;
- return ret;
- };
imports.wbg.__wbg_call_951bd0c6d815d6f1 = handleError(function(arg0, arg1) {
var ret = getObject(arg0).call(getObject(arg1));
return addHeapObject(ret);
@@ -699,6 +755,10 @@ async function init(input) {
var ret = new Date();
return addHeapObject(ret);
};
+ imports.wbg.__wbg_new_ba07d0daa0e4677e = function() {
+ var ret = new Object();
+ return addHeapObject(ret);
+ };
imports.wbg.__wbg_resolve_6e61e640925a0db9 = function(arg0) {
var ret = Promise.resolve(getObject(arg0));
return addHeapObject(ret);
@@ -743,6 +803,13 @@ async function init(input) {
var ret = new Uint8Array(getObject(arg0));
return addHeapObject(ret);
};
+ imports.wbg.__wbg_set_b91afac9fd216d99 = function(arg0, arg1, arg2) {
+ getObject(arg0).set(getObject(arg1), arg2 >>> 0);
+ };
+ imports.wbg.__wbg_length_c645e7c02233b440 = function(arg0) {
+ var ret = getObject(arg0).length;
+ return ret;
+ };
imports.wbg.__wbg_new_2863e4d532e8dfb4 = function(arg0) {
var ret = new Float32Array(getObject(arg0));
return addHeapObject(ret);
@@ -763,12 +830,24 @@ async function init(input) {
var ret = getObject(arg0) instanceof WebAssembly.Memory;
return ret;
};
+ imports.wbg.__wbg_set_9bdd413385146137 = handleError(function(arg0, arg1, arg2) {
+ var ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));
+ return ret;
+ });
imports.wbg.__wbindgen_number_get = function(arg0, arg1) {
const obj = getObject(arg1);
var ret = typeof(obj) === 'number' ? obj : undefined;
getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
};
+ imports.wbg.__wbindgen_string_get = function(arg0, arg1) {
+ const obj = getObject(arg1);
+ var ret = typeof(obj) === 'string' ? obj : undefined;
+ var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
imports.wbg.__wbindgen_boolean_get = function(arg0) {
const v = getObject(arg0);
var ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;
@@ -791,36 +870,36 @@ async function init(input) {
var ret = wasm.memory;
return addHeapObject(ret);
};
- imports.wbg.__wbindgen_closure_wrapper633 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 110, __wbg_adapter_24);
+ imports.wbg.__wbindgen_closure_wrapper2178 = function(arg0, arg1, arg2) {
+ var ret = makeMutClosure(arg0, arg1, 536, __wbg_adapter_26);
return addHeapObject(ret);
};
- imports.wbg.__wbindgen_closure_wrapper634 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 110, __wbg_adapter_27);
+ imports.wbg.__wbindgen_closure_wrapper2179 = function(arg0, arg1, arg2) {
+ var ret = makeMutClosure(arg0, arg1, 536, __wbg_adapter_29);
return addHeapObject(ret);
};
- imports.wbg.__wbindgen_closure_wrapper637 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 110, __wbg_adapter_30);
+ imports.wbg.__wbindgen_closure_wrapper2182 = function(arg0, arg1, arg2) {
+ var ret = makeMutClosure(arg0, arg1, 536, __wbg_adapter_32);
return addHeapObject(ret);
};
- imports.wbg.__wbindgen_closure_wrapper639 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 110, __wbg_adapter_33);
+ imports.wbg.__wbindgen_closure_wrapper2184 = function(arg0, arg1, arg2) {
+ var ret = makeMutClosure(arg0, arg1, 536, __wbg_adapter_35);
return addHeapObject(ret);
};
- imports.wbg.__wbindgen_closure_wrapper641 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 110, __wbg_adapter_36);
+ imports.wbg.__wbindgen_closure_wrapper2186 = function(arg0, arg1, arg2) {
+ var ret = makeMutClosure(arg0, arg1, 536, __wbg_adapter_38);
return addHeapObject(ret);
};
- imports.wbg.__wbindgen_closure_wrapper643 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 110, __wbg_adapter_39);
+ imports.wbg.__wbindgen_closure_wrapper2188 = function(arg0, arg1, arg2) {
+ var ret = makeMutClosure(arg0, arg1, 536, __wbg_adapter_41);
return addHeapObject(ret);
};
- imports.wbg.__wbindgen_closure_wrapper645 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 110, __wbg_adapter_42);
+ imports.wbg.__wbindgen_closure_wrapper2190 = function(arg0, arg1, arg2) {
+ var ret = makeMutClosure(arg0, arg1, 536, __wbg_adapter_44);
return addHeapObject(ret);
};
- imports.wbg.__wbindgen_closure_wrapper1422 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 179, __wbg_adapter_45);
+ imports.wbg.__wbindgen_closure_wrapper3036 = function(arg0, arg1, arg2) {
+ var ret = makeMutClosure(arg0, arg1, 608, __wbg_adapter_47);
return addHeapObject(ret);
};
diff --git a/docs/egui_demo_app_bg.wasm b/docs/egui_demo_app_bg.wasm
index e68694c3..5c7a4fd5 100644
Binary files a/docs/egui_demo_app_bg.wasm and b/docs/egui_demo_app_bg.wasm differ
diff --git a/docs/example.html b/docs/example.html
index 846ba7a2..f6036e3c 100644
--- a/docs/example.html
+++ b/docs/example.html
@@ -2,74 +2,11 @@
-
-
-
- Egui Example App
-
+
-
-
-
-
-
-
-
-
-
diff --git a/docs/example_web.js b/docs/example_web.js
deleted file mode 100644
index 99f815a4..00000000
--- a/docs/example_web.js
+++ /dev/null
@@ -1,920 +0,0 @@
-let wasm_bindgen;
-(function() {
- const __exports = {};
- let wasm;
-
- const heap = new Array(32).fill(undefined);
-
- heap.push(undefined, null, true, false);
-
-function getObject(idx) { return heap[idx]; }
-
-let heap_next = heap.length;
-
-function dropObject(idx) {
- if (idx < 36) return;
- heap[idx] = heap_next;
- heap_next = idx;
-}
-
-function takeObject(idx) {
- const ret = getObject(idx);
- dropObject(idx);
- return ret;
-}
-
-let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
-
-cachedTextDecoder.decode();
-
-let cachegetUint8Memory0 = null;
-function getUint8Memory0() {
- if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {
- cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);
- }
- return cachegetUint8Memory0;
-}
-
-function getStringFromWasm0(ptr, len) {
- return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));
-}
-
-function addHeapObject(obj) {
- if (heap_next === heap.length) heap.push(heap.length + 1);
- const idx = heap_next;
- heap_next = heap[idx];
-
- heap[idx] = obj;
- return idx;
-}
-
-function isLikeNone(x) {
- return x === undefined || x === null;
-}
-
-let cachegetFloat64Memory0 = null;
-function getFloat64Memory0() {
- if (cachegetFloat64Memory0 === null || cachegetFloat64Memory0.buffer !== wasm.memory.buffer) {
- cachegetFloat64Memory0 = new Float64Array(wasm.memory.buffer);
- }
- return cachegetFloat64Memory0;
-}
-
-let cachegetInt32Memory0 = null;
-function getInt32Memory0() {
- if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {
- cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
- }
- return cachegetInt32Memory0;
-}
-
-let WASM_VECTOR_LEN = 0;
-
-let cachedTextEncoder = new TextEncoder('utf-8');
-
-const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
- ? function (arg, view) {
- return cachedTextEncoder.encodeInto(arg, view);
-}
- : function (arg, view) {
- const buf = cachedTextEncoder.encode(arg);
- view.set(buf);
- return {
- read: arg.length,
- written: buf.length
- };
-});
-
-function passStringToWasm0(arg, malloc, realloc) {
-
- if (realloc === undefined) {
- const buf = cachedTextEncoder.encode(arg);
- const ptr = malloc(buf.length);
- getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);
- WASM_VECTOR_LEN = buf.length;
- return ptr;
- }
-
- let len = arg.length;
- let ptr = malloc(len);
-
- const mem = getUint8Memory0();
-
- let offset = 0;
-
- for (; offset < len; offset++) {
- const code = arg.charCodeAt(offset);
- if (code > 0x7F) break;
- mem[ptr + offset] = code;
- }
-
- if (offset !== len) {
- if (offset !== 0) {
- arg = arg.slice(offset);
- }
- ptr = realloc(ptr, len, len = offset + arg.length * 3);
- const view = getUint8Memory0().subarray(ptr + offset, ptr + len);
- const ret = encodeString(arg, view);
-
- offset += ret.written;
- }
-
- WASM_VECTOR_LEN = offset;
- return ptr;
-}
-
-function debugString(val) {
- // primitive types
- const type = typeof val;
- if (type == 'number' || type == 'boolean' || val == null) {
- return `${val}`;
- }
- if (type == 'string') {
- return `"${val}"`;
- }
- if (type == 'symbol') {
- const description = val.description;
- if (description == null) {
- return 'Symbol';
- } else {
- return `Symbol(${description})`;
- }
- }
- if (type == 'function') {
- const name = val.name;
- if (typeof name == 'string' && name.length > 0) {
- return `Function(${name})`;
- } else {
- return 'Function';
- }
- }
- // objects
- if (Array.isArray(val)) {
- const length = val.length;
- let debug = '[';
- if (length > 0) {
- debug += debugString(val[0]);
- }
- for(let i = 1; i < length; i++) {
- debug += ', ' + debugString(val[i]);
- }
- debug += ']';
- return debug;
- }
- // Test for built-in
- const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
- let className;
- if (builtInMatches.length > 1) {
- className = builtInMatches[1];
- } else {
- // Failed to match the standard '[object ClassName]'
- return toString.call(val);
- }
- if (className == 'Object') {
- // we're a user defined class or Object
- // JSON.stringify avoids problems with cycles, and is generally much
- // easier than looping through ownProperties of `val`.
- try {
- return 'Object(' + JSON.stringify(val) + ')';
- } catch (_) {
- return 'Object';
- }
- }
- // errors
- if (val instanceof Error) {
- return `${val.name}: ${val.message}\n${val.stack}`;
- }
- // TODO we could test for more things here, like `Set`s and `Map`s.
- return className;
-}
-
-function makeMutClosure(arg0, arg1, dtor, f) {
- const state = { a: arg0, b: arg1, cnt: 1, dtor };
- const real = (...args) => {
- // First up with a closure we increment the internal reference
- // count. This ensures that the Rust closure environment won't
- // be deallocated while we're invoking it.
- state.cnt++;
- const a = state.a;
- state.a = 0;
- try {
- return f(a, state.b, ...args);
- } finally {
- if (--state.cnt === 0) {
- wasm.__wbindgen_export_2.get(state.dtor)(a, state.b);
-
- } else {
- state.a = a;
- }
- }
- };
- real.original = state;
-
- return real;
-}
-function __wbg_adapter_26(arg0, arg1) {
- wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__ha6040ef78a20dc3d(arg0, arg1);
-}
-
-function __wbg_adapter_29(arg0, arg1) {
- wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hb636d883df42a5fe(arg0, arg1);
-}
-
-function __wbg_adapter_32(arg0, arg1, arg2) {
- wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h09606316665c66a3(arg0, arg1, addHeapObject(arg2));
-}
-
-function __wbg_adapter_35(arg0, arg1, arg2) {
- wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h09606316665c66a3(arg0, arg1, addHeapObject(arg2));
-}
-
-function __wbg_adapter_38(arg0, arg1, arg2) {
- wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h09606316665c66a3(arg0, arg1, addHeapObject(arg2));
-}
-
-function __wbg_adapter_41(arg0, arg1, arg2) {
- wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h09606316665c66a3(arg0, arg1, addHeapObject(arg2));
-}
-
-function __wbg_adapter_44(arg0, arg1, arg2) {
- wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h09606316665c66a3(arg0, arg1, addHeapObject(arg2));
-}
-
-function __wbg_adapter_47(arg0, arg1, arg2) {
- wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h12005363cbd858d6(arg0, arg1, addHeapObject(arg2));
-}
-
-/**
-* This is the entry-point for all the web-assembly.
-* This is called once from the HTML.
-* It loads the app, installs some callbacks, then returns.
-* You can add more callbacks like this if you want to call in to your code.
-* @param {string} canvas_id
-*/
-__exports.start = function(canvas_id) {
- var ptr0 = passStringToWasm0(canvas_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.start(ptr0, len0);
-};
-
-function handleError(f) {
- return function () {
- try {
- return f.apply(this, arguments);
-
- } catch (e) {
- wasm.__wbindgen_exn_store(addHeapObject(e));
- }
- };
-}
-
-function getArrayU8FromWasm0(ptr, len) {
- return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);
-}
-
-async function load(module, imports) {
- if (typeof Response === 'function' && module instanceof Response) {
-
- if (typeof WebAssembly.instantiateStreaming === 'function') {
- try {
- return await WebAssembly.instantiateStreaming(module, imports);
-
- } catch (e) {
- if (module.headers.get('Content-Type') != 'application/wasm') {
- console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
-
- } else {
- throw e;
- }
- }
- }
-
- const bytes = await module.arrayBuffer();
- return await WebAssembly.instantiate(bytes, imports);
-
- } else {
-
- const instance = await WebAssembly.instantiate(module, imports);
-
- if (instance instanceof WebAssembly.Instance) {
- return { instance, module };
-
- } else {
- return instance;
- }
- }
-}
-
-async function init(input) {
- if (typeof input === 'undefined') {
- let src;
- if (typeof document === 'undefined') {
- src = location.href;
- } else {
- src = document.currentScript.src;
- }
- input = src.replace(/\.js$/, '_bg.wasm');
- }
- const imports = {};
- imports.wbg = {};
- imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
- takeObject(arg0);
- };
- imports.wbg.__wbindgen_cb_drop = function(arg0) {
- const obj = takeObject(arg0).original;
- if (obj.cnt-- == 1) {
- obj.a = 0;
- return true;
- }
- var ret = false;
- return ret;
- };
- imports.wbg.__wbindgen_string_new = function(arg0, arg1) {
- var ret = getStringFromWasm0(arg0, arg1);
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_instanceof_Window_49f532f06a9786ee = function(arg0) {
- var ret = getObject(arg0) instanceof Window;
- return ret;
- };
- imports.wbg.__wbg_document_c0366b39e4f4c89a = function(arg0) {
- var ret = getObject(arg0).document;
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- };
- imports.wbg.__wbg_location_c1e50a6e4c53d45c = function(arg0) {
- var ret = getObject(arg0).location;
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_navigator_95ba9cd684cf90aa = function(arg0) {
- var ret = getObject(arg0).navigator;
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_innerWidth_cea04a991524ea87 = handleError(function(arg0) {
- var ret = getObject(arg0).innerWidth;
- return addHeapObject(ret);
- });
- imports.wbg.__wbg_innerHeight_83651dca462998d1 = handleError(function(arg0) {
- var ret = getObject(arg0).innerHeight;
- return addHeapObject(ret);
- });
- imports.wbg.__wbg_devicePixelRatio_268c49438a600d53 = function(arg0) {
- var ret = getObject(arg0).devicePixelRatio;
- return ret;
- };
- imports.wbg.__wbg_performance_87e4f3b6f966469f = function(arg0) {
- var ret = getObject(arg0).performance;
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- };
- imports.wbg.__wbg_localStorage_a6fd83fc300473fc = handleError(function(arg0) {
- var ret = getObject(arg0).localStorage;
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- });
- imports.wbg.__wbg_open_f355af0fd051a9d8 = handleError(function(arg0, arg1, arg2, arg3, arg4) {
- var ret = getObject(arg0).open(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- });
- imports.wbg.__wbg_requestAnimationFrame_ef0e2294dc8b1088 = handleError(function(arg0, arg1) {
- var ret = getObject(arg0).requestAnimationFrame(getObject(arg1));
- return ret;
- });
- imports.wbg.__wbg_fetch_f532e04b8fe49aa0 = function(arg0, arg1) {
- var ret = getObject(arg0).fetch(getObject(arg1));
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_setInterval_a7f9e1aa48a6feb8 = handleError(function(arg0, arg1, arg2) {
- var ret = getObject(arg0).setInterval(getObject(arg1), arg2);
- return ret;
- });
- imports.wbg.__wbg_body_c8cb19d760637268 = function(arg0) {
- var ret = getObject(arg0).body;
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- };
- imports.wbg.__wbg_getElementById_15aef17a620252b4 = function(arg0, arg1, arg2) {
- var ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2));
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- };
- imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
- var ret = getObject(arg0);
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_setProperty_46b9bd1b0fad730b = handleError(function(arg0, arg1, arg2, arg3, arg4) {
- getObject(arg0).setProperty(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
- });
- imports.wbg.__wbg_addEventListener_6a37bc32387cb66d = handleError(function(arg0, arg1, arg2, arg3) {
- getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));
- });
- imports.wbg.__wbg_getItem_400dba7536e6a1d8 = handleError(function(arg0, arg1, arg2, arg3) {
- var ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
- var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- getInt32Memory0()[arg0 / 4 + 1] = len0;
- getInt32Memory0()[arg0 / 4 + 0] = ptr0;
- });
- imports.wbg.__wbg_setItem_57767b71f09c3545 = handleError(function(arg0, arg1, arg2, arg3, arg4) {
- getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
- });
- imports.wbg.__wbg_writeText_f3dba2a1b4785c80 = function(arg0, arg1, arg2) {
- var ret = getObject(arg0).writeText(getStringFromWasm0(arg1, arg2));
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_get_f7c7868f719f98ec = handleError(function(arg0, arg1, arg2, arg3) {
- var ret = getObject(arg1).get(getStringFromWasm0(arg2, arg3));
- var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- getInt32Memory0()[arg0 / 4 + 1] = len0;
- getInt32Memory0()[arg0 / 4 + 0] = ptr0;
- });
- imports.wbg.__wbg_set_76c6c83392bce553 = handleError(function(arg0, arg1, arg2, arg3, arg4) {
- getObject(arg0).set(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
- });
- imports.wbg.__wbg_deltaX_5fac4f36a42e6ec9 = function(arg0) {
- var ret = getObject(arg0).deltaX;
- return ret;
- };
- imports.wbg.__wbg_deltaY_2722120e563d3160 = function(arg0) {
- var ret = getObject(arg0).deltaY;
- return ret;
- };
- imports.wbg.__wbg_instanceof_Response_f52c65c389890639 = function(arg0) {
- var ret = getObject(arg0) instanceof Response;
- return ret;
- };
- imports.wbg.__wbg_url_87c62d9fe8f97de1 = function(arg0, arg1) {
- var ret = getObject(arg1).url;
- var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- getInt32Memory0()[arg0 / 4 + 1] = len0;
- getInt32Memory0()[arg0 / 4 + 0] = ptr0;
- };
- imports.wbg.__wbg_status_f3cb2b4d20a23f59 = function(arg0) {
- var ret = getObject(arg0).status;
- return ret;
- };
- imports.wbg.__wbg_ok_c20643e0a45dc5a0 = function(arg0) {
- var ret = getObject(arg0).ok;
- return ret;
- };
- imports.wbg.__wbg_statusText_76ce672b84096caf = function(arg0, arg1) {
- var ret = getObject(arg1).statusText;
- var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- getInt32Memory0()[arg0 / 4 + 1] = len0;
- getInt32Memory0()[arg0 / 4 + 0] = ptr0;
- };
- imports.wbg.__wbg_headers_6fafb2c7669a8ac5 = function(arg0) {
- var ret = getObject(arg0).headers;
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_arrayBuffer_0ba17dfaad804b6f = handleError(function(arg0) {
- var ret = getObject(arg0).arrayBuffer();
- return addHeapObject(ret);
- });
- imports.wbg.__wbg_now_7628760b7b640632 = function(arg0) {
- var ret = getObject(arg0).now();
- return ret;
- };
- imports.wbg.__wbg_headers_5f70b64960218e2f = function(arg0) {
- var ret = getObject(arg0).headers;
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_newwithstrandinit_11debb554792e043 = handleError(function(arg0, arg1, arg2) {
- var ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));
- return addHeapObject(ret);
- });
- imports.wbg.__wbg_instanceof_HtmlCanvasElement_7bd3ee7838f11fc3 = function(arg0) {
- var ret = getObject(arg0) instanceof HTMLCanvasElement;
- return ret;
- };
- imports.wbg.__wbg_width_0efa4604d41c58c5 = function(arg0) {
- var ret = getObject(arg0).width;
- return ret;
- };
- imports.wbg.__wbg_setwidth_1d0e975feecff3ef = function(arg0, arg1) {
- getObject(arg0).width = arg1 >>> 0;
- };
- imports.wbg.__wbg_height_aa24e3fef658c4a8 = function(arg0) {
- var ret = getObject(arg0).height;
- return ret;
- };
- imports.wbg.__wbg_setheight_7758ee3ff5c65474 = function(arg0, arg1) {
- getObject(arg0).height = arg1 >>> 0;
- };
- imports.wbg.__wbg_getContext_3db9399e6dc524ff = handleError(function(arg0, arg1, arg2) {
- var ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2));
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- });
- imports.wbg.__wbg_pageX_7d397506a4ad73f2 = function(arg0) {
- var ret = getObject(arg0).pageX;
- return ret;
- };
- imports.wbg.__wbg_pageY_83f6542b172abf6f = function(arg0) {
- var ret = getObject(arg0).pageY;
- return ret;
- };
- imports.wbg.__wbg_clipboardData_503a7e4407c6231c = function(arg0) {
- var ret = getObject(arg0).clipboardData;
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- };
- imports.wbg.__wbg_getData_10c8cb329803d2b8 = handleError(function(arg0, arg1, arg2, arg3) {
- var ret = getObject(arg1).getData(getStringFromWasm0(arg2, arg3));
- var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- getInt32Memory0()[arg0 / 4 + 1] = len0;
- getInt32Memory0()[arg0 / 4 + 0] = ptr0;
- });
- imports.wbg.__wbg_keyCode_47f9e9228bc483bf = function(arg0) {
- var ret = getObject(arg0).keyCode;
- return ret;
- };
- imports.wbg.__wbg_altKey_8a59e1cf32636010 = function(arg0) {
- var ret = getObject(arg0).altKey;
- return ret;
- };
- imports.wbg.__wbg_ctrlKey_17377b46ca5a072d = function(arg0) {
- var ret = getObject(arg0).ctrlKey;
- return ret;
- };
- imports.wbg.__wbg_shiftKey_09be9a7e6cad7a99 = function(arg0) {
- var ret = getObject(arg0).shiftKey;
- return ret;
- };
- imports.wbg.__wbg_metaKey_a707288e6c45a0e0 = function(arg0) {
- var ret = getObject(arg0).metaKey;
- return ret;
- };
- imports.wbg.__wbg_isComposing_15a35cffb04ab10f = function(arg0) {
- var ret = getObject(arg0).isComposing;
- return ret;
- };
- imports.wbg.__wbg_key_d9b602f48baca7bc = function(arg0, arg1) {
- var ret = getObject(arg1).key;
- var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- getInt32Memory0()[arg0 / 4 + 1] = len0;
- getInt32Memory0()[arg0 / 4 + 0] = ptr0;
- };
- imports.wbg.__wbg_get_3315e8e7e59a2c40 = function(arg0, arg1) {
- var ret = getObject(arg0)[arg1 >>> 0];
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- };
- imports.wbg.__wbg_getBoundingClientRect_505844bd8eb35668 = function(arg0) {
- var ret = getObject(arg0).getBoundingClientRect();
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_instanceof_WebGlRenderingContext_ef4e51c6e4133d85 = function(arg0) {
- var ret = getObject(arg0) instanceof WebGLRenderingContext;
- return ret;
- };
- imports.wbg.__wbg_bufferData_dc5899657e9f1803 = function(arg0, arg1, arg2, arg3) {
- getObject(arg0).bufferData(arg1 >>> 0, getObject(arg2), arg3 >>> 0);
- };
- imports.wbg.__wbg_texImage2D_a4011abffe0229fb = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) {
- getObject(arg0).texImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, arg9 === 0 ? undefined : getArrayU8FromWasm0(arg9, arg10));
- });
- imports.wbg.__wbg_activeTexture_a51ec6273de88bc6 = function(arg0, arg1) {
- getObject(arg0).activeTexture(arg1 >>> 0);
- };
- imports.wbg.__wbg_attachShader_0dd248f6ab98fcf2 = function(arg0, arg1, arg2) {
- getObject(arg0).attachShader(getObject(arg1), getObject(arg2));
- };
- imports.wbg.__wbg_bindBuffer_1ceb83e9674e812a = function(arg0, arg1, arg2) {
- getObject(arg0).bindBuffer(arg1 >>> 0, getObject(arg2));
- };
- imports.wbg.__wbg_bindTexture_6121e6db3f879582 = function(arg0, arg1, arg2) {
- getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2));
- };
- imports.wbg.__wbg_blendFunc_34a6bb31770822c5 = function(arg0, arg1, arg2) {
- getObject(arg0).blendFunc(arg1 >>> 0, arg2 >>> 0);
- };
- imports.wbg.__wbg_clear_f6b2dd48aeed2752 = function(arg0, arg1) {
- getObject(arg0).clear(arg1 >>> 0);
- };
- imports.wbg.__wbg_clearColor_89f7819aa9f80129 = function(arg0, arg1, arg2, arg3, arg4) {
- getObject(arg0).clearColor(arg1, arg2, arg3, arg4);
- };
- imports.wbg.__wbg_compileShader_28bdbafe4445d24b = function(arg0, arg1) {
- getObject(arg0).compileShader(getObject(arg1));
- };
- imports.wbg.__wbg_createBuffer_acedc3831832a280 = function(arg0) {
- var ret = getObject(arg0).createBuffer();
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- };
- imports.wbg.__wbg_createProgram_7e2f44b7b74694d4 = function(arg0) {
- var ret = getObject(arg0).createProgram();
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- };
- imports.wbg.__wbg_createShader_64c474f1d1d0c1f8 = function(arg0, arg1) {
- var ret = getObject(arg0).createShader(arg1 >>> 0);
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- };
- imports.wbg.__wbg_createTexture_0a156dab1efc3499 = function(arg0) {
- var ret = getObject(arg0).createTexture();
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- };
- imports.wbg.__wbg_disable_5b9c6f74d5efd3a5 = function(arg0, arg1) {
- getObject(arg0).disable(arg1 >>> 0);
- };
- imports.wbg.__wbg_drawElements_3eb5ba8a511ce0f0 = function(arg0, arg1, arg2, arg3, arg4) {
- getObject(arg0).drawElements(arg1 >>> 0, arg2, arg3 >>> 0, arg4);
- };
- imports.wbg.__wbg_enable_87f39f6396535e1f = function(arg0, arg1) {
- getObject(arg0).enable(arg1 >>> 0);
- };
- imports.wbg.__wbg_enableVertexAttribArray_f29c8dde9c8c5cf5 = function(arg0, arg1) {
- getObject(arg0).enableVertexAttribArray(arg1 >>> 0);
- };
- imports.wbg.__wbg_getAttribLocation_ba61f837da80e249 = function(arg0, arg1, arg2, arg3) {
- var ret = getObject(arg0).getAttribLocation(getObject(arg1), getStringFromWasm0(arg2, arg3));
- return ret;
- };
- imports.wbg.__wbg_getProgramInfoLog_aacf06c959070653 = function(arg0, arg1, arg2) {
- var ret = getObject(arg1).getProgramInfoLog(getObject(arg2));
- var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- getInt32Memory0()[arg0 / 4 + 1] = len0;
- getInt32Memory0()[arg0 / 4 + 0] = ptr0;
- };
- imports.wbg.__wbg_getProgramParameter_a89bf14502c109f7 = function(arg0, arg1, arg2) {
- var ret = getObject(arg0).getProgramParameter(getObject(arg1), arg2 >>> 0);
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_getShaderInfoLog_1eb885f2468e2429 = function(arg0, arg1, arg2) {
- var ret = getObject(arg1).getShaderInfoLog(getObject(arg2));
- var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- getInt32Memory0()[arg0 / 4 + 1] = len0;
- getInt32Memory0()[arg0 / 4 + 0] = ptr0;
- };
- imports.wbg.__wbg_getShaderParameter_99510442d33c6589 = function(arg0, arg1, arg2) {
- var ret = getObject(arg0).getShaderParameter(getObject(arg1), arg2 >>> 0);
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_getUniformLocation_ca853de4f2f9270d = function(arg0, arg1, arg2, arg3) {
- var ret = getObject(arg0).getUniformLocation(getObject(arg1), getStringFromWasm0(arg2, arg3));
- return isLikeNone(ret) ? 0 : addHeapObject(ret);
- };
- imports.wbg.__wbg_linkProgram_46a36cb158f10676 = function(arg0, arg1) {
- getObject(arg0).linkProgram(getObject(arg1));
- };
- imports.wbg.__wbg_scissor_59172d697cc43dc8 = function(arg0, arg1, arg2, arg3, arg4) {
- getObject(arg0).scissor(arg1, arg2, arg3, arg4);
- };
- imports.wbg.__wbg_shaderSource_700ae72fca39850d = function(arg0, arg1, arg2, arg3) {
- getObject(arg0).shaderSource(getObject(arg1), getStringFromWasm0(arg2, arg3));
- };
- imports.wbg.__wbg_texParameteri_e45f3977eb998137 = function(arg0, arg1, arg2, arg3) {
- getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3);
- };
- imports.wbg.__wbg_uniform1i_e76b668973ae0655 = function(arg0, arg1, arg2) {
- getObject(arg0).uniform1i(getObject(arg1), arg2);
- };
- imports.wbg.__wbg_uniform2f_6298542797865c61 = function(arg0, arg1, arg2, arg3) {
- getObject(arg0).uniform2f(getObject(arg1), arg2, arg3);
- };
- imports.wbg.__wbg_useProgram_d63a57db0571e803 = function(arg0, arg1) {
- getObject(arg0).useProgram(getObject(arg1));
- };
- imports.wbg.__wbg_vertexAttribPointer_b4b829a4f5a3778e = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {
- getObject(arg0).vertexAttribPointer(arg1 >>> 0, arg2, arg3 >>> 0, arg4 !== 0, arg5, arg6);
- };
- imports.wbg.__wbg_viewport_54305c74f5668b33 = function(arg0, arg1, arg2, arg3, arg4) {
- getObject(arg0).viewport(arg1, arg2, arg3, arg4);
- };
- imports.wbg.__wbg_error_e325755affc8634b = function(arg0) {
- console.error(getObject(arg0));
- };
- imports.wbg.__wbg_warn_9e92ccdc67085e1b = function(arg0) {
- console.warn(getObject(arg0));
- };
- imports.wbg.__wbg_style_9b773f0fc441eddc = function(arg0) {
- var ret = getObject(arg0).style;
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_preventDefault_9aab6c264e5df3ee = function(arg0) {
- getObject(arg0).preventDefault();
- };
- imports.wbg.__wbg_stopPropagation_697200010cec9b7e = function(arg0) {
- getObject(arg0).stopPropagation();
- };
- imports.wbg.__wbg_touches_3d22a22deb0f5409 = function(arg0) {
- var ret = getObject(arg0).touches;
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_top_80a2533bf82e7a3e = function(arg0) {
- var ret = getObject(arg0).top;
- return ret;
- };
- imports.wbg.__wbg_left_479514b443c100f4 = function(arg0) {
- var ret = getObject(arg0).left;
- return ret;
- };
- imports.wbg.__wbg_clipboard_a2f55b432ef7d0b0 = function(arg0) {
- var ret = getObject(arg0).clipboard;
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_hash_6e2c452e02822d19 = handleError(function(arg0, arg1) {
- var ret = getObject(arg1).hash;
- var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- getInt32Memory0()[arg0 / 4 + 1] = len0;
- getInt32Memory0()[arg0 / 4 + 0] = ptr0;
- });
- imports.wbg.__wbg_clientX_3a14a1583294607f = function(arg0) {
- var ret = getObject(arg0).clientX;
- return ret;
- };
- imports.wbg.__wbg_clientY_4b4a322b80551002 = function(arg0) {
- var ret = getObject(arg0).clientY;
- return ret;
- };
- imports.wbg.__wbg_call_951bd0c6d815d6f1 = handleError(function(arg0, arg1) {
- var ret = getObject(arg0).call(getObject(arg1));
- return addHeapObject(ret);
- });
- imports.wbg.__wbg_newnoargs_7c6bd521992b4022 = function(arg0, arg1) {
- var ret = new Function(getStringFromWasm0(arg0, arg1));
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_getHours_3dd5c65c39f8b9b6 = function(arg0) {
- var ret = getObject(arg0).getHours();
- return ret;
- };
- imports.wbg.__wbg_getMilliseconds_6a8f7d8a5dae61b1 = function(arg0) {
- var ret = getObject(arg0).getMilliseconds();
- return ret;
- };
- imports.wbg.__wbg_getMinutes_37175b451da6ea22 = function(arg0) {
- var ret = getObject(arg0).getMinutes();
- return ret;
- };
- imports.wbg.__wbg_getSeconds_cea5a5592039b5ba = function(arg0) {
- var ret = getObject(arg0).getSeconds();
- return ret;
- };
- imports.wbg.__wbg_new0_abd359df4aeb5b55 = function() {
- var ret = new Date();
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_new_ba07d0daa0e4677e = function() {
- var ret = new Object();
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_resolve_6e61e640925a0db9 = function(arg0) {
- var ret = Promise.resolve(getObject(arg0));
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_then_dd3785597974798a = function(arg0, arg1) {
- var ret = getObject(arg0).then(getObject(arg1));
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_then_0f957e0f4c3e537a = function(arg0, arg1, arg2) {
- var ret = getObject(arg0).then(getObject(arg1), getObject(arg2));
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_self_6baf3a3aa7b63415 = handleError(function() {
- var ret = self.self;
- return addHeapObject(ret);
- });
- imports.wbg.__wbg_window_63fc4027b66c265b = handleError(function() {
- var ret = window.window;
- return addHeapObject(ret);
- });
- imports.wbg.__wbg_globalThis_513fb247e8e4e6d2 = handleError(function() {
- var ret = globalThis.globalThis;
- return addHeapObject(ret);
- });
- imports.wbg.__wbg_global_b87245cd886d7113 = handleError(function() {
- var ret = global.global;
- return addHeapObject(ret);
- });
- imports.wbg.__wbindgen_is_undefined = function(arg0) {
- var ret = getObject(arg0) === undefined;
- return ret;
- };
- imports.wbg.__wbg_buffer_3f12a1c608c6d04e = function(arg0) {
- var ret = getObject(arg0).buffer;
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_new_b43247aed67bdcb6 = function(arg0) {
- var ret = new Int16Array(getObject(arg0));
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_new_c6c0228e6d22a2f9 = function(arg0) {
- var ret = new Uint8Array(getObject(arg0));
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_set_b91afac9fd216d99 = function(arg0, arg1, arg2) {
- getObject(arg0).set(getObject(arg1), arg2 >>> 0);
- };
- imports.wbg.__wbg_length_c645e7c02233b440 = function(arg0) {
- var ret = getObject(arg0).length;
- return ret;
- };
- imports.wbg.__wbg_new_2863e4d532e8dfb4 = function(arg0) {
- var ret = new Float32Array(getObject(arg0));
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_subarray_099195a64c29d8a3 = function(arg0, arg1, arg2) {
- var ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_subarray_02e2fcfa6b285cb2 = function(arg0, arg1, arg2) {
- var ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_subarray_f5deb93e9cb33975 = function(arg0, arg1, arg2) {
- var ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);
- return addHeapObject(ret);
- };
- imports.wbg.__wbg_instanceof_Memory_fdb0928d3f70cd49 = function(arg0) {
- var ret = getObject(arg0) instanceof WebAssembly.Memory;
- return ret;
- };
- imports.wbg.__wbg_set_9bdd413385146137 = handleError(function(arg0, arg1, arg2) {
- var ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));
- return ret;
- });
- imports.wbg.__wbindgen_number_get = function(arg0, arg1) {
- const obj = getObject(arg1);
- var ret = typeof(obj) === 'number' ? obj : undefined;
- getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;
- getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
- };
- imports.wbg.__wbindgen_string_get = function(arg0, arg1) {
- const obj = getObject(arg1);
- var ret = typeof(obj) === 'string' ? obj : undefined;
- var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- getInt32Memory0()[arg0 / 4 + 1] = len0;
- getInt32Memory0()[arg0 / 4 + 0] = ptr0;
- };
- imports.wbg.__wbindgen_boolean_get = function(arg0) {
- const v = getObject(arg0);
- var ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;
- return ret;
- };
- imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {
- var ret = debugString(getObject(arg1));
- var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- getInt32Memory0()[arg0 / 4 + 1] = len0;
- getInt32Memory0()[arg0 / 4 + 0] = ptr0;
- };
- imports.wbg.__wbindgen_throw = function(arg0, arg1) {
- throw new Error(getStringFromWasm0(arg0, arg1));
- };
- imports.wbg.__wbindgen_rethrow = function(arg0) {
- throw takeObject(arg0);
- };
- imports.wbg.__wbindgen_memory = function() {
- var ret = wasm.memory;
- return addHeapObject(ret);
- };
- imports.wbg.__wbindgen_closure_wrapper1679 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 450, __wbg_adapter_26);
- return addHeapObject(ret);
- };
- imports.wbg.__wbindgen_closure_wrapper1680 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 450, __wbg_adapter_29);
- return addHeapObject(ret);
- };
- imports.wbg.__wbindgen_closure_wrapper1682 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 450, __wbg_adapter_32);
- return addHeapObject(ret);
- };
- imports.wbg.__wbindgen_closure_wrapper1684 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 450, __wbg_adapter_35);
- return addHeapObject(ret);
- };
- imports.wbg.__wbindgen_closure_wrapper1686 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 450, __wbg_adapter_38);
- return addHeapObject(ret);
- };
- imports.wbg.__wbindgen_closure_wrapper1688 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 450, __wbg_adapter_41);
- return addHeapObject(ret);
- };
- imports.wbg.__wbindgen_closure_wrapper1691 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 450, __wbg_adapter_44);
- return addHeapObject(ret);
- };
- imports.wbg.__wbindgen_closure_wrapper2574 = function(arg0, arg1, arg2) {
- var ret = makeMutClosure(arg0, arg1, 530, __wbg_adapter_47);
- return addHeapObject(ret);
- };
-
- if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {
- input = fetch(input);
- }
-
- const { instance, module } = await load(await input, imports);
-
- wasm = instance.exports;
- init.__wbindgen_wasm_module = module;
-
- return wasm;
-}
-
-wasm_bindgen = Object.assign(init, __exports);
-
-})();
diff --git a/docs/example_web_bg.wasm b/docs/example_web_bg.wasm
deleted file mode 100644
index 2d38c8d6..00000000
Binary files a/docs/example_web_bg.wasm and /dev/null differ
diff --git a/egui_demo_app/src/lib.rs b/egui_demo_app/src/lib.rs
index 8bc38f32..b085efac 100644
--- a/egui_demo_app/src/lib.rs
+++ b/egui_demo_app/src/lib.rs
@@ -12,6 +12,6 @@ use eframe::wasm_bindgen::{self, prelude::*};
#[cfg(target_arch = "wasm32")]
#[wasm_bindgen]
pub fn start(canvas_id: &str) -> Result<(), wasm_bindgen::JsValue> {
- let app = egui_demo_lib::DemoApp::default();
+ let app = egui_demo_lib::WrapApp::default();
eframe::start_web(canvas_id, Box::new(app))
}
diff --git a/egui_demo_app/src/main.rs b/egui_demo_app/src/main.rs
index fd356713..d0eb87ce 100644
--- a/egui_demo_app/src/main.rs
+++ b/egui_demo_app/src/main.rs
@@ -4,6 +4,6 @@
// When compiling natively:
fn main() {
- let app = egui_demo_lib::DemoApp::default();
+ let app = egui_demo_lib::WrapApp::default();
eframe::run_native(Box::new(app));
}
diff --git a/egui_demo_lib/Cargo.toml b/egui_demo_lib/Cargo.toml
index 22217ee3..c9045741 100644
--- a/egui_demo_lib/Cargo.toml
+++ b/egui_demo_lib/Cargo.toml
@@ -17,6 +17,12 @@ include = [ "**/*.rs", "Cargo.toml"]
[dependencies]
egui = { version = "0.6.0", path = "../egui" }
epi = { version = "0.6.0", path = "../epi" }
+serde = "1"
+serde_json = "1"
+
+# Http fetch app:
+image = { version = "0.23", default_features = false, features = ["jpeg", "png"] }
+syntect = { version = "4", default_features = false, features = ["default-fancy"] }
[dev-dependencies]
criterion = { version = "0.3", default-features = false }
diff --git a/egui_demo_lib/src/app.rs b/egui_demo_lib/src/apps/demo/app.rs
similarity index 95%
rename from egui_demo_lib/src/app.rs
rename to egui_demo_lib/src/apps/demo/app.rs
index b3dd01f3..b20af585 100644
--- a/egui_demo_lib/src/app.rs
+++ b/egui_demo_lib/src/apps/demo/app.rs
@@ -173,21 +173,20 @@ impl FrameHistory {
///
/// Implements `epi::App` so it can be used with
/// [`egui_glium`](https://crates.io/crates/egui_glium) and [`egui_web`](https://crates.io/crates/egui_web).
-#[derive(Default)]
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
-#[cfg_attr(feature = "serde", serde(default))]
+#[derive(Default, serde::Deserialize, serde::Serialize)]
+#[serde(default)]
pub struct DemoApp {
- demo_windows: crate::DemoWindows,
+ demo_windows: super::DemoWindows,
backend_window_open: bool,
- #[cfg_attr(feature = "serde", serde(skip))] // go back to `Reactive` mode each time we start
+ #[serde(skip)] // go back to `Reactive` mode each time we start
run_mode: RunMode,
/// current slider value for current gui scale (backend demo only)
pixels_per_point: Option,
- #[cfg_attr(feature = "serde", serde(skip))]
+ #[serde(skip)]
frame_history: FrameHistory,
}
@@ -286,12 +285,10 @@ impl epi::App for DemoApp {
"Egui Demo"
}
- #[cfg(feature = "serde_json")]
fn load(&mut self, storage: &dyn epi::Storage) {
*self = epi::get_value(storage, epi::APP_KEY).unwrap_or_default()
}
- #[cfg(feature = "serde_json")]
fn save(&mut self, storage: &mut dyn epi::Storage) {
epi::set_value(storage, epi::APP_KEY, self);
}
@@ -308,12 +305,12 @@ impl epi::App for DemoApp {
.unwrap_or_default();
let link = if web_location_hash == "clock" {
- Some(crate::DemoLink::Clock)
+ Some(super::DemoLink::Clock)
} else {
None
};
- let demo_environment = crate::DemoEnvironment {
+ let demo_environment = super::DemoEnvironment {
seconds_since_midnight: frame.info().seconds_since_midnight,
link,
};
diff --git a/egui_demo_lib/src/color_test.rs b/egui_demo_lib/src/apps/demo/color_test.rs
similarity index 100%
rename from egui_demo_lib/src/color_test.rs
rename to egui_demo_lib/src/apps/demo/color_test.rs
diff --git a/egui_demo_lib/src/dancing_strings.rs b/egui_demo_lib/src/apps/demo/dancing_strings.rs
similarity index 88%
rename from egui_demo_lib/src/dancing_strings.rs
rename to egui_demo_lib/src/apps/demo/dancing_strings.rs
index 1acaa415..e879e580 100644
--- a/egui_demo_lib/src/dancing_strings.rs
+++ b/egui_demo_lib/src/apps/demo/dancing_strings.rs
@@ -1,7 +1,7 @@
use egui::{containers::*, *};
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
-#[cfg_attr(feature = "serde", serde(default))]
+#[derive(serde::Deserialize, serde::Serialize)]
+#[serde(default)]
pub struct DancingStrings {}
impl Default for DancingStrings {
@@ -10,13 +10,13 @@ impl Default for DancingStrings {
}
}
-impl crate::Demo for DancingStrings {
+impl super::Demo for DancingStrings {
fn name(&self) -> &str {
"♫ Dancing Strings"
}
fn show(&mut self, ctx: &CtxRef, open: &mut bool) {
- use crate::View;
+ use super::View;
Window::new(self.name())
.open(open)
.default_size(vec2(512.0, 256.0))
@@ -25,7 +25,7 @@ impl crate::Demo for DancingStrings {
}
}
-impl crate::View for DancingStrings {
+impl super::View for DancingStrings {
fn ui(&mut self, ui: &mut Ui) {
Frame::dark_canvas(ui.style()).show(ui, |ui| {
ui.ctx().request_repaint();
diff --git a/egui_demo_lib/src/demo_window.rs b/egui_demo_lib/src/apps/demo/demo_window.rs
similarity index 95%
rename from egui_demo_lib/src/demo_window.rs
rename to egui_demo_lib/src/apps/demo/demo_window.rs
index 68ec83e0..7e64bfb6 100644
--- a/egui_demo_lib/src/demo_window.rs
+++ b/egui_demo_lib/src/apps/demo/demo_window.rs
@@ -1,9 +1,9 @@
-use crate::*;
+use super::*;
use egui::{color::*, *};
/// Showcase some ui code
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
-#[cfg_attr(feature = "serde", serde(default))]
+#[derive(serde::Deserialize, serde::Serialize)]
+#[serde(default)]
pub struct DemoWindow {
num_columns: usize,
@@ -106,8 +106,8 @@ impl DemoWindow {
// ----------------------------------------------------------------------------
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
-#[cfg_attr(feature = "serde", serde(default))]
+#[derive(serde::Deserialize, serde::Serialize)]
+#[serde(default)]
struct ColorWidgets {
srgba_unmul: [u8; 4],
srgba_premul: [u8; 4],
@@ -178,8 +178,8 @@ impl ColorWidgets {
// ----------------------------------------------------------------------------
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
-#[cfg_attr(feature = "serde", serde(default))]
+#[derive(serde::Deserialize, serde::Serialize)]
+#[serde(default)]
struct BoxPainting {
size: Vec2,
corner_radius: f32,
@@ -222,8 +222,8 @@ impl BoxPainting {
// ----------------------------------------------------------------------------
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
-#[cfg_attr(feature = "serde", serde(default))]
+#[derive(serde::Deserialize, serde::Serialize)]
+#[serde(default)]
struct LayoutDemo {
// Identical to contents of `egui::Layout`
main_dir: Direction,
@@ -365,8 +365,7 @@ enum Action {
Delete,
}
-#[derive(Clone, Default)]
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
+#[derive(Clone, Default, serde::Deserialize, serde::Serialize)]
struct Tree(Vec);
impl Tree {
diff --git a/egui_demo_lib/src/demo_windows.rs b/egui_demo_lib/src/apps/demo/demo_windows.rs
similarity index 90%
rename from egui_demo_lib/src/demo_windows.rs
rename to egui_demo_lib/src/apps/demo/demo_windows.rs
index 4416d5f2..02b1b2e3 100644
--- a/egui_demo_lib/src/demo_windows.rs
+++ b/egui_demo_lib/src/apps/demo/demo_windows.rs
@@ -20,22 +20,22 @@ pub struct DemoEnvironment {
// ----------------------------------------------------------------------------
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
-#[cfg_attr(feature = "serde", serde(default))]
+#[derive(serde::Deserialize, serde::Serialize)]
+#[serde(default)]
struct Demos {
/// open, view
- #[cfg_attr(feature = "serde", serde(skip))] // TODO: serialize the `open` state.
- demos: Vec<(bool, Box)>,
+ #[serde(skip)] // TODO: serialize the `open` state.
+ demos: Vec<(bool, Box)>,
}
impl Default for Demos {
fn default() -> Self {
Self {
demos: vec![
- (false, Box::new(crate::FontBook::default())),
- (false, Box::new(crate::Painting::default())),
- (false, Box::new(crate::DancingStrings::default())),
- (false, Box::new(crate::DragAndDropDemo::default())),
- (false, Box::new(crate::Tests::default())),
+ (false, Box::new(super::FontBook::default())),
+ (false, Box::new(super::Painting::default())),
+ (false, Box::new(super::DancingStrings::default())),
+ (false, Box::new(super::DragAndDropDemo::default())),
+ (false, Box::new(super::Tests::default())),
],
}
}
@@ -57,23 +57,22 @@ impl Demos {
// ----------------------------------------------------------------------------
/// A menu bar in which you can select different demo windows to show.
-#[derive(Default)]
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
-#[cfg_attr(feature = "serde", serde(default))]
+#[derive(Default, serde::Deserialize, serde::Serialize)]
+#[serde(default)]
pub struct DemoWindows {
open_windows: OpenWindows,
- demo_window: crate::DemoWindow,
+ demo_window: super::DemoWindow,
- #[cfg_attr(feature = "serde", serde(skip))]
- color_test: crate::ColorTest,
+ #[serde(skip)]
+ color_test: super::ColorTest,
- fractal_clock: crate::FractalClock,
+ fractal_clock: super::FractalClock,
/// open, title, view
demos: Demos,
- #[cfg_attr(feature = "serde", serde(skip))]
+ #[serde(skip)]
previous_link: Option,
}
@@ -257,7 +256,7 @@ impl DemoWindows {
// ----------------------------------------------------------------------------
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
+#[derive(serde::Deserialize, serde::Serialize)]
struct OpenWindows {
demo: bool,
fractal_clock: bool,
diff --git a/egui_demo_lib/src/drag_and_drop.rs b/egui_demo_lib/src/apps/demo/drag_and_drop.rs
similarity index 98%
rename from egui_demo_lib/src/drag_and_drop.rs
rename to egui_demo_lib/src/apps/demo/drag_and_drop.rs
index c3c85692..c58dfd37 100644
--- a/egui_demo_lib/src/drag_and_drop.rs
+++ b/egui_demo_lib/src/apps/demo/drag_and_drop.rs
@@ -89,13 +89,13 @@ impl Default for DragAndDropDemo {
}
}
-impl crate::Demo for DragAndDropDemo {
+impl super::Demo for DragAndDropDemo {
fn name(&self) -> &str {
"✋ Drag and Drop"
}
fn show(&mut self, ctx: &CtxRef, open: &mut bool) {
- use crate::View;
+ use super::View;
Window::new(self.name())
.open(open)
.default_size(vec2(256.0, 256.0))
@@ -105,7 +105,7 @@ impl crate::Demo for DragAndDropDemo {
}
}
-impl crate::View for DragAndDropDemo {
+impl super::View for DragAndDropDemo {
fn ui(&mut self, ui: &mut Ui) {
ui.label("This is a proof-of-concept of drag-and-drop in Egui");
ui.label("Drag items between columns.");
diff --git a/egui_demo_lib/src/font_book.rs b/egui_demo_lib/src/apps/demo/font_book.rs
similarity index 93%
rename from egui_demo_lib/src/font_book.rs
rename to egui_demo_lib/src/apps/demo/font_book.rs
index f92c0174..6d63c96b 100644
--- a/egui_demo_lib/src/font_book.rs
+++ b/egui_demo_lib/src/apps/demo/font_book.rs
@@ -39,23 +39,23 @@ impl FontBook {
}
}
-impl crate::Demo for FontBook {
+impl super::Demo for FontBook {
fn name(&self) -> &str {
"🔤 Font Book"
}
fn show(&mut self, ctx: &egui::CtxRef, open: &mut bool) {
egui::Window::new(self.name()).open(open).show(ctx, |ui| {
- use crate::View;
+ use super::View;
self.ui(ui);
});
}
}
-impl crate::View for FontBook {
+impl super::View for FontBook {
fn ui(&mut self, ui: &mut egui::Ui) {
- use crate::font_contents_emoji::FULL_EMOJI_LIST;
- use crate::font_contents_ubuntu::UBUNTU_FONT_CHARACTERS;
+ use super::font_contents_emoji::FULL_EMOJI_LIST;
+ use super::font_contents_ubuntu::UBUNTU_FONT_CHARACTERS;
ui.label(format!(
"Egui supports {} standard characters and {} emojis.\nClick on a character to copy it.",
diff --git a/egui_demo_lib/src/font_contents_emoji.rs b/egui_demo_lib/src/apps/demo/font_contents_emoji.rs
similarity index 99%
rename from egui_demo_lib/src/font_contents_emoji.rs
rename to egui_demo_lib/src/apps/demo/font_contents_emoji.rs
index 07bfd0fb..4ca68916 100644
--- a/egui_demo_lib/src/font_contents_emoji.rs
+++ b/egui_demo_lib/src/apps/demo/font_contents_emoji.rs
@@ -2,6 +2,7 @@
///
/// Also viewable at
/// Source:
+#[allow(unused)]
#[rustfmt::skip]
pub const EMOJI_ICON_FONT_LIST: &[(u32, char, &str)] = &[
(0xA9, '©', "copyright"),
@@ -652,6 +653,7 @@ pub const EMOJI_ICON_FONT_LIST: &[(u32, char, &str)] = &[
(0x1F6E1, '🛡', "shield"),
];
+#[allow(unused)]
#[rustfmt::skip]
pub const NOTO_EMOJI_LIST: &[(u32, char, &str)] = &[
(0xA9, '©', "copyright sign"),
diff --git a/egui_demo_lib/src/font_contents_ubuntu.rs b/egui_demo_lib/src/apps/demo/font_contents_ubuntu.rs
similarity index 100%
rename from egui_demo_lib/src/font_contents_ubuntu.rs
rename to egui_demo_lib/src/apps/demo/font_contents_ubuntu.rs
diff --git a/egui_demo_lib/src/fractal_clock.rs b/egui_demo_lib/src/apps/demo/fractal_clock.rs
similarity index 98%
rename from egui_demo_lib/src/fractal_clock.rs
rename to egui_demo_lib/src/apps/demo/fractal_clock.rs
index dd4e20f6..d1772501 100644
--- a/egui_demo_lib/src/fractal_clock.rs
+++ b/egui_demo_lib/src/apps/demo/fractal_clock.rs
@@ -1,8 +1,8 @@
use egui::{containers::*, widgets::*, *};
use std::f32::consts::TAU;
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
-#[cfg_attr(feature = "serde", serde(default))]
+#[derive(serde::Deserialize, serde::Serialize)]
+#[serde(default)]
pub struct FractalClock {
paused: bool,
time: f64,
diff --git a/egui_demo_lib/src/apps/demo/mod.rs b/egui_demo_lib/src/apps/demo/mod.rs
new file mode 100644
index 00000000..bdcb2367
--- /dev/null
+++ b/egui_demo_lib/src/apps/demo/mod.rs
@@ -0,0 +1,43 @@
+//! Demo-code for showing how Egui is used.
+//!
+//! The demo-code is also used in benchmarks and tests.
+
+// ----------------------------------------------------------------------------
+
+mod app;
+mod color_test;
+mod dancing_strings;
+pub mod demo_window;
+mod demo_windows;
+mod drag_and_drop;
+mod font_book;
+pub mod font_contents_emoji;
+pub mod font_contents_ubuntu;
+mod fractal_clock;
+mod painting;
+mod scrolls;
+mod sliders;
+mod tests;
+pub mod toggle_switch;
+mod widgets;
+
+pub use {
+ app::*, color_test::ColorTest, dancing_strings::DancingStrings, demo_window::DemoWindow,
+ demo_windows::*, drag_and_drop::*, font_book::FontBook, fractal_clock::FractalClock,
+ painting::Painting, scrolls::Scrolls, sliders::Sliders, tests::Tests, widgets::Widgets,
+};
+
+// ----------------------------------------------------------------------------
+
+/// Something to view in the demo windows
+pub trait View {
+ fn ui(&mut self, ui: &mut egui::Ui);
+}
+
+/// Something to view
+pub trait Demo {
+ fn name(&self) -> &str;
+
+ /// Show windows, etc
+ fn show(&mut self, ctx: &egui::CtxRef, open: &mut bool);
+}
diff --git a/egui_demo_lib/src/painting.rs b/egui_demo_lib/src/apps/demo/painting.rs
similarity index 91%
rename from egui_demo_lib/src/painting.rs
rename to egui_demo_lib/src/apps/demo/painting.rs
index 949b0648..8543a29a 100644
--- a/egui_demo_lib/src/painting.rs
+++ b/egui_demo_lib/src/apps/demo/painting.rs
@@ -1,8 +1,7 @@
-use crate::*;
use egui::*;
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
-#[cfg_attr(feature = "serde", serde(default))]
+#[derive(serde::Deserialize, serde::Serialize)]
+#[serde(default)]
pub struct Painting {
lines: Vec>,
stroke: Stroke,
@@ -59,12 +58,13 @@ impl Painting {
}
}
-impl crate::Demo for Painting {
+impl super::Demo for Painting {
fn name(&self) -> &str {
"🖊 Painting"
}
fn show(&mut self, ctx: &CtxRef, open: &mut bool) {
+ use super::View;
Window::new(self.name())
.open(open)
.default_size(vec2(512.0, 512.0))
@@ -73,7 +73,7 @@ impl crate::Demo for Painting {
}
}
-impl crate::View for Painting {
+impl super::View for Painting {
fn ui(&mut self, ui: &mut Ui) {
ui.add(crate::__egui_github_link_file!("(source code)"));
self.ui_control(ui);
diff --git a/egui_demo_lib/src/scrolls.rs b/egui_demo_lib/src/apps/demo/scrolls.rs
similarity index 92%
rename from egui_demo_lib/src/scrolls.rs
rename to egui_demo_lib/src/apps/demo/scrolls.rs
index 819118b8..bf004275 100644
--- a/egui_demo_lib/src/scrolls.rs
+++ b/egui_demo_lib/src/apps/demo/scrolls.rs
@@ -1,8 +1,7 @@
-use crate::LOREM_IPSUM_LONG;
use egui::{color::*, *};
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
-#[cfg_attr(feature = "serde", serde(default))]
+#[derive(serde::Deserialize, serde::Serialize)]
+#[serde(default)]
pub struct Scrolls {
track_item: usize,
tracking: bool,
@@ -22,8 +21,8 @@ impl Default for Scrolls {
impl Scrolls {
pub fn ui(&mut self, ui: &mut Ui) {
ScrollArea::from_max_height(200.0).show(ui, |ui| {
- ui.label(LOREM_IPSUM_LONG);
- ui.label(LOREM_IPSUM_LONG);
+ ui.label(crate::LOREM_IPSUM_LONG);
+ ui.label(crate::LOREM_IPSUM_LONG);
});
ui.separator();
diff --git a/egui_demo_lib/src/sliders.rs b/egui_demo_lib/src/apps/demo/sliders.rs
similarity index 96%
rename from egui_demo_lib/src/sliders.rs
rename to egui_demo_lib/src/apps/demo/sliders.rs
index ea651054..3cb5eec8 100644
--- a/egui_demo_lib/src/sliders.rs
+++ b/egui_demo_lib/src/apps/demo/sliders.rs
@@ -2,8 +2,8 @@ use egui::*;
use std::f64::INFINITY;
/// Showcase sliders
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
-#[cfg_attr(feature = "serde", serde(default))]
+#[derive(serde::Deserialize, serde::Serialize)]
+#[serde(default)]
pub struct Sliders {
pub min: f64,
pub max: f64,
diff --git a/egui_demo_lib/src/tests.rs b/egui_demo_lib/src/apps/demo/tests.rs
similarity index 95%
rename from egui_demo_lib/src/tests.rs
rename to egui_demo_lib/src/apps/demo/tests.rs
index aa85c2bd..f17f1582 100644
--- a/egui_demo_lib/src/tests.rs
+++ b/egui_demo_lib/src/apps/demo/tests.rs
@@ -1,20 +1,20 @@
#[derive(Default)]
pub struct Tests {}
-impl crate::Demo for Tests {
+impl super::Demo for Tests {
fn name(&self) -> &str {
"📋 Tests"
}
fn show(&mut self, ctx: &egui::CtxRef, open: &mut bool) {
egui::Window::new(self.name()).open(open).show(ctx, |ui| {
- use crate::View;
+ use super::View;
self.ui(ui);
});
}
}
-impl crate::View for Tests {
+impl super::View for Tests {
fn ui(&mut self, ui: &mut egui::Ui) {
ui.heading("Name collision example");
diff --git a/egui_demo_lib/src/toggle_switch.rs b/egui_demo_lib/src/apps/demo/toggle_switch.rs
similarity index 100%
rename from egui_demo_lib/src/toggle_switch.rs
rename to egui_demo_lib/src/apps/demo/toggle_switch.rs
diff --git a/egui_demo_lib/src/widgets.rs b/egui_demo_lib/src/apps/demo/widgets.rs
similarity index 94%
rename from egui_demo_lib/src/widgets.rs
rename to egui_demo_lib/src/apps/demo/widgets.rs
index 89715e66..6f71cc22 100644
--- a/egui_demo_lib/src/widgets.rs
+++ b/egui_demo_lib/src/apps/demo/widgets.rs
@@ -1,7 +1,6 @@
use egui::{color::*, *};
-#[derive(Debug, PartialEq)]
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
+#[derive(Debug, PartialEq, serde::Deserialize, serde::Serialize)]
enum Enum {
First,
Second,
@@ -14,13 +13,13 @@ impl Default for Enum {
}
}
-#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
-#[cfg_attr(feature = "serde", serde(default))]
+#[derive(serde::Deserialize, serde::Serialize)]
+#[serde(default)]
pub struct Widgets {
button_enabled: bool,
count: usize,
radio: Enum,
- sliders: crate::Sliders,
+ sliders: super::Sliders,
angle: f32,
color: Srgba,
single_line_text_input: String,
@@ -154,6 +153,6 @@ impl Widgets {
ui.text_edit_multiline(&mut self.multiline_text_input);
ui.separator();
- crate::toggle_switch::demo(ui, &mut self.toggle_switch);
+ super::toggle_switch::demo(ui, &mut self.toggle_switch);
}
}
diff --git a/example_web/src/example_app.rs b/egui_demo_lib/src/apps/http_app.rs
similarity index 95%
rename from example_web/src/example_app.rs
rename to egui_demo_lib/src/apps/http_app.rs
index 2dd0a42a..547c16c7 100644
--- a/example_web/src/example_app.rs
+++ b/egui_demo_lib/src/apps/http_app.rs
@@ -1,4 +1,3 @@
-use eframe::{egui, epi};
use epi::http::Response;
use std::sync::mpsc::Receiver;
@@ -31,14 +30,21 @@ impl Resource {
}
}
-pub struct ExampleApp {
+#[derive(serde::Deserialize, serde::Serialize)]
+pub struct HttpApp {
url: String,
+
+ #[serde(skip)]
in_progress: Option>>,
+
+ #[serde(skip)]
result: Option>,
+
+ #[serde(skip)]
tex_mngr: TexMngr,
}
-impl Default for ExampleApp {
+impl Default for HttpApp {
fn default() -> Self {
Self {
url: "https://raw.githubusercontent.com/emilk/egui/master/README.md".to_owned(),
@@ -49,9 +55,9 @@ impl Default for ExampleApp {
}
}
-impl epi::App for ExampleApp {
+impl epi::App for HttpApp {
fn name(&self) -> &str {
- "Egui Fetch Example"
+ "HTTP Fetch"
}
/// Called each time the UI needs repainting, which may be many times per second.
@@ -171,7 +177,7 @@ fn ui_resouce(
egui::ScrollArea::auto_sized().show(ui, |ui| {
if let Some(image) = image {
- if let Some(texture_id) = tex_mngr.texture(frame, &response.url, &image) {
+ if let Some(texture_id) = tex_mngr.texture(frame, &response.url, image) {
let size = egui::Vec2::new(image.size.0 as f32, image.size.1 as f32);
ui.image(texture_id, size);
}
@@ -199,7 +205,7 @@ fn syntax_highlighting(response: &Response) -> Option {
struct ColoredText(Vec>);
impl ColoredText {
- /// e.g. `text_with_extension("fn foo() {}", "rs")
+ /// e.g. `text_with_extension("fn foo() {}", "rs")`
pub fn text_with_extension(text: &str, extension: &str) -> Option {
use syntect::easy::HighlightLines;
use syntect::highlighting::ThemeSet;
@@ -213,7 +219,7 @@ impl ColoredText {
let mut h = HighlightLines::new(syntax, &ts.themes["base16-mocha.dark"]);
- let lines = LinesWithEndings::from(&text)
+ let lines = LinesWithEndings::from(text)
.map(|line| {
h.highlight(line, &ps)
.into_iter()
@@ -275,7 +281,7 @@ struct Image {
impl Image {
fn decode(bytes: &[u8]) -> Option {
use image::GenericImageView;
- let image = image::load_from_memory(&bytes).ok()?;
+ let image = image::load_from_memory(bytes).ok()?;
let image_buffer = image.to_rgba8();
let size = (image.width() as usize, image.height() as usize);
let pixels = image_buffer.into_vec();
diff --git a/egui_demo_lib/src/apps/mod.rs b/egui_demo_lib/src/apps/mod.rs
new file mode 100644
index 00000000..d11e7369
--- /dev/null
+++ b/egui_demo_lib/src/apps/mod.rs
@@ -0,0 +1,7 @@
+mod demo;
+mod http_app;
+
+pub use demo::DemoApp;
+pub use http_app::HttpApp;
+
+pub use demo::DemoWindows; // used for tests
diff --git a/egui_demo_lib/src/lib.rs b/egui_demo_lib/src/lib.rs
index 4dbd0e20..d59443a0 100644
--- a/egui_demo_lib/src/lib.rs
+++ b/egui_demo_lib/src/lib.rs
@@ -45,51 +45,11 @@
unused_doc_comments,
)]
-// ----------------------------------------------------------------------------
+mod apps;
+mod wrap_app;
-mod app;
-mod color_test;
-mod dancing_strings;
-pub mod demo_window;
-mod demo_windows;
-mod drag_and_drop;
-mod font_book;
-pub mod font_contents_emoji;
-pub mod font_contents_ubuntu;
-mod fractal_clock;
-mod painting;
-mod scrolls;
-mod sliders;
-mod tests;
-pub mod toggle_switch;
-mod widgets;
-
-pub use {
- app::*, color_test::ColorTest, dancing_strings::DancingStrings, demo_window::DemoWindow,
- demo_windows::*, drag_and_drop::*, font_book::FontBook, fractal_clock::FractalClock,
- painting::Painting, scrolls::Scrolls, sliders::Sliders, tests::Tests, widgets::Widgets,
-};
-
-pub const LOREM_IPSUM: &str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
-
-pub const LOREM_IPSUM_LONG: &str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-
-Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque. Aliquam faucibus, elit ut dictum aliquet, felis nisl adipiscing sapien, sed malesuada diam lacus eget erat. Cras mollis scelerisque nunc. Nullam arcu. Aliquam consequat. Curabitur augue lorem, dapibus quis, laoreet et, pretium ac, nisi. Aenean magna nisl, mollis quis, molestie eu, feugiat in, orci. In hac habitasse platea dictumst.";
-
-// ----------------------------------------------------------------------------
-
-/// Something to view in the demo windows
-pub trait View {
- fn ui(&mut self, ui: &mut egui::Ui);
-}
-
-/// Something to view
-pub trait Demo {
- fn name(&self) -> &str;
-
- /// Show windows, etc
- fn show(&mut self, ctx: &egui::CtxRef, open: &mut bool);
-}
+pub use apps::DemoWindows; // used for tests
+pub use wrap_app::WrapApp;
// ----------------------------------------------------------------------------
@@ -119,6 +79,14 @@ macro_rules! __egui_github_link_file_line {
// ----------------------------------------------------------------------------
+pub const LOREM_IPSUM: &str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
+
+pub const LOREM_IPSUM_LONG: &str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+
+Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque. Aliquam faucibus, elit ut dictum aliquet, felis nisl adipiscing sapien, sed malesuada diam lacus eget erat. Cras mollis scelerisque nunc. Nullam arcu. Aliquam consequat. Curabitur augue lorem, dapibus quis, laoreet et, pretium ac, nisi. Aenean magna nisl, mollis quis, molestie eu, feugiat in, orci. In hac habitasse platea dictumst.";
+
+// ----------------------------------------------------------------------------
+
#[test]
fn test_egui_e2e() {
let mut demo_windows = crate::DemoWindows::default();
diff --git a/egui_demo_lib/src/wrap_app.rs b/egui_demo_lib/src/wrap_app.rs
new file mode 100644
index 00000000..902bf342
--- /dev/null
+++ b/egui_demo_lib/src/wrap_app.rs
@@ -0,0 +1,67 @@
+/// Wraps many demo/test apps into one
+#[derive(Default, serde::Deserialize, serde::Serialize)]
+#[serde(default)]
+pub struct WrapApp {
+ selectable_demo_name: String,
+
+ demo: crate::apps::DemoApp,
+ http: crate::apps::HttpApp,
+}
+
+impl epi::App for WrapApp {
+ fn name(&self) -> &str {
+ "Egui Demo Apps"
+ }
+
+ fn load(&mut self, storage: &dyn epi::Storage) {
+ *self = epi::get_value(storage, epi::APP_KEY).unwrap_or_default()
+ }
+
+ fn save(&mut self, storage: &mut dyn epi::Storage) {
+ epi::set_value(storage, epi::APP_KEY, self);
+ }
+
+ fn ui(&mut self, ctx: &egui::CtxRef, frame: &mut epi::Frame<'_>) {
+ let web_location_hash = frame
+ .info()
+ .web_info
+ .as_ref()
+ .map(|info| info.web_location_hash.clone())
+ .unwrap_or_default();
+
+ if web_location_hash == "#clock" {
+ // TODO
+ } else if web_location_hash == "#http" {
+ self.selectable_demo_name = self.http.name().to_owned();
+ }
+
+ egui::TopPanel::top("wrap_app").show(ctx, |ui| {
+ ui.horizontal(|ui| {
+ ui.label(format!("web_location_hash: {:?}", web_location_hash));
+ ui.label("Demo Apps:");
+ ui.selectable_value(
+ &mut self.selectable_demo_name,
+ self.demo.name().to_owned(),
+ self.demo.name(),
+ );
+ ui.selectable_value(
+ &mut self.selectable_demo_name,
+ self.http.name().to_owned(),
+ self.http.name(),
+ );
+
+ ui.with_layout(egui::Layout::right_to_left(), |ui| {
+ egui::warn_if_debug_build(ui);
+ });
+ });
+ });
+
+ if self.selectable_demo_name == self.demo.name() {
+ self.demo.ui(ctx, frame);
+ } else if self.selectable_demo_name == self.http.name() {
+ self.http.ui(ctx, frame);
+ } else {
+ self.selectable_demo_name = self.demo.name().to_owned();
+ }
+ }
+}
diff --git a/epi/src/lib.rs b/epi/src/lib.rs
index 5ffb349f..0bf22100 100644
--- a/epi/src/lib.rs
+++ b/epi/src/lib.rs
@@ -157,7 +157,8 @@ impl<'a> Frame<'a> {
/// Information about the web environment
#[derive(Clone, Debug)]
pub struct WebInfo {
- /// e.g. "#fragment" part of "www.example.com/index.html#fragment"
+ /// e.g. "#fragment" part of "www.example.com/index.html#fragment".
+ /// Note that the leading `#` is included in the string.
pub web_location_hash: String,
}
@@ -242,7 +243,7 @@ pub fn get_value(storage: &dyn Storage, key: &st
/// Serialize the given value as JSON and store with the given key.
#[cfg(feature = "serde_json")]
pub fn set_value(storage: &mut dyn Storage, key: &str, value: &T) {
- storage.set_string(key, serde_json::to_string(value).unwrap());
+ storage.set_string(key, serde_json::to_string_pretty(value).unwrap());
}
/// [`Storage`] key used for app
diff --git a/example_web/Cargo.toml b/example_web/Cargo.toml
deleted file mode 100644
index 6d4bc795..00000000
--- a/example_web/Cargo.toml
+++ /dev/null
@@ -1,16 +0,0 @@
-[package]
-name = "example_web"
-version = "0.1.0"
-authors = ["Emil Ernerfeldt "]
-license = "MIT OR Apache-2.0"
-edition = "2018"
-
-[lib]
-crate-type = ["cdylib", "rlib"]
-
-[dependencies]
-eframe = { path = "../eframe" }
-image = { version = "0.23", default_features = false, features = ["jpeg", "png"] }
-serde = { version = "1", features = ["derive"] }
-serde_json = "1"
-syntect = { version = "4", default_features = false, features = ["default-fancy"] }
diff --git a/example_web/README.md b/example_web/README.md
deleted file mode 100644
index bfb6ffea..00000000
--- a/example_web/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# egui_web fetch example
-
-This is an example of how to write a web-app which use the fetch API.
diff --git a/example_web/src/lib.rs b/example_web/src/lib.rs
deleted file mode 100644
index c89d1bc8..00000000
--- a/example_web/src/lib.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-#![forbid(unsafe_code)]
-#![cfg_attr(not(debug_assertions), deny(warnings))] // Forbid warnings in release builds
-#![warn(clippy::all)]
-
-mod example_app;
-pub use example_app::ExampleApp;
-
-#[cfg(target_arch = "wasm32")]
-use eframe::wasm_bindgen::{self, prelude::*};
-
-/// This is the entry-point for all the web-assembly.
-/// This is called once from the HTML.
-/// It loads the app, installs some callbacks, then returns.
-/// You can add more callbacks like this if you want to call in to your code.
-#[cfg(target_arch = "wasm32")]
-#[wasm_bindgen]
-pub fn start(canvas_id: &str) -> Result<(), wasm_bindgen::JsValue> {
- let app = example_app::ExampleApp::default();
- eframe::start_web(canvas_id, Box::new(app))
-}
diff --git a/example_web/src/main.rs b/example_web/src/main.rs
deleted file mode 100644
index 6dad1db9..00000000
--- a/example_web/src/main.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-#![forbid(unsafe_code)]
-#![cfg_attr(not(debug_assertions), deny(warnings))] // Forbid warnings in release builds
-#![warn(clippy::all)]
-
-// When compiling natively:
-fn main() {
- let app = example_web::ExampleApp::default();
- eframe::run_native(Box::new(app));
-}