diff options
| author | Simon Tatham <anakin@pobox.com> | 2005-06-24 16:35:27 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2005-06-24 16:35:27 +0000 |
| commit | b873c87c37695433f3830a92d79ca40e42d008a2 (patch) | |
| tree | 2b925f552006f391c2f8797822e4fa3dec013e7e | |
| parent | 31d96181a82a4f950a510c5512ffd58429dce389 (diff) | |
| download | puzzles-b873c87c37695433f3830a92d79ca40e42d008a2.zip puzzles-b873c87c37695433f3830a92d79ca40e42d008a2.tar.gz puzzles-b873c87c37695433f3830a92d79ca40e42d008a2.tar.bz2 puzzles-b873c87c37695433f3830a92d79ca40e42d008a2.tar.xz | |
More patches from James Harvey: enforce a maximum brightness in the
background colour (to ensure white pegs show up against it), and
convert the keyboard-control cursor into a rectangle when it's over
the hint pegs (otherwise it looks rather silly for numbers of pegs
above 4).
[originally from svn r6010]
| -rw-r--r-- | guess.c | 55 |
1 files changed, 40 insertions, 15 deletions
@@ -401,6 +401,7 @@ static void game_changed_state(game_ui *ui, game_state *oldstate, #define HINTSZ (ds->hintsz) #define HINTOFF (ds->hintsz + ds->gapsz) +#define GAP (ds->gapsz) #define CGAP (ds->gapsz / 2) #define PEGRAD (ds->pegrad) @@ -424,7 +425,7 @@ static void game_changed_state(game_ui *ui, game_state *oldstate, #define HINT_OY (GUESS_OY + (PEGSZ - HINTOFF - HINTSZ) / 2) #define HINT_X(g) HINT_OX #define HINT_Y(g) (HINT_OY + (g)*PEGOFF) -#define HINT_W (ds->hintw*HINTOFF) +#define HINT_W ((ds->hintw*HINTOFF) - GAP) #define HINT_H GUESS_H #define SOLN_OX GUESS_OX @@ -765,7 +766,8 @@ static void game_size(game_params *params, game_drawstate *ds, static float *game_colours(frontend *fe, game_state *state, int *ncolours) { - float *ret = snewn(3 * NCOLOURS, float); + float *ret = snewn(3 * NCOLOURS, float), max; + int i; frontend_default_colour(fe, &ret[COL_BACKGROUND * 3]); @@ -835,10 +837,6 @@ static float *game_colours(frontend *fe, game_state *state, int *ncolours) ret[COL_HOLD * 3 + 1] = 0.5F; ret[COL_HOLD * 3 + 2] = 0.5F; - ret[COL_EMPTY * 3 + 0] = ret[COL_BACKGROUND * 3 + 0] * 2.0 / 3.0; - ret[COL_EMPTY * 3 + 1] = ret[COL_BACKGROUND * 3 + 1] * 2.0 / 3.0; - ret[COL_EMPTY * 3 + 2] = ret[COL_BACKGROUND * 3 + 2] * 2.0 / 3.0; - ret[COL_CORRECTPLACE*3 + 0] = 0.0F; ret[COL_CORRECTPLACE*3 + 1] = 0.0F; ret[COL_CORRECTPLACE*3 + 2] = 0.0F; @@ -847,6 +845,25 @@ static float *game_colours(frontend *fe, game_state *state, int *ncolours) ret[COL_CORRECTCOLOUR*3 + 1] = 1.0F; ret[COL_CORRECTCOLOUR*3 + 2] = 1.0F; + /* We want to make sure we can distinguish COL_CORRECTCOLOUR + * (which we hard-code as white) from COL_BACKGROUND (which + * could default to white on some platforms). + * Code borrowed from fifteen.c. */ + max = ret[COL_BACKGROUND*3]; + for (i = 1; i < 3; i++) + if (ret[COL_BACKGROUND*3+i] > max) + max = ret[COL_BACKGROUND*3+i]; + if (max * 1.2F > 1.0F) { + for (i = 0; i < 3; i++) + ret[COL_BACKGROUND*3+i] /= (max * 1.2F); + } + + /* We also want to be able to tell the difference between BACKGROUND + * and EMPTY, for similar distinguishing-hint reasons. */ + ret[COL_EMPTY * 3 + 0] = ret[COL_BACKGROUND * 3 + 0] * 2.0 / 3.0; + ret[COL_EMPTY * 3 + 1] = ret[COL_BACKGROUND * 3 + 1] * 2.0 / 3.0; + ret[COL_EMPTY * 3 + 2] = ret[COL_BACKGROUND * 3 + 2] * 2.0 / 3.0; + *ncolours = NCOLOURS; return ret; } @@ -988,10 +1005,14 @@ static void hint_redraw(frontend *fe, game_drawstate *ds, int guess, } if (need_redraw) { + int hinth = HINTSZ + GAP + HINTSZ; + int hx,hy,hw,hh; + + hx = HINT_X(guess)-GAP; hy = HINT_Y(guess)-GAP; + hw = HINT_W+GAP*2; hh = hinth+GAP*2; + /* erase a large background rectangle */ - draw_rect(fe, GUESS_X(guess, dest->npegs)-CGAP, - GUESS_Y(guess, dest->npegs)-CGAP, - PEGSZ+CGAP*2, PEGSZ+CGAP*2, COL_BACKGROUND); + draw_rect(fe, hx, hy, hw, hh, COL_BACKGROUND); for (i = 0; i < dest->npegs; i++) { scol = src ? src->feedback[i] : 0; @@ -1014,13 +1035,17 @@ static void hint_redraw(frontend *fe, game_drawstate *ds, int guess, draw_rect(fe, rowx, rowy, HINTSZ, HINTSZ, col); } } - if (cursor) - draw_cursor(fe, ds, GUESS_X(guess, dest->npegs), - GUESS_Y(guess, dest->npegs)); + if (cursor) { + int x1,y1,x2,y2; + x1 = hx + CGAP; y1 = hy + CGAP; + x2 = hx + hw - CGAP; y2 = hy + hh - CGAP; + draw_line(fe, x1, y1, x2, y1, COL_CURSOR); + draw_line(fe, x2, y1, x2, y2, COL_CURSOR); + draw_line(fe, x2, y2, x1, y2, COL_CURSOR); + draw_line(fe, x1, y2, x1, y1, COL_CURSOR); + } - draw_update(fe, GUESS_X(guess, dest->npegs)-CGAP, - GUESS_Y(guess, dest->npegs)-CGAP, - PEGSZ+CGAP*2, PEGSZ+CGAP*2); + draw_update(fe, hx, hy, hw, hh); } } |