[+] Map ColorProfile to length

This commit is contained in:
Azalea (on HyDEV-Daisy) 2022-04-10 03:19:14 -04:00
parent a2c8e99f39
commit dfe67ecc78

View file

@ -16,3 +16,45 @@ class ColorProfile:
:return: List of RGBs
"""
return [RGB.from_hex(c) for c in self.colors]
def with_weights(self, weights: list[int]) -> list[RGB]:
"""
Map colors based on weights
:param weights: Weights of each color (weights[i] = how many times color[i] appears)
:return:
"""
colors = self.decode()
return [c for i, w in enumerate(weights) for c in [colors[i]] * w]
def with_length(self, length: int) -> list[RGB]:
"""
Spread to a specific length of text
:param length: Length of text
:return: List of RGBs of the length
"""
preset_len = len(self.colors)
center_i = preset_len // 2
# How many copies of each color should be displayed at least?
repeats = length // preset_len
weights = [repeats] * preset_len
# How many extra space left?
extras = length % preset_len
# If there is an even space left, extend the center by one space
if extras % 2 == 1:
extras -= 1
weights[center_i] += 1
# Add weight to border until there's no space left (extras must be even at this point)
border_i = 0
while extras > 0:
extras -= 2
weights[border_i] += 1
weights[-border_i] += 1
border_i += 1
return self.with_weights(weights)