X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/83c0438ffd33d0f6a608dceec3c889d65fb74c28..be39fd6df763fafcc07131d46fa4a3bd59245b64:/midend.c diff --git a/midend.c b/midend.c index 47d9b2c..250a479 100644 --- a/midend.c +++ b/midend.c @@ -212,7 +212,7 @@ static void midend_size_new_drawstate(midend *me) } } -void midend_size(midend *me, int *x, int *y, int expand) +void midend_size(midend *me, int *x, int *y, int user_size) { int min, max; int rx, ry; @@ -230,11 +230,14 @@ void midend_size(midend *me, int *x, int *y, int expand) /* * Find the tile size that best fits within the given space. If - * `expand' is TRUE, we must actually find the _largest_ such - * tile size; otherwise, we bound above at the game's preferred - * tile size. + * `user_size' is TRUE, we must actually find the _largest_ such + * tile size, in order to get as close to the user's explicit + * request as possible; otherwise, we bound above at the game's + * preferred tile size, so that the game gets what it wants + * provided that this doesn't break the constraint from the + * front-end (which is likely to be a screen size or similar). */ - if (expand) { + if (user_size) { max = 1; do { max *= 2; @@ -264,6 +267,9 @@ void midend_size(midend *me, int *x, int *y, int expand) */ me->tilesize = min; + if (user_size) + /* If the user requested a change in size, make it permanent. */ + me->preferred_tilesize = me->tilesize; midend_size_new_drawstate(me); *x = me->winwidth; *y = me->winheight; @@ -550,6 +556,7 @@ static int midend_really_process_key(midend *me, int x, int y, int button) * state has been updated and a redraw is called for. */ midend_redraw(me); + midend_set_timer(me); goto done; } else if (s) { midend_stop_anim(me); @@ -739,8 +746,21 @@ void midend_redraw(midend *me) } } +/* + * Nasty hacky function used to implement the --redo option in + * gtk.c. Only used for generating the puzzles' icons. + */ +void midend_freeze_timer(midend *me, float tprop) +{ + me->anim_pos = me->anim_time * tprop; + midend_redraw(me); + deactivate_timer(me->frontend); +} + void midend_timer(midend *me, float tplus) { + int need_redraw = (me->anim_time > 0 || me->flash_time > 0); + me->anim_pos += tplus; if (me->anim_pos >= me->anim_time || me->anim_time == 0 || !me->oldstate) { @@ -753,7 +773,8 @@ void midend_timer(midend *me, float tplus) me->flash_pos = me->flash_time = 0; } - midend_redraw(me); + if (need_redraw) + midend_redraw(me); if (me->timing) { float oldelapsed = me->elapsed;