diff options
| author | Ben Harris <bjh21@bjh21.me.uk> | 2022-12-10 17:49:49 +0000 |
|---|---|---|
| committer | Ben Harris <bjh21@bjh21.me.uk> | 2022-12-10 17:58:41 +0000 |
| commit | 14eb35da4aa8a66a05012af9860a7088dbf21c6d (patch) | |
| tree | a93b255cf2e0b3294a24c58cb373391fe85c108d | |
| parent | 02f1d55a023eeab52b20cb5db6428f8ff40b9459 (diff) | |
| download | puzzles-14eb35da4aa8a66a05012af9860a7088dbf21c6d.zip puzzles-14eb35da4aa8a66a05012af9860a7088dbf21c6d.tar.gz puzzles-14eb35da4aa8a66a05012af9860a7088dbf21c6d.tar.bz2 puzzles-14eb35da4aa8a66a05012af9860a7088dbf21c6d.tar.xz | |
js: Set the default colour from the CSS background of the canvas
This allows the HTML/CSS to decide that it would like a different
background colour without the need to recompile. The default if the CSS
specifies no colour (and hence the canvas is transparent) is the same
grey as before.
| -rw-r--r-- | emcc.c | 6 | ||||
| -rw-r--r-- | emcclib.js | 18 |
2 files changed, 22 insertions, 2 deletions
@@ -51,6 +51,7 @@ extern void js_add_preset(int menuid, const char *name, int value); extern int js_add_preset_submenu(int menuid, const char *name); extern int js_get_selected_preset(void); extern void js_select_preset(int n); +extern void js_default_colour(float *output); extern void js_set_background_colour(const char *bg); extern void js_get_date_64(unsigned *p); extern void js_update_permalinks(const char *desc, const char *seed); @@ -226,12 +227,13 @@ void restore_puzzle_size(int w, int h) } /* - * HTML doesn't give us a default frontend colour of its own, so we - * just make up a lightish grey ourselves. + * Try to extract a background colour from the canvas's CSS. In case + * it doesn't have a usable one, make up a lightish grey ourselves. */ void frontend_default_colour(frontend *fe, float *output) { output[0] = output[1] = output[2] = 0.9F; + js_default_colour(output); } /* @@ -144,6 +144,24 @@ mergeInto(LibraryManager.library, { }, /* + * void js_default_colour(float *output); + * + * Try to extract a default colour from the CSS computed + * background colour of the canvas element. + */ + js_default_colour: function(output) { + var col = window.getComputedStyle(onscreen_canvas).backgroundColor; + /* We only support opaque sRGB colours. */ + var m = col.match( + /^rgb\((\d+(?:\.\d+)?), (\d+(?:\.\d+)?), (\d+(?:\.\d+)?)\)$/); + if (m) { + setValue(output, +m[1] / 255, "float"); + setValue(output + 4, +m[2] / 255, "float"); + setValue(output + 8, +m[3] / 255, "float"); + } + }, + + /* * void js_set_background_colour(const char *bg); * * Record the puzzle background colour in a CSS variable so |