X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=tabakrolletjie%2Fwidgets.py;h=4341c703d717be28ae59a4d1a6a16b056ac01061;hb=b14bf81dd990b26eb646c6a4cfee4469926dd651;hp=2678e72c46cce18b390686ee079dda184ee1e56b;hpb=ae46b53e5c60178f6c24c617f23ec6edfd99a6a0;p=tabakrolletjie.git diff --git a/tabakrolletjie/widgets.py b/tabakrolletjie/widgets.py index 2678e72..4341c70 100644 --- a/tabakrolletjie/widgets.py +++ b/tabakrolletjie/widgets.py @@ -6,7 +6,7 @@ import pygame.locals as pgl from .loader import loader from .constants import FONTS -from .transforms import NullTransform +from .transforms import NullTransform, Multiply class Button(object): @@ -16,6 +16,13 @@ class Button(object): self._padding = padding self.position = pos self.name = name + self.enabled = True + + def enable(self): + self.enabled = True + + def disable(self): + self.enabled = False @property def position(self): @@ -40,6 +47,8 @@ class Button(object): pass def pressed(self, ev): + if not self.enabled: + return False if self._pos is None: # Unplaced buttons can't be pressed return False @@ -50,16 +59,34 @@ class Button(object): return False +class SpacerButton(Button): + """ Add a nothing object which can be used to space other things, + but is never pressed """ + + def pressed(self, ev): + return False + + class TextButton(Button): - def __init__(self, text, colour, name=None, pos=None, padding=10): - font = loader.load_font(FONTS['sans'], size=24) + def __init__( + self, text, colour, name=None, pos=None, padding=10, size=24, + font='sans', centre=False): + font = loader.load_font(FONTS[font], size=size) self._text = font.render(text, True, colour) + if centre: + w, h = self._text.get_size() + pos = pos[0] - (w / 2), pos[1] - (h / 2) + self._disabled_text = self._text.copy() + Multiply(colour=(80, 80, 80)).apply(self._disabled_text) super(TextButton, self).__init__(self._text.get_size(), name, pos, padding) def render(self, surface): - surface.blit(self._text, self._pos, None) + if self.enabled: + surface.blit(self._text, self._pos, None) + else: + surface.blit(self._disabled_text, self._pos, None) class ImageButton(Button): @@ -69,6 +96,9 @@ class ImageButton(Button): self._img = kwargs.pop("image", None) if self._img is None: self._img = loader.load_image(*imgparts, transform=transform) + self._disabled_img = self._img.copy() + disabled_colour = kwargs.pop("disabled_colour", (80, 80, 80)) + Multiply(colour=disabled_colour).apply(self._disabled_img) name = kwargs.get('name') pos = kwargs.get('pos') padding = kwargs.get('padding', 0) @@ -80,4 +110,7 @@ class ImageButton(Button): self._img = loader.load_image(*imgparts, transform=transform) def render(self, surface): - surface.blit(self._img, self._pos, None) + if self.enabled: + surface.blit(self._img, self._pos, None) + else: + surface.blit(self._disabled_img, self._pos, None)