mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-22 08:25:45 -07:00
All the games in this collection have always defined their graphics
in terms of a constant TILE_SIZE (or equivalent). Here's a surprisingly small patch which switches this constant into a run-time variable. The only observable behaviour change should be on Windows, which physically does not permit the creation of windows larger than the screen; if you try to create a puzzle (Net makes this plausible) large enough to encounter this restriction, the Windows front end should automatically re-adjust the puzzle's tile size so that it does fit within the available space. On GTK, I haven't done this, on the grounds that X _does_ permit windows larger than the screen, and many X window managers already provide the means to navigate around such a window. Gareth said he'd rather navigate around a huge Net window than have it shrunk to fit on one screen. I'm uncertain that this makes sense for all puzzles - Pattern in particular strikes me as something that might be better off shrunk to fit - so I may have to change policy later or make it configurable. On OS X, I also haven't done automatic shrinkage to fit on one screen, largely because I didn't have the courage to address the question of multiple monitors and what that means for the entire concept :-) [originally from svn r5913]
This commit is contained in:
17
midend.c
17
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)
|
||||
|
Reference in New Issue
Block a user