ref: 78c709e2391f0b4dc13af99b68eefd0c99ab6a87
parent: 13a9cb0bea7351132763a25e7d07b2e70ee99dd1
author: Simon Tatham <[email protected]>
date: Mon Nov 20 05:20:46 EST 2006
Patch I've had lurking around for over a year and not remembered to commit: arrange that midend_set_timer(), hence game_timing_state(), is called when the game_ui is changed. This allows timed games to work by obscuring the initial layout until an initial click causes it to be revealed, without requiring that they store that reveal operation as a move in the undo chain. Not that any games actually do this, but it's clearly a sensible thing to want to do: since game_timing_state() _receives_ a game_ui as a parameter, obviously it should be consulted when the game_ui changes. [originally from svn r6914]
--- a/midend.c
+++ b/midend.c
@@ -550,6 +550,7 @@
* 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);
@@ -741,6 +742,8 @@
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 +756,8 @@
me->flash_pos = me->flash_time = 0;
}
- midend_redraw(me);
+ if (need_redraw)
+ midend_redraw(me);
if (me->timing) {
float oldelapsed = me->elapsed;