shithub: puzzles

Download patch

ref: 33b5c484295657678ea22db3d57fd19cda96a45e
parent: 14eb35da4aa8a66a05012af9860a7088dbf21c6d
author: Ben Harris <bjh21@bjh21.me.uk>
date: Sat Oct 29 17:45:11 EDT 2022

js: Add a new function whereby C can ask JS for a preferred board size

Currently JS has no opinion.

--- a/emcc.c
+++ b/emcc.c
@@ -83,6 +83,7 @@
 extern void js_canvas_copy_from_blitter(int id, int x, int y, int w, int h);
 extern void js_canvas_remove_statusbar(void);
 extern void js_canvas_set_statusbar(const char *text);
+extern bool js_canvas_get_preferred_size(int *wp, int *hp);
 extern void js_canvas_set_size(int w, int h);
 extern double js_get_device_pixel_ratio();
 
@@ -192,8 +193,10 @@
 static void resize()
 {
     int w, h;
+    bool user;
     w = h = INT_MAX;
-    midend_size(me, &w, &h, false, js_get_device_pixel_ratio());
+    user = js_canvas_get_preferred_size(&w, &h);
+    midend_size(me, &w, &h, user, js_get_device_pixel_ratio());
     js_canvas_set_size(w, h);
     canvas_w = w;
     canvas_h = h;
--- a/emcclib.js
+++ b/emcclib.js
@@ -564,6 +564,20 @@
     },
 
     /*
+     * bool js_canvas_get_preferred_size(int *wp, int *hp);
+     *
+     * This is called before calling midend_size() to set a puzzle to
+     * the default size.  If the JavaScript layer has an opinion about
+     * how big the puzzle should be, it can overwrite *wp and *hp with
+     * its preferred size, and return true if the "user" parameter to
+     * midend_size() should be true.  Otherwise it should leave them
+     * alone and return false.
+     */
+    js_canvas_get_preferred_size: function(wp, hp) {
+        return false;
+    },
+
+    /*
      * void js_canvas_set_size(int w, int h);
      * 
      * Set the size of the puzzle canvas. Called whenever the size of