Pattern's display was broken for non-square puzzles, because

draw_numbers() was considerably confused between the width of the clue
border at the left and the height of the clue border at the top.
Unconfuse it (I think).

[originally from svn r9737]
This commit is contained in:
Simon Tatham
2013-01-09 08:04:24 +00:00
parent 261a784d1e
commit d1ffb55d26

View File

@ -1310,11 +1310,11 @@ static void draw_numbers(drawing *dr, game_drawstate *ds, game_state *state,
if (erase) {
if (i < state->w) {
draw_rect(dr, TOCOORD(state->w, i), 0,
TILE_SIZE, BORDER + TLBORDER(state->w) * TILE_SIZE,
TILE_SIZE, BORDER + TLBORDER(state->h) * TILE_SIZE,
COL_BACKGROUND);
} else {
draw_rect(dr, 0, TOCOORD(state->h, i - state->w),
BORDER + TLBORDER(state->h) * TILE_SIZE, TILE_SIZE,
BORDER + TLBORDER(state->w) * TILE_SIZE, TILE_SIZE,
COL_BACKGROUND);
}
}
@ -1324,7 +1324,11 @@ static void draw_numbers(drawing *dr, game_drawstate *ds, game_state *state,
* tile size. However, if there are more numbers than available
* spaces, I have to squash them up a bit.
*/
nfit = max(rowlen, TLBORDER(state->h))-1;
if (i < state->w)
nfit = TLBORDER(state->h);
else
nfit = TLBORDER(state->w);
nfit = max(rowlen, nfit) - 1;
assert(nfit > 0);
for (j = 0; j < rowlen; j++) {
@ -1338,7 +1342,7 @@ static void draw_numbers(drawing *dr, game_drawstate *ds, game_state *state,
} else {
y = TOCOORD(state->h, i - state->w);
x = BORDER + TILE_SIZE * (TLBORDER(state->w)-1);
x -= ((rowlen-j-1)*TILE_SIZE) * (TLBORDER(state->h)-1) / nfit;
x -= ((rowlen-j-1)*TILE_SIZE) * (TLBORDER(state->w)-1) / nfit;
}
sprintf(str, "%d", rowdata[j]);
@ -1348,10 +1352,10 @@ static void draw_numbers(drawing *dr, game_drawstate *ds, game_state *state,
if (i < state->w) {
draw_update(dr, TOCOORD(state->w, i), 0,
TILE_SIZE, BORDER + TLBORDER(state->w) * TILE_SIZE);
TILE_SIZE, BORDER + TLBORDER(state->h) * TILE_SIZE);
} else {
draw_update(dr, 0, TOCOORD(state->h, i - state->w),
BORDER + TLBORDER(state->h) * TILE_SIZE, TILE_SIZE);
BORDER + TLBORDER(state->w) * TILE_SIZE, TILE_SIZE);
}
}