Browse Source

EmscriptenApplication: add test for multiple applications on one page

pull/480/head
Pablo Escobar 6 years ago
parent
commit
cc1f400c22
  1. 24
      src/Magnum/Platform/Test/CMakeLists.txt
  2. 34
      src/Magnum/Platform/Test/EmscriptenApplicationCustomCanvasTest.html
  3. 2
      src/Magnum/Platform/Test/EmscriptenApplicationTest.html
  4. 44
      src/Magnum/Platform/Test/MultipleEmscriptenApplicationTest.html
  5. 8
      src/Magnum/Platform/Test/MultipleEmscriptenApplicationTestPre.js
  6. 3
      src/Magnum/Platform/Test/PatchWebApplicationCssCustomCanvas.cmake

24
src/Magnum/Platform/Test/CMakeLists.txt

@ -43,6 +43,8 @@ if(WITH_EMSCRIPTENAPPLICATION)
add_executable(PlatformEmscriptenApplicationTest EmscriptenApplicationTest.cpp) add_executable(PlatformEmscriptenApplicationTest EmscriptenApplicationTest.cpp)
target_link_libraries(PlatformEmscriptenApplicationTest PRIVATE MagnumEmscriptenApplication MagnumGL) target_link_libraries(PlatformEmscriptenApplicationTest PRIVATE MagnumEmscriptenApplication MagnumGL)
set_target_properties(PlatformEmscriptenApplicationTest PROPERTIES FOLDER "Magnum/Platform/Test") set_target_properties(PlatformEmscriptenApplicationTest PROPERTIES FOLDER "Magnum/Platform/Test")
# Test that the canvas and keylistener can be found with both the old and the new Emscripten target behaviors
target_link_libraries(PlatformEmscriptenApplicationTest PRIVATE "-s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=0")
add_custom_command(TARGET PlatformEmscriptenApplicationTest POST_BUILD add_custom_command(TARGET PlatformEmscriptenApplicationTest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/../WebApplication.css ${CMAKE_CURRENT_SOURCE_DIR}/../WebApplication.css
@ -52,31 +54,17 @@ if(WITH_EMSCRIPTENAPPLICATION)
${CMAKE_CURRENT_SOURCE_DIR}/EmscriptenApplicationTest.html ${CMAKE_CURRENT_SOURCE_DIR}/EmscriptenApplicationTest.html
$<TARGET_FILE_DIR:PlatformEmscriptenApplicationTest>/PlatformEmscriptenApplicationTest.html) $<TARGET_FILE_DIR:PlatformEmscriptenApplicationTest>/PlatformEmscriptenApplicationTest.html)
add_executable(PlatformEmscriptenApplicationCustomCanvasTest EmscriptenApplicationTest.cpp)
target_link_libraries(PlatformEmscriptenApplicationCustomCanvasTest PRIVATE MagnumEmscriptenApplication MagnumGL)
set_target_properties(PlatformEmscriptenApplicationCustomCanvasTest PROPERTIES FOLDER "Magnum/Platform/Test")
target_link_libraries(PlatformEmscriptenApplicationCustomCanvasTest PRIVATE "-s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=0")
add_custom_command(TARGET PlatformEmscriptenApplicationCustomCanvasTest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/../WebApplication.css
${CMAKE_CURRENT_SOURCE_DIR}/../EmscriptenApplication.js
${CMAKE_CURRENT_SOURCE_DIR}/PatchWebApplicationCssCustomCanvas.cmake
$<TARGET_FILE_DIR:PlatformEmscriptenApplicationCustomCanvasTest>
COMMAND ${CMAKE_COMMAND} -P PatchWebApplicationCssCustomCanvas.cmake
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/EmscriptenApplicationCustomCanvasTest.html
$<TARGET_FILE_DIR:PlatformEmscriptenApplicationCustomCanvasTest>/PlatformEmscriptenApplicationCustomCanvasTest.html
WORKING_DIRECTORY $<TARGET_FILE_DIR:PlatformEmscriptenApplicationCustomCanvasTest>)
add_executable(PlatformMultipleEmscriptenApplicationTest EmscriptenApplicationTest.cpp) add_executable(PlatformMultipleEmscriptenApplicationTest EmscriptenApplicationTest.cpp)
target_link_libraries(PlatformMultipleEmscriptenApplicationTest PRIVATE MagnumEmscriptenApplication MagnumGL) target_link_libraries(PlatformMultipleEmscriptenApplicationTest PRIVATE MagnumEmscriptenApplication MagnumGL)
set_target_properties(PlatformMultipleEmscriptenApplicationTest PROPERTIES FOLDER "Magnum/Platform/Test") set_target_properties(PlatformMultipleEmscriptenApplicationTest PROPERTIES FOLDER "Magnum/Platform/Test")
target_compile_definitions(PlatformMultipleEmscriptenApplicationTest PRIVATE CUSTOM_CLEAR_COLOR=1,0,1,1) target_compile_definitions(PlatformMultipleEmscriptenApplicationTest PRIVATE CUSTOM_CLEAR_COLOR=0.2,0,0.2,1)
target_link_libraries(PlatformMultipleEmscriptenApplicationTest PRIVATE "-s MODULARIZE -s EXPORT_NAME=createModule") target_link_libraries(PlatformMultipleEmscriptenApplicationTest PRIVATE "-s MODULARIZE -s EXPORT_NAME=createModule")
target_link_libraries(PlatformMultipleEmscriptenApplicationTest PRIVATE "-s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1") target_link_libraries(PlatformMultipleEmscriptenApplicationTest PRIVATE "-s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1")
target_link_libraries(PlatformMultipleEmscriptenApplicationTest PRIVATE "--pre-js ${CMAKE_CURRENT_SOURCE_DIR}/../EmscriptenApplication.js")
target_link_libraries(PlatformMultipleEmscriptenApplicationTest PRIVATE "--pre-js ${CMAKE_CURRENT_SOURCE_DIR}/MultipleEmscriptenApplicationTestPre.js")
add_custom_command(TARGET PlatformMultipleEmscriptenApplicationTest POST_BUILD add_custom_command(TARGET PlatformMultipleEmscriptenApplicationTest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/../EmscriptenApplication.js ${CMAKE_CURRENT_SOURCE_DIR}/../WebApplication.css
$<TARGET_FILE_DIR:PlatformMultipleEmscriptenApplicationTest> $<TARGET_FILE_DIR:PlatformMultipleEmscriptenApplicationTest>
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/MultipleEmscriptenApplicationTest.html ${CMAKE_CURRENT_SOURCE_DIR}/MultipleEmscriptenApplicationTest.html

34
src/Magnum/Platform/Test/EmscriptenApplicationCustomCanvasTest.html

@ -1,34 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Magnum EmscriptenApplication Custom Canvas Test</title>
<link rel="stylesheet" href="WebApplicationCustomCanvas.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<h1>Magnum EmscriptenApplication Custom Canvas Test</h1>
<div id="container" class="">
<div id="sizer"><div id="expander"><div id="listener">
<canvas id="canvas2" tabindex="0"></canvas>
<div id="status">Initialization...</div>
<div id="status-description"></div>
<script src="EmscriptenApplication.js"></script>
<script>
/* Override default canvas set in EmscriptenApplication.js */
Module.canvas = document.getElementById('canvas2');
</script>
<script async="async" src="PlatformEmscriptenApplicationCustomCanvasTest.js"></script>
<script>
/* To test keyboard capture directly on the canvas */
Module.keyboardListeningElement = Module.canvas;
Module.canvas.addEventListener('mousedown', function(event) {
event.target.focus();
});
</script>
</div></div></div>
<!-- To test that it doesn't render into the default canvas -->
<canvas id="canvas"></canvas>
</div>
</body>
</html>

2
src/Magnum/Platform/Test/EmscriptenApplicationTest.html

@ -14,7 +14,6 @@
<div class="mn-status" id="status">Initialization...</div> <div class="mn-status" id="status">Initialization...</div>
<div class="mn-status-description" id="status-description"></div> <div class="mn-status-description" id="status-description"></div>
<script src="EmscriptenApplication.js"></script> <script src="EmscriptenApplication.js"></script>
<script async="async" src="PlatformEmscriptenApplicationTest.js"></script>
<script> <script>
/* To test keyboard capture directly on the canvas */ /* To test keyboard capture directly on the canvas */
Module.keyboardListeningElement = Module.canvas; Module.keyboardListeningElement = Module.canvas;
@ -22,6 +21,7 @@
event.target.focus(); event.target.focus();
}); });
</script> </script>
<script async="async" src="PlatformEmscriptenApplicationTest.js"></script>
</div></div></div> </div></div></div>
</div> </div>
</body> </body>

44
src/Magnum/Platform/Test/MultipleEmscriptenApplicationTest.html

@ -3,46 +3,52 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>Magnum Multiple EmscriptenApplication Test</title> <title>Magnum Multiple EmscriptenApplication Test</title>
<link rel="stylesheet" href="WebApplication.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head> </head>
<body> <body>
<h1>Magnum Multiple EmscriptenApplication Test</h1> <h1>Magnum Multiple EmscriptenApplication Test</h1>
<div id="container" class=""> <div class="mn-container">
<div id="sizer"><div id="expander"><div id="listener"> <div class="mn-sizer"><div class="mn-expander"><div class="mn-listener">
<canvas id="canvas" tabindex="0"></canvas> <canvas class="mn-canvas" id="canvas1" tabindex="0"></canvas>
<canvas id="canvas2" tabindex="1"></canvas> <div class="mn-status" id="status1">Initialization...</div>
<div id="status">Initialization...</div> <div class="mn-status-description" id="status-description1"></div>
<div id="status-description"></div>
<script src="EmscriptenApplication.js"></script>
<script src="PlatformMultipleEmscriptenApplicationTest.js"></script> <script src="PlatformMultipleEmscriptenApplicationTest.js"></script>
<script> <script>
const myModule = Module;
/* Override default canvas set in EmscriptenApplication.js */
myModule.canvas = document.getElementById('canvas2');
myModule.keyboardListeningElement = Module.canvas;
myModule.canvas.addEventListener('mousedown', function(event) {
event.target.focus();
});
/* /*
This application is compiled with -s MODULARIZE -s EXPORT_NAME=createModule This application is compiled with -s MODULARIZE -s EXPORT_NAME=createModule
so it doesn't run until we instantiate it with its own Module object so it doesn't run until we instantiate it with its own Module object.
We embedded EmscriptenApplication.js into the application .js via --pre-js
so that its code is run before the Emscripten runtime code.
All changes to Module (e.g overriding the canvas element) have to be done
in another --pre-js (MultipleEmscriptenApplicationTestPre.js).
*/ */
createModule(myModule); createModule();
</script> </script>
</div></div></div>
</div>
<div class="mn-container">
<div class="mn-sizer"><div class="mn-expander"><div class="mn-listener">
<canvas class="mn-canvas" id="canvas2" tabindex="1"></canvas>
<div class="mn-status" id="status2">Initialization...</div>
<div class="mn-status-description" id="status-description2"></div>
<!-- <!--
Create a fresh Module. This application is compiled without -s MODULARIZE Create a fresh Module. This application is compiled without -s MODULARIZE
so Module is expected to be global and the application is run instantly. so Module is expected to be global and the application is run instantly.
You'll usually want to use MODULARIZE for all applications but this
makes it easier to reuse the existing PlatformEmscriptenApplicationTest.js.
--> -->
<script src="EmscriptenApplication.js"></script> <script src="EmscriptenApplication.js"></script>
<script src="PlatformEmscriptenApplicationTest.js"></script>
<script> <script>
Module.canvas = document.getElementById('canvas2');
Module.status = document.getElementById('status2');
Module.statusDescription = document.getElementById('status-description2');
Module.keyboardListeningElement = Module.canvas; Module.keyboardListeningElement = Module.canvas;
Module.canvas.addEventListener('mousedown', function(event) { Module.canvas.addEventListener('mousedown', function(event) {
event.target.focus(); event.target.focus();
}); });
</script> </script>
<script async="async" src="PlatformEmscriptenApplicationTest.js"></script>
</div></div></div> </div></div></div>
</div> </div>
</body> </body>

8
src/Magnum/Platform/Test/MultipleEmscriptenApplicationTestPre.js

@ -0,0 +1,8 @@
Module.canvas = document.getElementById('canvas1');
Module.status = document.getElementById('status1');
Module.statusDescription = document.getElementById('status-description1');
Module.keyboardListeningElement = Module.canvas;
Module.canvas.addEventListener('mousedown', function(event) {
event.target.focus();
});

3
src/Magnum/Platform/Test/PatchWebApplicationCssCustomCanvas.cmake

@ -1,3 +0,0 @@
file(READ ${CMAKE_CURRENT_LIST_DIR}/WebApplication.css CONTENT)
string(REPLACE "#canvas" "#canvas2" CONTENT "${CONTENT}")
file(WRITE ${CMAKE_CURRENT_LIST_DIR}/WebApplicationCustomCanvas.css "${CONTENT}")
Loading…
Cancel
Save