diff options
| -rw-r--r-- | cmake/platforms/emscripten.cmake | 2 | ||||
| -rw-r--r-- | emcc.c | 11 | ||||
| -rw-r--r-- | emccpre.js | 4 |
3 files changed, 14 insertions, 3 deletions
diff --git a/cmake/platforms/emscripten.cmake b/cmake/platforms/emscripten.cmake index 6526037..5c13f90 100644 --- a/cmake/platforms/emscripten.cmake +++ b/cmake/platforms/emscripten.cmake @@ -26,6 +26,8 @@ set(emcc_export_list # Callbacks when the resizing controls are used _resize_puzzle _restore_puzzle_size + # Callback when device pixel ratio changes + _rescale_puzzle # Main program, run at initialisation time _main) @@ -195,8 +195,8 @@ static void resize(void) canvas_h = h; } -/* Called from JS when the user uses the resize handle */ -void resize_puzzle(int w, int h) +/* Called from JS when the device pixel ratio changes */ +void rescale_puzzle(int w, int h) { midend_size(me, &w, &h, true); if (canvas_w != w || canvas_h != h) { @@ -207,6 +207,13 @@ void resize_puzzle(int w, int h) } } +/* Called from JS when the user uses the resize handle */ +void resize_puzzle(int w, int h) +{ + rescale_puzzle(w, h); + js_canvas_set_nominal_size(); +} + /* Called from JS when the user uses the restore button */ void restore_puzzle_size(int w, int h) { @@ -535,12 +535,14 @@ function initPuzzle() { * <https://developer.mozilla.org/en-US/docs/Web/API/Window/ * devicePixelRatio> (CC0) to work on older browsers. */ + var rescale_puzzle = Module.cwrap('rescale_puzzle', + 'void', ['number', 'number']); var mql = null; var update_pixel_ratio = function() { var dpr = window.devicePixelRatio; if (mql !== null) mql.removeListener(update_pixel_ratio); - resize_puzzle(nominal_width * dpr, nominal_height * dpr); + rescale_puzzle(nominal_width * dpr, nominal_height * dpr); mql = window.matchMedia(`(resolution: ${dpr}dppx)`); mql.addListener(update_pixel_ratio); } |