bda00a4b755a4c91b8738096a003b6e40f65aac9
[naja.git] / naja / widgets / base.py
1 import pygame
2
3
4 class Widget(object):
5     def __init__(self, pos, size=None):
6         self.pos = pos
7         self.size = size or (0, 0)
8         self._prepared = False
9
10     @property
11     def rect(self):
12         return pygame.Rect(self.pos, self.size)
13
14     def render(self, surface):
15         '''Draw the widget onto surface'''
16         if not self._prepared:
17             self.prepare()
18             self._prepared = True
19         self.draw(surface)
20
21     def draw(self, surface):
22         '''The overrideable bit of widget drawing'''
23         raise NotImplemented()
24
25     def prepare(self):
26         '''Prepare the widget for drawing. This usually caches a surface.'''
27
28     def handle_event(self, ev):
29         '''Return True if the event has been handled'''
30         return False
31
32
33 class Container(object):
34     def __init__(self, *widgets):
35         self.widgets = []
36         for widget in widgets:
37             self.add(widget)
38
39     def add(self, widget):
40         self.widgets.append(widget)
41
42     def render(self, surface):
43         for widget in self.widgets:
44             widget.render(surface)
45
46     def handle_event(self, ev):
47         for widget in self.widgets:
48             if widget.handle_event(ev):
49                 return True
50         return False