diff options
| author | Simon Tatham <anakin@pobox.com> | 2017-09-05 20:09:56 +0100 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2017-09-05 20:55:11 +0100 |
| commit | b31ea221673a8f49a383a4a119d6edaabd39642d (patch) | |
| tree | fc455f492a68ca109f0eeaa9831adbca5ca2a9ef /emccpre.js | |
| parent | 5e53ec5e36de0485467cb9553b8fa0bb580dc403 (diff) | |
| download | puzzles-b31ea221673a8f49a383a4a119d6edaabd39642d.zip puzzles-b31ea221673a8f49a383a4a119d6edaabd39642d.tar.gz puzzles-b31ea221673a8f49a383a4a119d6edaabd39642d.tar.bz2 puzzles-b31ea221673a8f49a383a4a119d6edaabd39642d.tar.xz | |
Factor some HTML dialog functions out of emcclib.
I'm about to want to call these from Javascript as well as from
Emscripten-compiled C, so I need versions of them that aren't wrapped
up in the Emscripten library object and also don't expect half their
parameters to be Emscripten-verse char pointers requiring calls to
Pointer_stringify.
The easiest way to achieve all of that is to turn the Emscripten-
ready versions of those functions in emcclib.js into tiny wrappers
around the JS versions, which do the pointer stringification and a
couple of other details like directing callbacks to the right C
functions.
Diffstat (limited to 'emccpre.js')
| -rw-r--r-- | emccpre.js | 66 |
1 files changed, 66 insertions, 0 deletions
@@ -129,6 +129,72 @@ function disable_menu_item(item, disabledFlag) { item.className = ""; } +// Dialog-box functions called from both C and JS. +function dialog_init(titletext) { + // Create an overlay on the page which darkens everything + // beneath it. + dlg_dimmer = document.createElement("div"); + dlg_dimmer.style.width = "100%"; + dlg_dimmer.style.height = "100%"; + dlg_dimmer.style.background = '#000000'; + dlg_dimmer.style.position = 'fixed'; + dlg_dimmer.style.opacity = 0.3; + dlg_dimmer.style.top = dlg_dimmer.style.left = 0; + dlg_dimmer.style["z-index"] = 99; + + // Now create a form which sits on top of that in turn. + dlg_form = document.createElement("form"); + dlg_form.style.width = (window.innerWidth * 2 / 3) + "px"; + dlg_form.style.opacity = 1; + dlg_form.style.background = '#ffffff'; + dlg_form.style.color = '#000000'; + dlg_form.style.position = 'absolute'; + dlg_form.style.border = "2px solid black"; + dlg_form.style.padding = "20px"; + dlg_form.style.top = (window.innerHeight / 10) + "px"; + dlg_form.style.left = (window.innerWidth / 6) + "px"; + dlg_form.style["z-index"] = 100; + + var title = document.createElement("p"); + title.style.marginTop = "0px"; + title.appendChild(document.createTextNode(titletext)); + dlg_form.appendChild(title); + + dlg_return_funcs = []; + dlg_next_id = 0; +} + +function dialog_launch(ok_function, cancel_function) { + // Put in the OK and Cancel buttons at the bottom. + var button; + + if (ok_function) { + button = document.createElement("input"); + button.type = "button"; + button.value = "OK"; + button.onclick = ok_function; + dlg_form.appendChild(button); + } + + if (cancel_function) { + button = document.createElement("input"); + button.type = "button"; + button.value = "Cancel"; + button.onclick = cancel_function; + dlg_form.appendChild(button); + } + + document.body.appendChild(dlg_dimmer); + document.body.appendChild(dlg_form); +} + +function dialog_cleanup() { + document.body.removeChild(dlg_dimmer); + document.body.removeChild(dlg_form); + dlg_dimmer = dlg_form = null; + onscreen_canvas.focus(); +} + // Init function called from body.onload. function initPuzzle() { // Construct the off-screen canvas used for double buffering. |