X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/07dfb697bb30781c963b11eb00c4951bb5db6a7d..5d8c6c556982ae44f786d14a6d641182ced15043:/midend.c diff --git a/midend.c b/midend.c index d8960a7..dec0cc9 100644 --- a/midend.c +++ b/midend.c @@ -48,6 +48,8 @@ struct midend_data { char *laststatus; int pressed_mouse_button; + + int winwidth, winheight; }; #define ensure(me) do { \ @@ -90,6 +92,7 @@ midend_data *midend_new(frontend *fe, const game *ourgame) me->laststatus = NULL; me->timing = FALSE; me->elapsed = 0.0F; + me->winwidth = me->winheight = 0; sfree(randseed); @@ -134,9 +137,11 @@ void midend_free(midend_data *me) sfree(me); } -void midend_size(midend_data *me, int *x, int *y) +void midend_size(midend_data *me, int *x, int *y, int expand) { - me->ourgame->size(me->params, x, y); + me->ourgame->size(me->params, me->drawstate, x, y, expand); + me->winwidth = *x; + me->winheight = *y; } void midend_set_params(midend_data *me, game_params *params) @@ -155,11 +160,18 @@ static void midend_set_timer(midend_data *me) deactivate_timer(me->frontend); } +static void midend_size_new_drawstate(midend_data *me) +{ + me->ourgame->size(me->params, me->drawstate, &me->winwidth, &me->winheight, + TRUE); +} + void midend_force_redraw(midend_data *me) { if (me->drawstate) me->ourgame->free_drawstate(me->drawstate); me->drawstate = me->ourgame->new_drawstate(me->states[0].state); + midend_size_new_drawstate(me); midend_redraw(me); } @@ -217,6 +229,7 @@ void midend_new_game(midend_data *me) me->nstates++; me->statepos = 1; me->drawstate = me->ourgame->new_drawstate(me->states[0].state); + midend_size_new_drawstate(me); me->elapsed = 0.0F; midend_set_timer(me); if (me->ui) @@ -934,7 +947,9 @@ char *midend_solve(midend_data *me) return "No game set up to solve"; /* _shouldn't_ happen! */ msg = "Solve operation failed"; /* game _should_ overwrite on error */ - s = me->ourgame->solve(me->states[0].state, me->aux_info, &msg); + s = me->ourgame->solve(me->states[0].state, + me->states[me->statepos-1].state, + me->aux_info, &msg); if (!s) return msg;