~mdw
/
sgt
/
puzzles
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
James Harvey's patch to support keyboard control in Same Game.
[sgt/puzzles]
/
midend.c
diff --git
a/midend.c
b/midend.c
index
b6b1720
..
f4eeb61
100644
(file)
--- a/
midend.c
+++ b/
midend.c
@@
-48,6
+48,8
@@
struct midend_data {
char *laststatus;
int pressed_mouse_button;
char *laststatus;
int pressed_mouse_button;
+
+ int winwidth, winheight;
};
#define ensure(me) do { \
};
#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->laststatus = NULL;
me->timing = FALSE;
me->elapsed = 0.0F;
+ me->winwidth = me->winheight = 0;
sfree(randseed);
sfree(randseed);
@@
-134,9
+137,11
@@
void midend_free(midend_data *me)
sfree(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)
}
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);
}
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);
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);
}
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);
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)
me->elapsed = 0.0F;
midend_set_timer(me);
if (me->ui)
@@
-228,6
+241,10
@@
void midend_new_game(midend_data *me)
static int midend_undo(midend_data *me)
{
if (me->statepos > 1) {
static int midend_undo(midend_data *me)
{
if (me->statepos > 1) {
+ if (me->ui)
+ me->ourgame->changed_state(me->ui,
+ me->states[me->statepos-1].state,
+ me->states[me->statepos-2].state);
me->statepos--;
me->dir = -1;
return 1;
me->statepos--;
me->dir = -1;
return 1;
@@
-238,6
+255,10
@@
static int midend_undo(midend_data *me)
static int midend_redo(midend_data *me)
{
if (me->statepos < me->nstates) {
static int midend_redo(midend_data *me)
{
if (me->statepos < me->nstates) {
+ if (me->ui)
+ me->ourgame->changed_state(me->ui,
+ me->states[me->statepos-1].state,
+ me->states[me->statepos].state);
me->statepos++;
me->dir = +1;
return 1;
me->statepos++;
me->dir = +1;
return 1;
@@
-308,6
+329,10
@@
void midend_restart_game(midend_data *me)
me->states[me->nstates].state = s;
me->states[me->nstates].special = TRUE; /* we just restarted */
me->statepos = ++me->nstates;
me->states[me->nstates].state = s;
me->states[me->nstates].special = TRUE; /* we just restarted */
me->statepos = ++me->nstates;
+ if (me->ui)
+ me->ourgame->changed_state(me->ui,
+ me->states[me->statepos-2].state,
+ me->states[me->statepos-1].state);
me->anim_time = 0.0;
midend_finish_move(me);
midend_redraw(me);
me->anim_time = 0.0;
midend_finish_move(me);
midend_redraw(me);
@@
-936,6
+961,10
@@
char *midend_solve(midend_data *me)
me->states[me->nstates].state = s;
me->states[me->nstates].special = TRUE; /* created using solve */
me->statepos = ++me->nstates;
me->states[me->nstates].state = s;
me->states[me->nstates].special = TRUE; /* created using solve */
me->statepos = ++me->nstates;
+ if (me->ui)
+ me->ourgame->changed_state(me->ui,
+ me->states[me->statepos-2].state,
+ me->states[me->statepos-1].state);
me->anim_time = 0.0;
midend_finish_move(me);
midend_redraw(me);
me->anim_time = 0.0;
midend_finish_move(me);
midend_redraw(me);