ref: d1ffb55d264fe082d01cf1520fa84f3415565492
parent: 261a784d1ebbbaff5123c6cfc4b64c3dbe6a2046
author: Simon Tatham <anakin@pobox.com>
date: Wed Jan 9 03:04:24 EST 2013
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]
--- a/pattern.c
+++ b/pattern.c
@@ -1310,11 +1310,11 @@
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 @@
* 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 @@
} 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 @@
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);
}
}