CURSOR_DOWN,
CURSOR_LEFT,
CURSOR_RIGHT,
+ CURSOR_SELECT,
/* made smaller because of 'limited range of datatype' errors. */
MOD_CTRL = 0x1000,
typedef struct game_ui game_ui;
typedef struct game_drawstate game_drawstate;
typedef struct game game;
+typedef struct blitter blitter;
#define ALIGN_VNORMAL 0x000
#define ALIGN_VCENTRE 0x100
void draw_line(frontend *fe, int x1, int y1, int x2, int y2, int colour);
void draw_polygon(frontend *fe, int *coords, int npoints,
int fill, int colour);
+void draw_circle(frontend *fe, int cx, int cy, int radius,
+ int fill, int colour);
void clip(frontend *fe, int x, int y, int w, int h);
void unclip(frontend *fe);
void start_draw(frontend *fe);
void status_bar(frontend *fe, char *text);
void get_random_seed(void **randseed, int *randseedsize);
+blitter *blitter_new(int w, int h);
+void blitter_free(blitter *bl);
+/* save puts the portion of the current display with top-left corner
+ * (x,y) to the blitter. load puts it back again to the specified
+ * coords, or else wherever it was saved from
+ * (if x = y = BLITTER_FROMSAVED). */
+void blitter_save(frontend *fe, blitter *bl, int x, int y);
+#define BLITTER_FROMSAVED (-1)
+void blitter_load(frontend *fe, blitter *bl, int x, int y);
+
/*
* midend.c
*/
midend_data *midend_new(frontend *fe, const game *ourgame);
void midend_free(midend_data *me);
void midend_set_params(midend_data *me, game_params *params);
-void midend_size(midend_data *me, int *x, int *y);
+void midend_size(midend_data *me, int *x, int *y, int expand);
void midend_new_game(midend_data *me);
void midend_restart_game(midend_data *me);
void midend_stop_anim(midend_data *me);
game_state *(*dup_game)(game_state *state);
void (*free_game)(game_state *state);
int can_solve;
- game_state *(*solve)(game_state *state, game_aux_info *aux, char **error);
+ game_state *(*solve)(game_state *orig, game_state *curr,
+ game_aux_info *aux, char **error);
int can_format_as_text;
char *(*text_format)(game_state *state);
game_ui *(*new_ui)(game_state *state);
void (*free_ui)(game_ui *ui);
+ void (*changed_state)(game_ui *ui, game_state *oldstate,
+ game_state *newstate);
game_state *(*make_move)(game_state *from, game_ui *ui, game_drawstate *ds,
int x, int y, int button);
- void (*size)(game_params *params, int *x, int *y);
+ void (*size)(game_params *params, game_drawstate *ds, int *x, int *y,
+ int expand);
float *(*colours)(frontend *fe, game_state *state, int *ncolours);
game_drawstate *(*new_drawstate)(game_state *state);
void (*free_drawstate)(game_drawstate *ds);