diff options
Diffstat (limited to 'degesch.c')
| -rw-r--r-- | degesch.c | 19 | 
1 files changed, 13 insertions, 6 deletions
@@ -51,6 +51,7 @@ enum  #include "common.c"  #include "kike-replies.c" +#include <math.h>  #include <langinfo.h>  #include <locale.h>  #include <pwd.h> @@ -2108,17 +2109,23 @@ filter_color_cube_for_acceptable_nick_colors (size_t *len)  	// This is a pure function and we don't use threads, static storage is fine  	static int table[6 * 6 * 6];  	size_t len_counter = 0; -	for (int x = 0; x < 6 * 6 * 6; x++) +	for (int x = 0; x < N_ELEMENTS (table); x++)  	{ -		// FIXME this isn't exactly right, the values aren't linear  		int r =  x / 36;  		int g = (x / 6) % 6;  		int b = (x % 6); -		// Use the luma value of colours within the cube to filter colours that -		// look okay-ish on terminals with both black and white backgrounds -		double luma = 0.2126 * r / 6. + 0.7152 * g / 6. + 0.0722 * b / 6.; -		if (luma >= .3 && luma <= .5) +		// The first step is 95/255, the rest are 40/255, +		// as an approximation we can double the first step +		double linear_R = pow ((r + !!r) / 6., 2.2); +		double linear_G = pow ((g + !!g) / 6., 2.2); +		double linear_B = pow ((b + !!b) / 6., 2.2); + +		// Use the relative luminance of colours within the cube to filter +		// colours that look okay-ish on terminals with both black and white +		// backgrounds (use the test-nick-colors script to calibrate) +		double Y = 0.2126 * linear_R + 0.7152 * linear_G + 0.0722 * linear_B; +		if (Y >= .25 && Y <= .4)  			table[len_counter++] = 16 + x;  	}  	*len = len_counter;  | 
