ref: 8a8474a31191804890c2fed03173832f0d81d81e
parent: 733e3c6bc741cd1322b00545f600a548fac32563
author: Simon Tatham <anakin@pobox.com>
date: Fri Sep 23 08:50:51 EDT 2005
Use game_set_size() to set up the temporary drawstate in game_print(), wherever feasible. This fixes a specific bug in Loopy (James H's new field ds->linewidth wasn't being set up, leading to corrupted print output), but I've made the change in all affected files because it also seems like a generally good idea to encourage it for future games, to prevent other problems of this type. There is one slight snag, which is that Map _can't_ do this because its game_set_size() also initialises a blitter. I could fix this by abstracting the common parts of Map's game_set_size() out into a subfunction called by game_set_size() and also called directly by game_print(); alternatively, I could introduce a means of determining whether a `drawing *' was for screen or printing use. Not sure which yet. [originally from svn r6340]
--- a/dominosa.c
+++ b/dominosa.c
@@ -1711,7 +1711,7 @@
/* Ick: fake up `ds->tilesize' for macro expansion purposes */
game_drawstate ads, *ds = &ads;
- ads.tilesize = tilesize;
+ game_set_size(dr, ds, NULL, tilesize);
c = print_mono_colour(dr, 1); assert(c == COL_BACKGROUND);
c = print_mono_colour(dr, 0); assert(c == COL_TEXT);
--- a/lightup.c
+++ b/lightup.c
@@ -2175,8 +2175,7 @@
/* Ick: fake up `ds->tilesize' for macro expansion purposes */
game_drawstate ads, *ds = &ads;
- ads.tilesize = tilesize;
- ds->crad = 3*(tilesize-1)/8;
+ game_set_size(dr, ds, NULL, tilesize);
/*
* Border.
--- a/loopy.c
+++ b/loopy.c
@@ -2668,7 +2668,8 @@
int ink = print_mono_colour(dr, 0);
int x, y;
game_drawstate ads, *ds = &ads;
- ds->tilesize = tilesize;
+
+ game_set_size(dr, ds, NULL, tilesize);
/*
* Dots. I'll deliberately make the dots a bit wider than the
--- a/map.c
+++ b/map.c
@@ -2956,6 +2956,7 @@
/* Ick: fake up `ds->tilesize' for macro expansion purposes */
struct { int tilesize; } ads, *ds = &ads;
+ /* We can't call game_set_size() here because we don't want a blitter */
ads.tilesize = tilesize;
ink = print_mono_colour(dr, 0);
--- a/net.c
+++ b/net.c
@@ -2773,7 +2773,7 @@
/* Ick: fake up `ds->tilesize' for macro expansion purposes */
game_drawstate ads, *ds = &ads;
- ads.tilesize = tilesize;
+ game_set_size(dr, ds, NULL, tilesize);
/*
* Border.
--- a/pattern.c
+++ b/pattern.c
@@ -1199,7 +1199,7 @@
/* Ick: fake up `ds->tilesize' for macro expansion purposes */
game_drawstate ads, *ds = &ads;
- ads.tilesize = tilesize;
+ game_set_size(dr, ds, NULL, tilesize);
/*
* Border.
--- a/rect.c
+++ b/rect.c
@@ -2791,7 +2791,7 @@
/* Ick: fake up `ds->tilesize' for macro expansion purposes */
game_drawstate ads, *ds = &ads;
- ads.tilesize = tilesize;
+ game_set_size(dr, ds, NULL, tilesize);
/*
* Border.
--- a/slant.c
+++ b/slant.c
@@ -2001,7 +2001,7 @@
/* Ick: fake up `ds->tilesize' for macro expansion purposes */
game_drawstate ads, *ds = &ads;
- ads.tilesize = tilesize;
+ game_set_size(dr, ds, NULL, tilesize);
/*
* Border.
--- a/solo.c
+++ b/solo.c
@@ -3009,7 +3009,7 @@
/* Ick: fake up `ds->tilesize' for macro expansion purposes */
game_drawstate ads, *ds = &ads;
- ads.tilesize = tilesize;
+ game_set_size(dr, ds, NULL, tilesize);
/*
* Border.