Patch from Mark Wooding (though somewhat tampered with by me): have

Loopy mark LINE_NO grid edges with very faint lines, instead of
leaving them totally undrawn. Helps in complex grid types where the
line layout isn't entirely obvious to a player not already familiar
with it. Disableable by setting LOOPY_FAINT_LINES=n in the
environment, just in case anyone turns out to seriously dislike it.
(You could probably disable it via LOOPY_COLOUR_6 too, but you'd
have to know the exact shade of your background to get that right.)

[originally from svn r8597]
This commit is contained in:
Simon Tatham
2009-06-21 13:24:48 +00:00
parent 0687980f0c
commit 4ecc4f92d8

22
loopy.c
View File

@ -102,6 +102,7 @@ enum {
COL_HIGHLIGHT, COL_HIGHLIGHT,
COL_MISTAKE, COL_MISTAKE,
COL_SATISFIED, COL_SATISFIED,
COL_FAINT,
NCOLOURS NCOLOURS
}; };
@ -844,6 +845,14 @@ static float *game_colours(frontend *fe, int *ncolours)
ret[COL_SATISFIED * 3 + 1] = 0.0F; ret[COL_SATISFIED * 3 + 1] = 0.0F;
ret[COL_SATISFIED * 3 + 2] = 0.0F; ret[COL_SATISFIED * 3 + 2] = 0.0F;
/* We want the faint lines to be a bit darker than the background.
* Except if the background is pretty dark already; then it ought to be a
* bit lighter. Oy vey.
*/
ret[COL_FAINT * 3 + 0] = ret[COL_BACKGROUND * 3 + 0] * 0.9F;
ret[COL_FAINT * 3 + 1] = ret[COL_BACKGROUND * 3 + 1] * 0.9F;
ret[COL_FAINT * 3 + 2] = ret[COL_BACKGROUND * 3 + 2] * 0.9F;
*ncolours = NCOLOURS; *ncolours = NCOLOURS;
return ret; return ret;
} }
@ -3467,7 +3476,7 @@ static void game_redraw(drawing *dr, game_drawstate *ds, game_state *oldstate,
else if (state->lines[i] == LINE_UNKNOWN) else if (state->lines[i] == LINE_UNKNOWN)
line_colour = COL_LINEUNKNOWN; line_colour = COL_LINEUNKNOWN;
else if (state->lines[i] == LINE_NO) else if (state->lines[i] == LINE_NO)
line_colour = COL_BACKGROUND; line_colour = COL_FAINT;
else if (ds->flashing) else if (ds->flashing)
line_colour = COL_HIGHLIGHT; line_colour = COL_HIGHLIGHT;
else else
@ -3482,7 +3491,16 @@ static void game_redraw(drawing *dr, game_drawstate *ds, game_state *oldstate,
ymin = min(y1, y2); ymin = min(y1, y2);
ymax = max(y1, y2); ymax = max(y1, y2);
if (line_colour != COL_BACKGROUND) { if (line_colour == COL_FAINT) {
static int draw_faint_lines = -1;
if (draw_faint_lines < 0) {
char *env = getenv("LOOPY_FAINT_LINES");
draw_faint_lines = (!env || (env[0] == 'y' ||
env[0] == 'Y'));
}
if (draw_faint_lines)
draw_line(dr, x1, y1, x2, y2, line_colour);
} else {
/* (dx, dy) points roughly from (x1, y1) to (x2, y2). /* (dx, dy) points roughly from (x1, y1) to (x2, y2).
* The line is then "fattened" in a (roughly) perpendicular * The line is then "fattened" in a (roughly) perpendicular
* direction to create a thin rectangle. */ * direction to create a thin rectangle. */