xiwal

Generate terminal color schemes
git clone https://git.ce9e.org/xiwal.git

commit
a84eabfda17d05042aba8eee37d13839029020c9
parent
58402d3779c4589f1afe7e9d16da710edd30b7e3
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2019-11-15 08:32
fix scoring

Diffstat

M wal/scheme.py 33 +++++++++++++++++++--------------

1 files changed, 19 insertions, 14 deletions


diff --git a/wal/scheme.py b/wal/scheme.py

@@ -16,6 +16,7 @@ L_LIGHT = 20, 60, 70, 80, 60, 60, 75, 100
   16    16 # hue for red reference color
   17    17 OFFSET = math.pi * 2 / 15
   18    18 
   -1    19 ORDER = [0, 2, 1, 4, 5, 3]
   19    20 
   20    21 def permutate(a, n):
   21    22 	if n == 0:
@@ -26,21 +27,26 @@ def permutate(a, n):
   26    27 				yield (a[i], *rest)
   27    28 
   28    29 
   29    -1 def distance(color, i):
   30    -1 	hue = math.pi / 3 * i + OFFSET
   31    -1 	d = abs(color[2] - hue)
   32    -1 	c = color[1]
   33    -1 	if i in [0, 1]:
   34    -1 		c = max(c, C_RG)
   35    -1 	if d > math.pi:
   36    -1 		d = 2 * math.pi - d
   37    -1 	return d ** 4 * c
   -1    30 def score(colors):
   -1    31 	sum_score = 0
   -1    32 	sum_chroma = 0
   38    33 
   -1    34 	for i, color in enumerate(colors):
   -1    35 		j = ORDER[i]
   39    36 
   40    -1 def score(colors):
   41    -1 	s = sum(distance(c, i) for i, c in enumerate(colors))
   42    -1 	s /= sum(c[1] for c in colors)
   43    -1 	return s
   -1    37 		hue = math.pi / 3 * j + OFFSET
   -1    38 		d = abs(color[2] - hue)
   -1    39 		if d > math.pi:
   -1    40 			d = 2 * math.pi - d
   -1    41 
   -1    42 		c = color[1]
   -1    43 		if j in [0, 1]:
   -1    44 			c = max(c, C_RG)
   -1    45 
   -1    46 		sum_score += d ** 4 * c
   -1    47 		sum_chroma += c
   -1    48 
   -1    49 	return sum_score / sum_chroma
   44    50 
   45    51 
   46    52 def scheme(colors, dominant):
@@ -67,5 +73,4 @@ def colors2scheme(colors):
   67    73 	colors = [lch.from_hex(c) for c in colors]
   68    74 	dominant = colors[0]
   69    75 	colors = min(permutate(colors, 6), key=score)
   70    -1 	colors = [colors[i] for i in [0, 2, 1, 4, 5, 3]]
   71    76 	return [lch.to_hex(c) for c in scheme(colors, dominant)]