Fix performance issue on touch devices
This commit is contained in:
parent
97bbc6f066
commit
d0734ccdef
1 changed files with 18 additions and 15 deletions
|
@ -98,15 +98,18 @@
|
||||||
var canvas = document.getElementById("canvas");
|
var canvas = document.getElementById("canvas");
|
||||||
auto_resize_canvas(canvas);
|
auto_resize_canvas(canvas);
|
||||||
paint_gui(canvas, get_input(canvas));
|
paint_gui(canvas, get_input(canvas));
|
||||||
|
}
|
||||||
|
|
||||||
|
function paint_and_schedule() {
|
||||||
|
paint();
|
||||||
if (ANIMATION_FRAME) {
|
if (ANIMATION_FRAME) {
|
||||||
window.requestAnimationFrame(paint);
|
window.requestAnimationFrame(paint_and_schedule);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function on_wasm_loaded() {
|
function on_wasm_loaded() {
|
||||||
var canvas = document.getElementById("canvas");
|
var canvas = document.getElementById("canvas");
|
||||||
var repaint = function() {
|
var invalidate = function() {
|
||||||
if (!ANIMATION_FRAME) {
|
if (!ANIMATION_FRAME) {
|
||||||
paint();
|
paint();
|
||||||
}
|
}
|
||||||
|
@ -116,14 +119,14 @@
|
||||||
if (g_is_touch) { return; }
|
if (g_is_touch) { return; }
|
||||||
g_mouse_pos = mouse_pos_from_event(canvas, event);
|
g_mouse_pos = mouse_pos_from_event(canvas, event);
|
||||||
g_mouse_down = true;
|
g_mouse_down = true;
|
||||||
repaint();
|
invalidate();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
canvas.addEventListener("mousemove", function(event) {
|
canvas.addEventListener("mousemove", function(event) {
|
||||||
if (g_is_touch) { return; }
|
if (g_is_touch) { return; }
|
||||||
g_mouse_pos = mouse_pos_from_event(canvas, event);
|
g_mouse_pos = mouse_pos_from_event(canvas, event);
|
||||||
repaint();
|
invalidate();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
|
@ -131,14 +134,14 @@
|
||||||
if (g_is_touch) { return; }
|
if (g_is_touch) { return; }
|
||||||
g_mouse_pos = mouse_pos_from_event(canvas, event);
|
g_mouse_pos = mouse_pos_from_event(canvas, event);
|
||||||
g_mouse_down = false;
|
g_mouse_down = false;
|
||||||
repaint();
|
invalidate();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
canvas.addEventListener("mouseleave", function(event) {
|
canvas.addEventListener("mouseleave", function(event) {
|
||||||
if (g_is_touch) { return; }
|
if (g_is_touch) { return; }
|
||||||
g_mouse_pos = null;
|
g_mouse_pos = null;
|
||||||
repaint();
|
invalidate();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
|
@ -147,35 +150,35 @@
|
||||||
g_is_touch = true;
|
g_is_touch = true;
|
||||||
g_mouse_pos = { x: event.touches[0].pageX, y: event.touches[0].pageY };
|
g_mouse_pos = { x: event.touches[0].pageX, y: event.touches[0].pageY };
|
||||||
g_mouse_down = true;
|
g_mouse_down = true;
|
||||||
repaint();
|
invalidate();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
canvas.addEventListener("touchmove", function(event) {
|
canvas.addEventListener("touchmove", function(event) {
|
||||||
g_is_touch = true;
|
g_is_touch = true;
|
||||||
g_mouse_pos = { x: event.touches[0].pageX, y: event.touches[0].pageY };
|
g_mouse_pos = { x: event.touches[0].pageX, y: event.touches[0].pageY };
|
||||||
repaint();
|
invalidate();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
canvas.addEventListener("touchend", function(event) {
|
canvas.addEventListener("touchend", function(event) {
|
||||||
g_is_touch = true;
|
g_is_touch = true;
|
||||||
g_mouse_down = false; // First release mouse to click...
|
g_mouse_down = false; // First release mouse to click...
|
||||||
paint();
|
update_gui()();
|
||||||
g_mouse_pos = null; // ...remove hover effect
|
g_mouse_pos = null; // ...remove hover effect
|
||||||
paint();
|
update_gui()();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!ANIMATION_FRAME) {
|
if (!ANIMATION_FRAME) {
|
||||||
window.addEventListener("load", paint);
|
window.addEventListener("load", invalidate);
|
||||||
window.addEventListener("pagehide", paint);
|
window.addEventListener("pagehide", invalidate);
|
||||||
window.addEventListener("pageshow", paint);
|
window.addEventListener("pageshow", invalidate);
|
||||||
window.addEventListener("resize", paint);
|
window.addEventListener("resize", invalidate);
|
||||||
}
|
}
|
||||||
|
|
||||||
paint();
|
paint_and_schedule();
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<!-- TODO: make this cover the entire screen, with resize and all -->
|
<!-- TODO: make this cover the entire screen, with resize and all -->
|
||||||
|
|
Loading…
Reference in a new issue