From 02035753f817173a6861d1fc4bec437508cec42d Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Tue, 7 Jun 2005 17:57:50 +0000 Subject: 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] --- midend.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'midend.c') diff --git a/midend.c b/midend.c index d8960a7..f4eeb61 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) -- cgit v1.1