diff options
| author | Simon Tatham <anakin@pobox.com> | 2005-06-07 17:57:50 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2005-06-07 17:57:50 +0000 |
| commit | 02035753f817173a6861d1fc4bec437508cec42d (patch) | |
| tree | ce9bd77bcb19939150b2ffc7b53e2cd599016dd8 /midend.c | |
| parent | 69f7e7f8f5890946f4625fc071eb3f8313b17238 (diff) | |
| download | puzzles-02035753f817173a6861d1fc4bec437508cec42d.zip puzzles-02035753f817173a6861d1fc4bec437508cec42d.tar.gz puzzles-02035753f817173a6861d1fc4bec437508cec42d.tar.bz2 puzzles-02035753f817173a6861d1fc4bec437508cec42d.tar.xz | |
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]
Diffstat (limited to 'midend.c')
| -rw-r--r-- | midend.c | 17 |
1 files changed, 15 insertions, 2 deletions
@@ -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) |