def __init__(self, root, rect, message):
super().__init__(root)
self.rect = rect
- self.message = message
self.label = Label(root, pygame.Rect(rect.center, (10, 10)), "")
self.children.extend((self.label, *self.get_buttons()))
+ self.message = message
def get_buttons(self):
rect = self.rect
pygame.draw.rect(self.surf, "black", self.rect)
pygame.draw.rect(self.surf, "gray", self.rect, 1)
- def activate(self):
- self.update_message()
- super().activate()
+ @property
+ def message(self):
+ return self.label.value
- def update_message(self):
- if self.message == self.label.value:
+ @message.setter
+ def message(self, message):
+ if message == self.label.value:
return
rect = self.rect
- self.label.value = self.message
- fs_size = self.font.size(self.message)
+ self.label.value = message
+ fs_size = self.font.size(message)
label_rect = pygame.Rect(
rect.topleft,
(rect.width, rect.height * 3 // 4),
def __init__(self, root):
super().__init__(root)
self.backsurf = None
- self.tint = True
self.children = []
+ self.active = False
+ self.draw = self._check_active(self.draw)
+ self.update = self._check_active(self.update)
+ self.handle_event = self._check_active(self.handle_event)
+ self.activate = self._check_active(self.activate, False)
+ self.deactivate = self._check_active(self.deactivate)
+
+ def _check_active(self, method, cmp=True):
+ def inner(*args, **kwargs):
+ if self.active is cmp:
+ return method(*args, **kwargs)
+ return None
+ return inner
def draw(self):
self.surf.blit(self.backsurf, (0, 0))
- if not self.tint:
- return
- tintsurf = pygame.Surface(self.surf.get_size(), pygame.SRCALPHA, 32)
+
+ @staticmethod
+ def tinted_copy(surf):
+ surf = surf.copy()
+ tintsurf = pygame.Surface(surf.get_size(), pygame.SRCALPHA, 32)
tintsurf.fill(pygame.Color(0x00000080))
- self.surf.blit(tintsurf, (0, 0))
+ surf.blit(tintsurf, (0, 0))
+ return surf
- def activate(self):
- self.backsurf = self.root.surf.copy()
+ def swap_children(self):
children = self.children.copy()
self.children.clear()
self.children.extend(self.root.children)
self.root.children.clear()
- self.root.children.append(self)
self.root.children.extend(children)
+
+ def activate(self):
+ self.backsurf = self.tinted_copy(self.root.surf)
+ self.swap_children()
+ self.root.children.insert(0, self)
+ self.active = True
self.root.stop_event = True
self.dirty = True
def deactivate(self):
- children = self.root.children.copy()
- self.root.children.clear()
- self.root.children.extend(self.children)
- self.children.clear()
- self.children.extend(children)
+ self.backsurf = None
+ self.swap_children()
+ self.active = False
self.root.stop_event = True
self.dirty = True