ref: fd98870bfff67c050fe4646b9bd03b4fdea698f9
parent: 540716194dd2ee5917acb25e4deed94a9ee939f2
author: Simon Tatham <anakin@pobox.com>
date: Thu Feb 3 14:49:19 EST 2011
The printing function in Bridges was unable to cope with more than two bridges between a pair of islands! Good grief. How did we never spot that before? [originally from svn r9083]
--- a/bridges.c
+++ b/bridges.c
@@ -2735,7 +2735,7 @@
int ink = print_mono_colour(dr, 0);
int paper = print_mono_colour(dr, 1);
int x, y, cx, cy, i, nl;
- int loff = ts/8;
+ int loff;
grid_type grid;
/* Ick: fake up `ds->tilesize' for macro expansion purposes */
@@ -2745,6 +2745,7 @@
/* I don't think this wants a border. */
/* Bridges */
+ loff = ts / (8 * sqrt((state->params.maxb - 1)));
print_line_width(dr, ts / 12);
for (x = 0; x < state->w; x++) {
for (y = 0; y < state->h; y++) {
@@ -2754,20 +2755,14 @@
if (grid & G_ISLAND) continue;
if (grid & G_LINEV) {
- if (nl > 1) {
- draw_line(dr, cx+ts/2-loff, cy, cx+ts/2-loff, cy+ts, ink);
- draw_line(dr, cx+ts/2+loff, cy, cx+ts/2+loff, cy+ts, ink);
- } else {
- draw_line(dr, cx+ts/2, cy, cx+ts/2, cy+ts, ink);
- }
+ for (i = 0; i < nl; i++)
+ draw_line(dr, cx+ts/2+(2*i-nl+1)*loff, cy,
+ cx+ts/2+(2*i-nl+1)*loff, cy+ts, ink);
}
if (grid & G_LINEH) {
- if (nl > 1) {
- draw_line(dr, cx, cy+ts/2-loff, cx+ts, cy+ts/2-loff, ink);
- draw_line(dr, cx, cy+ts/2+loff, cx+ts, cy+ts/2+loff, ink);
- } else {
- draw_line(dr, cx, cy+ts/2, cx+ts, cy+ts/2, ink);
- }
+ for (i = 0; i < nl; i++)
+ draw_line(dr, cx, cy+ts/2+(2*i-nl+1)*loff,
+ cx+ts, cy+ts/2+(2*i-nl+1)*loff, ink);
}
}
}