From e52ff7c04f549811b266a97c926a582f9d102cd2 Mon Sep 17 00:00:00 2001 From: S4NKALP Date: Thu, 23 Jul 2026 14:46:44 +0545 Subject: [PATCH] fix(osd/brightness): animate one block per key press MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Track previous block count and move ±1 block per signal so bar never jumps 2 blocks. First display jumps to actual value. Reduce block count to 15. --- src/window/osd/components/brightness.py | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/window/osd/components/brightness.py b/src/window/osd/components/brightness.py index b02a292..286ecb0 100644 --- a/src/window/osd/components/brightness.py +++ b/src/window/osd/components/brightness.py @@ -14,6 +14,7 @@ class BrightnessOSDContainer(BaseOSDContainer): super().__init__(window, **kwargs) self.brightness_service = Brightness() self._last_percent = None + self._last_blocks = None self._setup_specific_components() self._connect_specific_signals() @@ -31,7 +32,7 @@ class BrightnessOSDContainer(BaseOSDContainer): value=70, min_value=0, max_value=100, - block_count=20, + block_count=15, block_spacing=2.0, block_height=10.0, block_radius=0.0, @@ -54,7 +55,9 @@ class BrightnessOSDContainer(BaseOSDContainer): raw = self.brightness_service.screen_brightness max_br = self.brightness_service.max_screen self._last_percent = int((raw / max_br) * 100) if max_br > 0 and raw >= 0 else 0 - self.scale.set_value(self._last_percent) + block_size = 100 / self.scale._block_count + self._last_blocks = int(self._last_percent / block_size) + self.scale.set_value(self._last_blocks * block_size) self._update_display() def _update_display(self): @@ -65,10 +68,24 @@ class BrightnessOSDContainer(BaseOSDContainer): int((raw / max_br) * 100) if max_br > 0 and raw >= 0 else 0 ) percent = self._last_percent + block_size = 100 / self.scale._block_count + target_blocks = int(percent / block_size) + + if self._last_blocks is None: + display_blocks = target_blocks + elif target_blocks > self._last_blocks: + display_blocks = self._last_blocks + 1 + elif target_blocks < self._last_blocks: + display_blocks = self._last_blocks - 1 + else: + display_blocks = self._last_blocks + + self._last_blocks = display_blocks + snapped = display_blocks * block_size level = 0 if percent == 0 else min(math.ceil(percent / 33), 3) self.osd_window_image.set_from_file(f"brightness/brightness-{level}.svg") - self.scale.animate_value(percent) + self.scale.animate_value(snapped) def update(self, *_): self._update_display()