From a69f2fd42ffefe1684aee116a313364e5c40d234 Mon Sep 17 00:00:00 2001 From: Carl Woffenden Date: Fri, 16 Feb 2024 18:44:49 +0100 Subject: [PATCH 1/4] Wrapper for e.detail when undefined Building with ASSERTIONS is failing the safe heap checks when e.detail is undefined. --- src/library_html5.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/library_html5.js b/src/library_html5.js index 50c6877638390..15677084bf924 100644 --- a/src/library_html5.js +++ b/src/library_html5.js @@ -709,7 +709,8 @@ var LibraryHTML5 = { #else var uiEvent = JSEvents.uiEvent; #endif - {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.detail, 'e.detail', 'i32') }}}; + // e.detail is seen as undefined + {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.detail, '((typeof e.detail !== "undefined") ? e.detail : 0), 'i32') }}}; {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.documentBodyClientWidth, 'b.clientWidth', 'i32') }}}; {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.documentBodyClientHeight, 'b.clientHeight', 'i32') }}}; {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.windowInnerWidth, 'innerWidth', 'i32') }}}; From efdf9b0b79ef07893d694cbc0e62e7d8994e10f9 Mon Sep 17 00:00:00 2001 From: Carl Woffenden Date: Fri, 16 Feb 2024 19:04:54 +0100 Subject: [PATCH 2/4] IDE typo'd --- src/library_html5.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/library_html5.js b/src/library_html5.js index 15677084bf924..3c3e50a24adb6 100644 --- a/src/library_html5.js +++ b/src/library_html5.js @@ -710,7 +710,7 @@ var LibraryHTML5 = { var uiEvent = JSEvents.uiEvent; #endif // e.detail is seen as undefined - {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.detail, '((typeof e.detail !== "undefined") ? e.detail : 0), 'i32') }}}; + {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.detail, '(typeof e.detail !== "undefined") ? e.detail : 0', 'i32') }}}; {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.documentBodyClientWidth, 'b.clientWidth', 'i32') }}}; {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.documentBodyClientHeight, 'b.clientHeight', 'i32') }}}; {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.windowInnerWidth, 'innerWidth', 'i32') }}}; From d0913fdadf4902e2c25c01ea8f88e0af28647545 Mon Sep 17 00:00:00 2001 From: Carl Woffenden Date: Fri, 16 Feb 2024 19:48:59 +0100 Subject: [PATCH 3/4] Simplified as per sbc100's suggestion --- src/library_html5.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/library_html5.js b/src/library_html5.js index 3c3e50a24adb6..c96314553af15 100644 --- a/src/library_html5.js +++ b/src/library_html5.js @@ -710,7 +710,7 @@ var LibraryHTML5 = { var uiEvent = JSEvents.uiEvent; #endif // e.detail is seen as undefined - {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.detail, '(typeof e.detail !== "undefined") ? e.detail : 0', 'i32') }}}; + {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.detail, 'e.detail || 0', 'i32') }}}; {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.documentBodyClientWidth, 'b.clientWidth', 'i32') }}}; {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.documentBodyClientHeight, 'b.clientHeight', 'i32') }}}; {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.windowInnerWidth, 'innerWidth', 'i32') }}}; From 38bb90f627eae5be774101908104d649e06f505c Mon Sep 17 00:00:00 2001 From: Carl Woffenden Date: Fri, 23 Feb 2024 13:06:47 +0100 Subject: [PATCH 4/4] Set detail to zero, fixed float scroll, updated docs --- site/source/docs/api_reference/html5.h.rst | 4 ++-- src/library_html5.js | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/site/source/docs/api_reference/html5.h.rst b/site/source/docs/api_reference/html5.h.rst index b87712a59f943..3a34a1d451605 100644 --- a/site/source/docs/api_reference/html5.h.rst +++ b/site/source/docs/api_reference/html5.h.rst @@ -596,7 +596,7 @@ Struct .. c:member:: long detail - Specifies additional detail/information about this event. + For resize and scroll events this is always zero. .. c:member:: int documentBodyClientWidth int documentBodyClientHeight @@ -616,7 +616,7 @@ Struct .. c:member:: int scrollTop int scrollLeft - The page scroll position. + The page scroll position (rounded down to the nearest pixel). Callback functions diff --git a/src/library_html5.js b/src/library_html5.js index c96314553af15..496c24ee6a7ee 100644 --- a/src/library_html5.js +++ b/src/library_html5.js @@ -709,16 +709,15 @@ var LibraryHTML5 = { #else var uiEvent = JSEvents.uiEvent; #endif - // e.detail is seen as undefined - {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.detail, 'e.detail || 0', 'i32') }}}; + {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.detail, '0', 'i32') }}}; // always zero for resize and scroll {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.documentBodyClientWidth, 'b.clientWidth', 'i32') }}}; {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.documentBodyClientHeight, 'b.clientHeight', 'i32') }}}; {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.windowInnerWidth, 'innerWidth', 'i32') }}}; {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.windowInnerHeight, 'innerHeight', 'i32') }}}; {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.windowOuterWidth, 'outerWidth', 'i32') }}}; {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.windowOuterHeight, 'outerHeight', 'i32') }}}; - {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.scrollTop, 'pageXOffset', 'i32') }}}; - {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.scrollLeft, 'pageYOffset', 'i32') }}}; + {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.scrollTop, 'pageXOffset | 0', 'i32') }}}; // scroll offsets are float + {{{ makeSetValue('uiEvent', C_STRUCTS.EmscriptenUiEvent.scrollLeft, 'pageYOffset | 0', 'i32') }}}; #if PTHREADS if (targetThread) __emscripten_run_callback_on_thread(targetThread, callbackfunc, eventTypeId, uiEvent, userData); else