From 9c436e19df7a3163ff416a412828a7dae97c7242 Mon Sep 17 00:00:00 2001 From: Colin Shorts Date: Wed, 26 Nov 2025 18:06:37 +0000 Subject: [PATCH 1/2] feat: Add vertical progress bar --- library/lcd/lcd_comm.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/library/lcd/lcd_comm.py b/library/lcd/lcd_comm.py index 4e2714fe..9de85b98 100644 --- a/library/lcd/lcd_comm.py +++ b/library/lcd/lcd_comm.py @@ -356,11 +356,19 @@ def DisplayProgressBar(self, x: int, y: int, width: int, height: int, min_value: bar_image = bar_image.crop(box=(x, y, x + width, y + height)) # Draw progress bar - bar_filled_width = (value / (max_value - min_value) * width) - 1 - if bar_filled_width < 0: - bar_filled_width = 0 + if width > height: + bar_filled_width = (value / (max_value - min_value) * width) - 1 + if bar_filled_width < 0: + bar_filled_width = 0 + else: + bar_filled_height = (value / (max_value - min_value) * height) - 1 + if bar_filled_height < 0: + bar_filled_height = 0 draw = ImageDraw.Draw(bar_image) - draw.rectangle([0, 0, bar_filled_width, height - 1], fill=bar_color, outline=bar_color) + if width > height: + draw.rectangle([0, 0, bar_filled_width, height - 1], fill=bar_color, outline=bar_color) + else: + draw.rectangle([0, height - bar_filled_height, width - 1, height - 1], fill=bar_color, outline=bar_color) if bar_outline: # Draw outline From d5a2f27d04e75126e16a3c7109201d2548b9d767 Mon Sep 17 00:00:00 2001 From: Colin Shorts Date: Fri, 28 Nov 2025 17:50:17 +0000 Subject: [PATCH 2/2] feat: Add inverse direction for progress bar --- library/lcd/lcd_comm.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/library/lcd/lcd_comm.py b/library/lcd/lcd_comm.py index 9de85b98..f53746d4 100644 --- a/library/lcd/lcd_comm.py +++ b/library/lcd/lcd_comm.py @@ -332,6 +332,16 @@ def DisplayProgressBar(self, x: int, y: int, width: int, height: int, min_value: bar_color = parse_color(bar_color) background_color = parse_color(background_color) + inverse = False + # Assume we want to invert the direction is width or height are negative + if width < 0: + inverse = True + width = width * -1 + + if height < 0: + inverse = True + height = height * -1 + assert x <= self.get_width(), 'Progress bar X coordinate must be <= display width' assert y <= self.get_height(), 'Progress bar Y coordinate must be <= display height' assert x + width <= self.get_width(), 'Progress bar width exceeds display width' @@ -366,9 +376,15 @@ def DisplayProgressBar(self, x: int, y: int, width: int, height: int, min_value: bar_filled_height = 0 draw = ImageDraw.Draw(bar_image) if width > height: - draw.rectangle([0, 0, bar_filled_width, height - 1], fill=bar_color, outline=bar_color) + if inverse is True: + draw.rectangle([width - bar_filled_width, 0, width -1, height - 1], fill=bar_color, outline=bar_color) + else: + draw.rectangle([0, 0, bar_filled_width, height - 1], fill=bar_color, outline=bar_color) else: - draw.rectangle([0, height - bar_filled_height, width - 1, height - 1], fill=bar_color, outline=bar_color) + if inverse is True: + draw.rectangle([0, 0, width - 1, height - bar_filled_height], fill=bar_color, outline=bar_color) + else: + draw.rectangle([0, bar_filled_height, width - 1, height - 1], fill=bar_color, outline=bar_color) if bar_outline: # Draw outline