diff --git a/emcc.c b/emcc.c index 75ca396..d970251 100644 --- a/emcc.c +++ b/emcc.c @@ -83,6 +83,7 @@ extern void js_canvas_copy_to_blitter(int id, int x, int y, int w, int h); 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 int canvas_w, canvas_h; 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; diff --git a/emcclib.js b/emcclib.js index b63c6b2..60dbbf9 100644 --- a/emcclib.js +++ b/emcclib.js @@ -563,6 +563,20 @@ mergeInto(LibraryManager.library, { statusbar.textContent = UTF8ToString(ptr); }, + /* + * 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); *