summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitya Selivanov <automainint@guattari.tech>2025-01-18 12:03:37 +0100
committerMitya Selivanov <automainint@guattari.tech>2025-01-18 12:03:37 +0100
commit23edbfe1d413e3d6a6fa58a987f693729bc72eaf (patch)
tree3382ce019084782c48bdf2ff4d1eda383ea69745
parent217863fac7f0ba1b47745e19a5bed2f3bc55a0cc (diff)
downloadstatic-23edbfe1d413e3d6a6fa58a987f693729bc72eaf.zip
Update Julia Set
-rw-r--r--juliaset/index.htm160
-rwxr-xr-xjuliaset/julia_set.wasmbin6912 -> 9938 bytes
2 files changed, 132 insertions, 28 deletions
diff --git a/juliaset/index.htm b/juliaset/index.htm
index 47d2a69..130e619 100644
--- a/juliaset/index.htm
+++ b/juliaset/index.htm
@@ -47,6 +47,7 @@
floor : Math.floor,
ceil : Math.ceil,
+ trunc : Math.trunc,
sqrt : Math.sqrt,
cbrt : Math.cbrt,
pow : Math.pow,
@@ -75,7 +76,14 @@
this.sound_buffer_address = program.exports.js_sound_buffer();
this.pixels_address = program.exports.js_pixels();
- this.frames = new Float32Array(this.memory_buffer, this.sound_buffer_address, program.exports.js_max_num_sound_frames());
+ this.max_drop_size = program.exports.js_max_drop_size();
+ this.drop_address = program.exports.js_drop_buffer();
+
+ this.frames = new Float32Array(
+ this.memory_buffer,
+ this.sound_buffer_address,
+ program.exports.js_max_num_sound_frames()
+ );
let title_address = program.exports.js_title();
@@ -159,6 +167,50 @@
this.program.exports.js_keydown(ev.key, ev.mod, ev.ch);
},
+
+ dragenter : (ev) => {
+ if (this.program === undefined)
+ return;
+
+ this.program.exports.js_dragenter();
+ },
+
+ dragleave : (ev) => {
+ if (this.program === undefined)
+ return;
+
+ this.program.exports.js_dragenter();
+ },
+
+ drop : (ev) => {
+ if (this.program === undefined)
+ return;
+
+ for (let f of ev.files) {
+ if (f.name.byteLength + f.data.byteLength > this.max_drop_size) {
+ console.error("File too big");
+ continue;
+ }
+
+ new Uint8Array(
+ this.memory_buffer,
+ this.drop_address,
+ f.name.byteLength
+ ).set(
+ new Uint8Array(f.name)
+ );
+
+ new Uint8Array(
+ this.memory_buffer,
+ this.drop_address + f.name.byteLength,
+ f.data.byteLength
+ ).set(
+ new Uint8Array(f.data)
+ );
+
+ this.program.exports.js_drop(f.name.byteLength, f.data.byteLength);
+ }
+ },
};
this.port.onmessage = (ev) => {
@@ -222,35 +274,26 @@
let program = await WebAssembly.instantiate(
wasm,
{
- wasi_snapshot_preview1 : {
- clock_time_get : () => {},
- args_sizes_get : () => {},
- args_get : () => {},
- proc_exit : () => {},
- fd_close : () => {},
- fd_write : () => {},
- fd_seek : () => {},
- },
env : {
p_clipboard_write_impl : () => {},
p_time_impl : () => {},
-
- floor : () => {},
- ceil : () => {},
- sqrt : () => {},
- cbrt : () => {},
- pow : () => {},
- log : () => {},
- log2 : () => {},
- log10 : () => {},
- exp : () => {},
- sin : () => {},
- cos : () => {},
- tan : () => {},
- asin : () => {},
- acos : () => {},
- atan : () => {},
- atan2 : () => {},
+ floor : () => {},
+ ceil : () => {},
+ trunc : () => {},
+ sqrt : () => {},
+ cbrt : () => {},
+ pow : () => {},
+ log : () => {},
+ log2 : () => {},
+ log10 : () => {},
+ exp : () => {},
+ sin : () => {},
+ cos : () => {},
+ tan : () => {},
+ asin : () => {},
+ acos : () => {},
+ atan : () => {},
+ atan2 : () => {},
},
}
);
@@ -567,7 +610,6 @@
});
window.addEventListener("wheel", (ev) => {
- ev.preventDefault();
if (!sound_ready)
return;
@@ -591,6 +633,68 @@
ch : paste_ch,
});
});
+
+ canvas.addEventListener("dragover", (ev) => {
+ ev.preventDefault();
+ if (!sound_ready) {
+ ev.dataTransfer.dropEffect = "none";
+ return;
+ }
+
+ if (ev.clientX != undefined && ev.clientY != undefined)
+ sound_node.port.postMessage({
+ id : "mousemove",
+ x : ev.clientX,
+ y : ev.clientY,
+ });
+ });
+
+ canvas.addEventListener("dragenter", (ev) => {
+ ev.preventDefault();
+ if (!sound_ready)
+ return;
+
+ sound_node.port.postMessage({
+ id : "dragenter",
+ });
+ });
+
+ canvas.addEventListener("dragleave", (ev) => {
+ ev.preventDefault();
+ if (!sound_ready)
+ return;
+
+ sound_node.port.postMessage({
+ id : "dragleave",
+ });
+ });
+
+ canvas.addEventListener("drop", (ev) => {
+ ev.preventDefault();
+ if (!sound_ready)
+ return;
+
+ (async () => {
+ let files = [];
+
+ for (let f of ev.dataTransfer.files) {
+ // Copy the buffer in case the underlaying buffer's size is larger.
+ let bytes = await f.bytes();
+ let buffer = new ArrayBuffer(bytes.length);
+ new Uint8Array(buffer).set(bytes);
+
+ files.push({
+ name : new TextEncoder("utf8").encode(f.name),
+ data : buffer,
+ });
+ }
+
+ sound_node.port.postMessage({
+ id : "drop",
+ files : files,
+ });
+ })();
+ });
}
run({
diff --git a/juliaset/julia_set.wasm b/juliaset/julia_set.wasm
index 9b35f10..f9c17ee 100755
--- a/juliaset/julia_set.wasm
+++ b/juliaset/julia_set.wasm
Binary files differ