import pygame
+from naja.events import InvalidateTheWorld
class Widget(object):
def rect(self):
return pygame.Rect(self.pos, self.size)
+ def render(self, surface):
+ '''Draw the widget onto surface'''
+ if not self._prepared:
+ self.prepare()
+ self._prepared = True
+ self.draw(surface)
+
def draw(self, surface):
+ '''The overrideable bit of widget drawing'''
raise NotImplemented()
def prepare(self):
- if not self._prepared:
- self._prepare()
- self._prepared = True
+ '''Prepare the widget for drawing. This usually caches a surface.'''
- def _prepare(self):
- raise NotImplemented()
+ def handle_event(self, ev):
+ '''Return True if the event has been handled'''
+ if InvalidateTheWorld.matches(ev):
+ # Invalidate has special handling. Widgets should never return
+ # True for for this event
+ self._prepared = False
+ return False
+ return False
+
+
+class Container(object):
+ def __init__(self, *widgets):
+ self.widgets = []
+ for widget in widgets:
+ self.add(widget)
+
+ def add(self, widget):
+ self.widgets.append(widget)
+
+ def render(self, surface):
+ for widget in self.widgets:
+ widget.render(surface)
+
+ def handle_event(self, ev):
+ for widget in self.widgets:
+ if widget.handle_event(ev):
+ return True
+ return False