Skip to content

Commit a98aa71

Browse files
committed
Two-stage resizing so resizeListeners can participate in GLUT resizing.
1. First stage is addEventListener for GLUT.onSize, which only updates the canvas size to clientWidth and clientHeight via setCanvasSize, which in turn calls updateResizeListeners. 2. Second stage is to add back original Browser.resizeListeners.push for GLUT.reshapeFunc, which is called on updateResizeListeners. The callback sequence is: window resize -> GLUT.onSize -> Browser.setCanvasSize -> updateResizeListeners -> GLUT.reshapeFunc This extra step is so any other calls to Browser.setCanvasSize, setFullscreenCanvasSize, setWindowedCanvasSize will now callback to GLUT.reshapeFunc.
1 parent 37b07a5 commit a98aa71

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

src/lib/libglut.js

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -300,13 +300,11 @@ var LibraryGLUT = {
300300
_glutPostRedisplay();
301301
},
302302

303-
reshapeHandler: () => {
304-
// Use clientWidth and clientHeight, which include CSS scaling of the canvas
303+
// Resize callback stage 1: update canvas by setCanvasSize, which notifies resizeListeners including GLUT.reshapeFunc
304+
onResize: () => {
305+
// Update canvas size to clientWidth and clientHeight, which include CSS scaling
305306
var canvas = Browser.getCanvas();
306-
Browser.setCanvasSize(canvas.clientWidth, canvas.clientHeight, true);
307-
if (GLUT.reshapeFunc) {
308-
{{{ makeDynCall('vii', 'GLUT.reshapeFunc') }}}(canvas.clientWidth, canvas.clientHeight);
309-
}
307+
Browser.setCanvasSize(canvas.clientWidth, canvas.clientHeight, /*noUpdates*/false);
310308
}
311309
},
312310

@@ -345,7 +343,15 @@ var LibraryGLUT = {
345343
// Firefox
346344
window.addEventListener('DOMMouseScroll', GLUT.onMouseWheel, true);
347345

348-
window.addEventListener('resize', GLUT.reshapeHandler, true);
346+
// Resize callback stage 1: update canvas which notifies resizeListeners
347+
window.addEventListener('resize', GLUT.onResize, true);
348+
349+
// Resize callback stage 2: updateResizeListeners notifies reshapeFunc
350+
Browser.resizeListeners.push((width, height) => {
351+
if (GLUT.reshapeFunc) {
352+
{{{ makeDynCall('vii', 'GLUT.reshapeFunc') }}}(width, height);
353+
}
354+
});
349355

350356
addOnExit(() => {
351357
if (isTouchDevice) {
@@ -364,7 +370,7 @@ var LibraryGLUT = {
364370
// Firefox
365371
window.removeEventListener('DOMMouseScroll', GLUT.onMouseWheel, true);
366372

367-
window.removeEventListener('resize', GLUT.reshapeHandler, true);
373+
window.removeEventListener('resize', GLUT.onResize, true);
368374

369375
var canvas = Browser.getCanvas();
370376
canvas.width = canvas.height = 1;
@@ -642,7 +648,7 @@ var LibraryGLUT = {
642648
glutMainLoop__proxy: 'sync',
643649
glutMainLoop__deps: ['$GLUT', 'glutPostRedisplay'],
644650
glutMainLoop: () => {
645-
GLUT.reshapeHandler();
651+
GLUT.onResize();
646652
_glutPostRedisplay();
647653
throw 'unwind';
648654
},

0 commit comments

Comments
 (0)