Browse Source

[wip] Avoid dynCall() and allocate(), as it breaks MINIMAL_RUNTIME.

chainsaw-surgery
Vladimír Vondruš 7 years ago
parent
commit
00c224b6e9
  1. 63
      src/Magnum/Platform/EmscriptenApplication.cpp

63
src/Magnum/Platform/EmscriptenApplication.cpp

@ -472,29 +472,30 @@ void EmscriptenApplication::setupCallbacks(bool resizable) {
1.38.27 depending on -s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1 1.38.27 depending on -s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1
but we don't want to force this flag on the users so the behavior but we don't want to force this flag on the users so the behavior
handles both. */ handles both. */
#ifdef EMSCRIPTEN_EVENT_TARGET_DOCUMENT // #ifdef EMSCRIPTEN_EVENT_TARGET_DOCUMENT
char* const keyboardListeningElement = reinterpret_cast<char*>(EM_ASM_INT({ // char* const keyboardListeningElement = reinterpret_cast<char*>(EM_ASM_INT({
var element = Module['keyboardListeningElement'] || document; // var element = Module['keyboardListeningElement'] || document;
//
if(element === document) return 1; // if(element === document) return 1;
if(element === window) return 2; // if(element === window) return 2;
if('id' in element) // if('id' in element)
return allocate(intArrayFromString(element.id), 'i8', ALLOC_NORMAL); // return allocate(intArrayFromString(element.id), 'i8', ALLOC_NORMAL);
//
return 0; // return 0;
})); // }));
#else // #else
char* const keyboardListeningElement = reinterpret_cast<char*>(EM_ASM_INT({ // char* const keyboardListeningElement = reinterpret_cast<char*>(EM_ASM_INT({
var element = Module['keyboardListeningElement'] || document; // var element = Module['keyboardListeningElement'] || document;
//
if(element === document) element = {id: '#document'}; // if(element === document) element = {id: '#document'};
if(element === window) element = {id: '#window'}; // if(element === window) element = {id: '#window'};
if('id' in element) // if('id' in element)
return allocate(intArrayFromString(element.id), 'i8', ALLOC_NORMAL); // return allocate(intArrayFromString(element.id), 'i8', ALLOC_NORMAL);
//
return 0; // return 0;
})); // }));
#endif // #endif
const char* keyboardListeningElement = "#canvas";
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
/* Happens only if keyboardListeningElement was set, but did not have an /* Happens only if keyboardListeningElement was set, but did not have an
@ -528,13 +529,13 @@ void EmscriptenApplication::setupCallbacks(bool resizable) {
return e.isAccepted(); return e.isAccepted();
})); }));
#ifdef EMSCRIPTEN_EVENT_TARGET_DOCUMENT // #ifdef EMSCRIPTEN_EVENT_TARGET_DOCUMENT
if(keyboardListeningElement != EMSCRIPTEN_EVENT_TARGET_DOCUMENT && // if(keyboardListeningElement != EMSCRIPTEN_EVENT_TARGET_DOCUMENT &&
keyboardListeningElement != EMSCRIPTEN_EVENT_TARGET_WINDOW) // keyboardListeningElement != EMSCRIPTEN_EVENT_TARGET_WINDOW)
#endif // #endif
{ // {
std::free(keyboardListeningElement); // std::free(keyboardListeningElement);
} // }
} }
@ -630,7 +631,7 @@ void EmscriptenApplication::redraw() {
/* Call our callback via function pointer returning int with two /* Call our callback via function pointer returning int with two
int params */ int params */
if(!dynCall('ii', $0, [$1])) { if(!dynCall_ii($0, [$1])) {
window.cancelAnimationFrame(id); window.cancelAnimationFrame(id);
} }
}; };

Loading…
Cancel
Save