1
0

Update Matsui, combine changes until the next render frame

This commit is contained in:
Geraint 2025-07-01 23:14:10 +01:00
parent 7ca118b3d4
commit cd947e7d63
2 changed files with 24 additions and 15 deletions

View File

@ -186,7 +186,7 @@
</script> </script>
</section> </section>
<template @foreach> <template @foreach>
<div class="plot" @if="${d => d.$type == 'Spectrum'}"> <div class="plot" @if="${d => d.$type == 'Spectrum'}" $fullscreentoggle='foo'>
<canvas class="plot-grid" $update="${drawSpectrum}" $resize="${drawSpectrum}"></canvas> <canvas class="plot-grid" $update="${drawSpectrum}" $resize="${drawSpectrum}"></canvas>
<canvas class="plot-data" $update="${drawSpectrum}" $resize="${drawSpectrum}"></canvas> <canvas class="plot-data" $update="${drawSpectrum}" $resize="${drawSpectrum}"></canvas>
<canvas class="plot-labels" $update="${drawSpectrum}" $resize="${drawSpectrum}"></canvas> <canvas class="plot-labels" $update="${drawSpectrum}" $resize="${drawSpectrum}"></canvas>
@ -294,26 +294,35 @@
<script src="cbor.min.js"></script> <script src="cbor.min.js"></script>
<script src="matsui-bundle.min.js"></script> <script src="matsui-bundle.min.js"></script>
<script> <script>
Matsui.global.attributes.resize = (element, fn) => { Matsui.global.attributes.fullscreentoggle = (element) => {
element.classList.add('_matsuiResize'); Matsui.global.attributes.press(element, count => {
element._matsuiResize = fn; if (count == 2) {
if (document.fullscreenElement == element) {
document.exitFullscreen();
} else {
element.requestFullscreen();
}
}
});
}; };
addEventListener('resize', e => {
document.querySelectorAll('._matsuiResize').forEach(e => {
let fn = e._matsuiResize;
if (fn) fn(e, e.offsetWidth, e.offsetHeight);
});
});
let state = Matsui.replace(document.body, {name: "..."}); let state = Matsui.replace(document.body, {name: "..."});
state.trackMerges(merge => { state.trackMerges(merge => {
window.parent.postMessage(CBOR.encode(merge), '*'); window.parent.postMessage(CBOR.encode(merge), '*');
}); });
let pendingMerge = null;
addEventListener('message', e => { addEventListener('message', e => {
let merge = CBOR.decode(e.data); let merge = CBOR.decode(e.data);
window.merge = merge;//console.log(merge); if (pendingMerge !== null) {
Matsui.merge.apply(pendingMerge, merge);
} else {
pendingMerge = merge;
requestAnimationFrame(_ => {
pendingMerge = null;
state.merge(merge); state.merge(merge);
}); });
}
});
window.parent.postMessage(CBOR.encode("ready"), '*'); window.parent.postMessage(CBOR.encode("ready"), '*');

File diff suppressed because one or more lines are too long