From e225716f52beb30d4bbeeb3a918c35859b21c115 Mon Sep 17 00:00:00 2001 From: Constantin Gierczak--Galle Date: Fri, 15 Dec 2023 10:54:42 +0100 Subject: [PATCH] Add width parameter to bar blend function --- pyjecteur/common.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/pyjecteur/common.py b/pyjecteur/common.py index aa29b52..a9d1776 100644 --- a/pyjecteur/common.py +++ b/pyjecteur/common.py @@ -53,17 +53,22 @@ class Filling(Enum): EXTREMA = 2 # Repeat both extrema values GREATEST = 3 # Repeat the longest color streaks -def blendLedBar(colors: List[Color], - res_length: Optional[int] = LedBarLen, - blending: Optional[InterpType] = InterpType.NEAREST, - filling: Optional[Filling] = Filling.GREATEST, - void_color: Optional[Color] = Color("black")) -> List[Color]: +def widen(colors: List[Color], width: int): + L = [] + map(L.extend, [[e] * width for e in colors]) + return L + +def blendLedBar_simple(colors: List[Color], + res_length: int, + blending: InterpType, + filling: Filling, + void_color: Color) -> List[Color]: total_len = len(colors) (deduped, rep_nb) = remove_duplicates(colors) if len(deduped) > res_length: # After dedup, there are still too many colors. Only show the first ones logging.warning(f"LED bar interpolation: More than {res_length} colors. Dropping colors") - return deduped[:res_length] + return widen(deduped[:res_length], width) if len(colors) > res_length: # TODO: Try and dedup some colors to save space @@ -105,7 +110,11 @@ def blendLedBar(colors: List[Color], if gap == 0: return reduplicate(deduped, rep_nb) - - - - +def blendLedBar(colors: List[Color], + res_length: Optional[int] = LedBarLen, + width: Optional[int] = 1, + blending: Optional[InterpType] = InterpType.NEAREST, + filling: Optional[Filling] = Filling.GREATEST, + void_color: Optional[Color] = Color("black")) -> List[Color]: + return widen(blendLedBar(colors, res_length, blending, filling, void_color), + width)