Apply the rotation in Penrose grid descriptions by rotating in the
[sgt/puzzles] / puzzles.h
index b375c3b..1561f4a 100644 (file)
--- a/puzzles.h
+++ b/puzzles.h
@@ -184,11 +184,14 @@ void draw_polygon(drawing *dr, int *coords, int npoints,
                   int fillcolour, int outlinecolour);
 void draw_circle(drawing *dr, int cx, int cy, int radius,
                  int fillcolour, int outlinecolour);
+void draw_thick_line(drawing *dr, float thickness,
+                    float x1, float y1, float x2, float y2, int colour);
 void clip(drawing *dr, int x, int y, int w, int h);
 void unclip(drawing *dr);
 void start_draw(drawing *dr);
 void draw_update(drawing *dr, int x, int y, int w, int h);
 void end_draw(drawing *dr);
+char *text_fallback(drawing *dr, const char *const *strings, int nstrings);
 void status_bar(drawing *dr, char *text);
 blitter *blitter_new(drawing *dr, int w, int h);
 void blitter_free(drawing *dr, blitter *bl);
@@ -217,6 +220,7 @@ int print_rgb_grey_colour(drawing *dr, float r, float g, float b, float grey);
 int print_rgb_hatched_colour(drawing *dr, float r, float g, float b,
                             int hatch);
 void print_line_width(drawing *dr, int width);
+void print_line_dotted(drawing *dr, int dotted);
 
 /*
  * midend.c
@@ -249,6 +253,9 @@ char *midend_get_game_id(midend *me);
 int midend_can_format_as_text_now(midend *me);
 char *midend_text_format(midend *me);
 char *midend_solve(midend *me);
+int midend_is_solved(midend *me);
+int midend_can_undo(midend *me);
+int midend_can_redo(midend *me);
 void midend_supersede_game_desc(midend *me, char *desc, char *privdesc);
 char *midend_rewrite_statusbar(midend *me, char *text);
 void midend_serialise(midend *me,
@@ -302,10 +309,14 @@ void shuffle(void *array, int nelts, int eltsize, random_state *rs);
 void draw_rect_outline(drawing *dr, int x, int y, int w, int h,
                        int colour);
 
+/* Draw a set of rectangle corners (e.g. for a cursor display). */
+void draw_rect_corners(drawing *dr, int cx, int cy, int r, int col);
+
 void move_cursor(int button, int *x, int *y, int maxw, int maxh, int wrap);
 
 /* Used in netslide.c and sixteen.c for cursor movement around edge. */
 int c2pos(int w, int h, int cx, int cy);
+int c2diff(int w, int h, int cx, int cy, int button);
 void pos2c(int w, int h, int pos, int *cx, int *cy);
 
 /* Draws text with an 'outline' formed by offsetting the text
@@ -337,6 +348,12 @@ void dsf_merge(int *dsf, int v1, int v2);
 void dsf_init(int *dsf, int len);
 
 /*
+ * laydomino.c
+ */
+int *domino_layout(int w, int h, random_state *rs);
+void domino_layout_prealloc(int w, int h, random_state *rs,
+                            int *grid, int *grid2, int *list);
+/*
  * version.c
  */
 extern char ver[];
@@ -462,6 +479,7 @@ struct game {
                         game_ui *ui);
     float (*flash_length)(game_state *oldstate, game_state *newstate, int dir,
                          game_ui *ui);
+    int (*is_solved)(game_state *state);
     int can_print, can_print_in_colour;
     void (*print_size)(game_params *params, float *x, float *y);
     void (*print)(drawing *dr, game_state *state, int tilesize);
@@ -504,6 +522,12 @@ struct drawing_api {
     void (*end_page)(void *handle, int number);
     void (*end_doc)(void *handle);
     void (*line_width)(void *handle, float width);
+    void (*line_dotted)(void *handle, int dotted);
+    char *(*text_fallback)(void *handle, const char *const *strings,
+                          int nstrings);
+    void (*draw_thick_line)(void *handle, float thickness,
+                           float x1, float y1, float x2, float y2,
+                           int colour);
 };
 
 /*