From 753339737ea98fd9caf26a5913f8f210897ef04a Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Wed, 6 Jul 2005 18:27:40 +0000 Subject: [PATCH] Refactoring from James H: the highlight and lowlight colour setup common to Fifteen, Sixteen, Twiddle and Pegs is now a utility function in misc.c. [originally from svn r6076] --- fifteen.c | 21 ++------------------- misc.c | 27 +++++++++++++++++++++++++++ pegs.c | 22 +--------------------- puzzles.h | 4 ++++ sixteen.c | 21 ++------------------- twiddle.c | 18 +----------------- 6 files changed, 37 insertions(+), 76 deletions(-) diff --git a/fifteen.c b/fifteen.c index 3a387bb..3ce9611 100644 --- a/fifteen.c +++ b/fifteen.c @@ -584,28 +584,11 @@ static float *game_colours(frontend *fe, game_state *state, int *ncolours) { float *ret = snewn(3 * NCOLOURS, float); int i; - float max; - frontend_default_colour(fe, &ret[COL_BACKGROUND * 3]); + game_mkhighlight(fe, ret, COL_BACKGROUND, COL_HIGHLIGHT, COL_LOWLIGHT); - /* - * Drop the background colour so that the highlight is - * noticeably brighter than it while still being under 1. - */ - 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); - } - - for (i = 0; i < 3; i++) { - ret[COL_HIGHLIGHT * 3 + i] = ret[COL_BACKGROUND * 3 + i] * 1.2F; - ret[COL_LOWLIGHT * 3 + i] = ret[COL_BACKGROUND * 3 + i] * 0.8F; + for (i = 0; i < 3; i++) ret[COL_TEXT * 3 + i] = 0.0; - } *ncolours = NCOLOURS; return ret; diff --git a/misc.c b/misc.c index 2f8d08d..025083d 100644 --- a/misc.c +++ b/misc.c @@ -169,4 +169,31 @@ unsigned char *hex2bin(const char *in, int outlen) return ret; } +void game_mkhighlight(frontend *fe, float *ret, + int background, int highlight, int lowlight) +{ + float max; + int i; + + frontend_default_colour(fe, &ret[background * 3]); + + /* + * Drop the background colour so that the highlight is + * noticeably brighter than it while still being under 1. + */ + max = ret[background*3]; + for (i = 1; i < 3; i++) + if (ret[background*3+i] > max) + max = ret[background*3+i]; + if (max * 1.2F > 1.0F) { + for (i = 0; i < 3; i++) + ret[background*3+i] /= (max * 1.2F); + } + + for (i = 0; i < 3; i++) { + ret[highlight * 3 + i] = ret[background * 3 + i] * 1.2F; + ret[lowlight * 3 + i] = ret[background * 3 + i] * 0.8F; + } +} + /* vim: set shiftwidth=4 tabstop=8: */ diff --git a/pegs.c b/pegs.c index 0709187..2a03902 100644 --- a/pegs.c +++ b/pegs.c @@ -845,28 +845,8 @@ static void game_set_size(game_drawstate *ds, game_params *params, static float *game_colours(frontend *fe, game_state *state, int *ncolours) { float *ret = snewn(3 * NCOLOURS, float); - int i; - float max; - - frontend_default_colour(fe, &ret[COL_BACKGROUND * 3]); - /* - * Drop the background colour so that the highlight is - * noticeably brighter than it while still being under 1. - */ - 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); - } - - for (i = 0; i < 3; i++) { - ret[COL_HIGHLIGHT * 3 + i] = ret[COL_BACKGROUND * 3 + i] * 1.2F; - ret[COL_LOWLIGHT * 3 + i] = ret[COL_BACKGROUND * 3 + i] * 0.8F; - } + game_mkhighlight(fe, ret, COL_BACKGROUND, COL_HIGHLIGHT, COL_LOWLIGHT); ret[COL_PEG * 3 + 0] = 0.0F; ret[COL_PEG * 3 + 1] = 0.0F; diff --git a/puzzles.h b/puzzles.h index 57b5c33..e35bece 100644 --- a/puzzles.h +++ b/puzzles.h @@ -218,6 +218,10 @@ void obfuscate_bitmap(unsigned char *bmp, int bits, int decode); char *bin2hex(const unsigned char *in, int inlen); unsigned char *hex2bin(const char *in, int outlen); +/* Sets (and possibly dims) background from frontend default colour, + * and auto-generates highlight and lowlight colours too. */ +void game_mkhighlight(frontend *fe, float *ret, + int background, int highlight, int lowlight); /* * version.c diff --git a/sixteen.c b/sixteen.c index 5eb0715..21c10c2 100644 --- a/sixteen.c +++ b/sixteen.c @@ -706,28 +706,11 @@ static float *game_colours(frontend *fe, game_state *state, int *ncolours) { float *ret = snewn(3 * NCOLOURS, float); int i; - float max; - frontend_default_colour(fe, &ret[COL_BACKGROUND * 3]); + game_mkhighlight(fe, ret, COL_BACKGROUND, COL_HIGHLIGHT, COL_LOWLIGHT); - /* - * Drop the background colour so that the highlight is - * noticeably brighter than it while still being under 1. - */ - 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); - } - - for (i = 0; i < 3; i++) { - ret[COL_HIGHLIGHT * 3 + i] = ret[COL_BACKGROUND * 3 + i] * 1.2F; - ret[COL_LOWLIGHT * 3 + i] = ret[COL_BACKGROUND * 3 + i] * 0.8F; + for (i = 0; i < 3; i++) ret[COL_TEXT * 3 + i] = 0.0; - } *ncolours = NCOLOURS; return ret; diff --git a/twiddle.c b/twiddle.c index ac6f385..3e9e74e 100644 --- a/twiddle.c +++ b/twiddle.c @@ -765,27 +765,11 @@ static float *game_colours(frontend *fe, game_state *state, int *ncolours) { float *ret = snewn(3 * NCOLOURS, float); int i; - float max; - frontend_default_colour(fe, &ret[COL_BACKGROUND * 3]); - - /* - * Drop the background colour so that the highlight is - * noticeably brighter than it while still being under 1. - */ - 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); - } + game_mkhighlight(fe, ret, COL_BACKGROUND, COL_HIGHLIGHT, COL_LOWLIGHT); for (i = 0; i < 3; i++) { - ret[COL_HIGHLIGHT * 3 + i] = ret[COL_BACKGROUND * 3 + i] * 1.2F; ret[COL_HIGHLIGHT_GENTLE * 3 + i] = ret[COL_BACKGROUND * 3 + i] * 1.1F; - ret[COL_LOWLIGHT * 3 + i] = ret[COL_BACKGROUND * 3 + i] * 0.8F; ret[COL_LOWLIGHT_GENTLE * 3 + i] = ret[COL_BACKGROUND * 3 + i] * 0.9F; ret[COL_TEXT * 3 + i] = 0.0; } -- 2.30.2