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
13 def __init__(self, size, name=None, pos=None, padding=10):
15 self._padding = padding
24 def position(self, pos):
27 self._min_x = pos[0] - self._padding
28 self._max_x = pos[0] + self._size[0] + self._padding
29 self._min_y = pos[1] - self._padding
30 self._max_y = pos[1] + self._size[1] + self._padding
38 def render(self, surface):
41 def pressed(self, ev):
43 # Unplaced buttons can't be pressed
45 if ev.type == pgl.MOUSEBUTTONDOWN and ev.button == 1:
46 if self._min_x < ev.pos[0] < self._max_x:
47 if self._min_y < ev.pos[1] < self._max_y:
52 class TextButton(Button):
54 def __init__(self, text, colour, name=None, pos=None, padding=10):
55 font = loader.load_font(FONTS['sans'], size=24)
56 self._text = font.render(text, True, colour)
57 super(TextButton, self).__init__(self._text.get_size(), name,
60 def render(self, surface):
61 surface.blit(self._text, self._pos, None)
64 class ImageButton(Button):
66 def __init__(self, *imgparts, **kwargs):
67 self._img = loader.load_image(*imgparts)
68 name = kwargs.get('name')
69 pos = kwargs.get('pos')
70 padding = kwargs.get('padding', 0)
71 super(ImageButton, self).__init__(self._img.get_size(), name,
74 def render(self, surface):
75 surface.blit(self._img, self._pos, None)