From ea9154d631d500f1fbb42b3861a1d3487117b051 Mon Sep 17 00:00:00 2001 From: mar77i Date: Tue, 11 Feb 2025 09:12:24 +0100 Subject: [PATCH] fix method order to be handle_event, update, draw. handle windowexposed and activeevent irrespective of focus --- ui/base.py | 17 +++++++---------- ui/scroll.py | 32 ++++++++++++++++---------------- ui/switch.py | 8 ++++---- 3 files changed, 27 insertions(+), 30 deletions(-) diff --git a/ui/base.py b/ui/base.py index 117837f..3eb6a3d 100644 --- a/ui/base.py +++ b/ui/base.py @@ -137,19 +137,16 @@ class Root(FocusRootMixin, Parent): self.stop_event = False self.root = self - def handle_quit(self, _): + def handle_quit(self, _=None): self.running = False - def handle_windowexposed(self, _): - self.dirty = True + KEY_METHODS = {frozenset(set()): {pygame.K_ESCAPE: handle_quit}} - handle_activeevent = handle_windowexposed - - def key_escape(self): - if self.active: - self.running = False - - KEY_METHODS = {frozenset(set()): {pygame.K_ESCAPE: key_escape}} + def handle_event(self, ev): + if ev.type in (pygame.WINDOWEXPOSED, pygame.ACTIVEEVENT): + self.dirty = True + return + super().handle_event(ev) def draw(self): if hasattr(self, "BACKGROUND_COLOR"): diff --git a/ui/scroll.py b/ui/scroll.py index 577021a..6a98cf0 100644 --- a/ui/scroll.py +++ b/ui/scroll.py @@ -11,6 +11,22 @@ class Scroll(Parent, Child): self.scroll_x = 0 self.scroll_y = 0 + def handle_event(self, ev): + if hasattr(ev, "pos"): + if not self.rect.collidepoint(ev.pos): + return + ev = pygame.event.Event( + ev.type, + { + **ev.__dict__, + "pos": ( + ev.pos[0] - self.rect.left + self.scroll_x, + ev.pos[1] - self.rect.top + self.scroll_y, + ) + }, + ) + super().handle_event(ev) + @property def surf(self): return self._surf @@ -31,19 +47,3 @@ class Scroll(Parent, Child): super().draw() pygame.draw.rect(self.parent.surf, "gray", self.rect) self.root.surf.blit(self.get_subsurf(), self.rect.topleft) - - def handle_event(self, ev): - if hasattr(ev, "pos"): - if not self.rect.collidepoint(ev.pos): - return - ev = pygame.event.Event( - ev.type, - { - **ev.__dict__, - "pos": ( - ev.pos[0] - self.rect.left + self.scroll_x, - ev.pos[1] - self.rect.top + self.scroll_y, - ) - }, - ) - super().handle_event(ev) diff --git a/ui/switch.py b/ui/switch.py index 634ca68..14279db 100644 --- a/ui/switch.py +++ b/ui/switch.py @@ -44,6 +44,10 @@ class Switch(Child): self.moving_since = nan self.flip_again = False + def update(self): + if self.moving_since is not nan: + self.dirty = True + def draw(self): pygame.draw.rect(self.surf, "gray", self.rect, 8) t = time() @@ -82,10 +86,6 @@ class Switch(Child): base_radius ) - def update(self): - if self.moving_since is not nan: - self.dirty = True - def set_value(self, value): if value == self.value: return -- 2.51.0