chiark / gitweb /
Fix completion checking in Killer Solo.
[sgt-puzzles.git] / emcc.c
diff --git a/emcc.c b/emcc.c
index baf12d32e78b01a05a1e8b2ee37c5dc4f8d67b1f..c1b1f7ac33bb28356022713893205b8d8a53e24e 100644 (file)
--- a/emcc.c
+++ b/emcc.c
  *    by using the DOM File API to ask the user to select a file and
  *    permit us to see its contents.
  *
- *  - it ought to be possible to make the puzzle canvases resizable,
- *    by superimposing some kind of draggable resize handle. Also I
- *    quite like the idea of having a few buttons for standard sizes:
- *    reset to default size, maximise to the browser window dimensions
- *    (if we can find those out), and perhaps even go full-screen.
- *
  *  - I should think about whether these webified puzzles can support
  *    touchscreen-based tablet browsers (assuming there are any that
  *    can cope with the reasonably modern JS and run it fast enough to
@@ -54,7 +48,9 @@
  */
 
 #include <assert.h>
+#include <stdio.h>
 #include <string.h>
+#include <stdarg.h>
 
 #include "puzzles.h"
 
@@ -194,10 +190,12 @@ void timer_callback(double tplus)
 }
 
 /* ----------------------------------------------------------------------
- * Helper function to resize the canvas, and variables to remember its
- * size for other functions (e.g. trimming blitter rectangles).
+ * Helper functions to resize the canvas, and variables to remember
+ * its size for other functions (e.g. trimming blitter rectangles).
  */
 static int canvas_w, canvas_h;
+
+/* Called when we resize as a result of changing puzzle settings */
 static void resize(void)
 {
     int w, h;
@@ -208,6 +206,26 @@ static void resize(void)
     canvas_h = h;
 }
 
+/* Called from JS when the user uses the resize handle */
+void resize_puzzle(int w, int h)
+{
+    midend_size(me, &w, &h, TRUE);
+    if (canvas_w != w || canvas_h != h) { 
+        js_canvas_set_size(w, h);
+        canvas_w = w;
+        canvas_h = h;
+        midend_force_redraw(me);
+    }
+}
+
+/* Called from JS when the user uses the restore button */
+void restore_puzzle_size(int w, int h)
+{
+    midend_reset_tilesize(me);
+    resize();
+    midend_force_redraw(me);
+}
+
 /*
  * HTML doesn't give us a default frontend colour of its own, so we
  * just make up a lightish grey ourselves.
@@ -299,6 +317,8 @@ void key(int keycode, int charcode, const char *key, const char *chr,
         keyevent = keycode + (shift ? 0 : 32);
     } else if (keycode >= 48 && keycode <= 57) {
         keyevent = keycode;
+    } else if (keycode == 32) {        /* space / CURSOR_SELECT2 */
+        keyevent = keycode;
     }
 
     if (keyevent >= 0) {
@@ -776,8 +796,6 @@ int main(int argc, char **argv)
         js_remove_type_dropdown();
         have_presets_dropdown = FALSE;
     } else {
-        int preset;
-
         presets = snewn(npresets, game_params *);
         for (i = 0; i < npresets; i++) {
             char *name;