from .loader import loader
from .constants import FONTS
-from .transforms import NullTransform
+from .transforms import NullTransform, Multiply
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):
pass
def pressed(self, ev):
+ if not self.enabled:
+ return False
if self._pos is None:
# Unplaced buttons can't be pressed
return False
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):
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)
pos, padding)
def update_image(self, *imgparts, **kwargs):
- transform=kwargs.pop("transform", NullTransform())
+ transform = kwargs.pop("transform", NullTransform())
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)