2 # This just unifies some logic.
3 # There is no implied container / window system (yet)
5 import pygame.locals as pgl
7 from .loader import loader
8 from .constants import FONTS
9 from .transforms import NullTransform
14 def __init__(self, size, name=None, pos=None, padding=10):
16 self._padding = padding
25 def position(self, pos):
28 self._min_x = pos[0] - self._padding
29 self._max_x = pos[0] + self._size[0] + self._padding
30 self._min_y = pos[1] - self._padding
31 self._max_y = pos[1] + self._size[1] + self._padding
39 def render(self, surface):
42 def pressed(self, ev):
44 # Unplaced buttons can't be pressed
46 if ev.type == pgl.MOUSEBUTTONDOWN and ev.button == 1:
47 if self._min_x < ev.pos[0] < self._max_x:
48 if self._min_y < ev.pos[1] < self._max_y:
53 class SpacerButton(Button):
54 """ Add a nothing object which can be used to space other things,
55 but is never pressed """
57 def pressed(self, ev):
61 class TextButton(Button):
63 def __init__(self, text, colour, name=None, pos=None, padding=10):
64 font = loader.load_font(FONTS['sans'], size=24)
65 self._text = font.render(text, True, colour)
66 super(TextButton, self).__init__(self._text.get_size(), name,
69 def render(self, surface):
70 surface.blit(self._text, self._pos, None)
73 class ImageButton(Button):
75 def __init__(self, *imgparts, **kwargs):
76 transform = kwargs.pop("transform", NullTransform())
77 self._img = kwargs.pop("image", None)
79 self._img = loader.load_image(*imgparts, transform=transform)
80 name = kwargs.get('name')
81 pos = kwargs.get('pos')
82 padding = kwargs.get('padding', 0)
83 super(ImageButton, self).__init__(self._img.get_size(), name,
86 def update_image(self, *imgparts, **kwargs):
87 transform = kwargs.pop("transform", NullTransform())
88 self._img = loader.load_image(*imgparts, transform=transform)
90 def render(self, surface):
91 surface.blit(self._img, self._pos, None)