+from collections import defaultdict
+
import pygame
-from naja.events import InvalidateTheWorld
+from pygame import locals as pgl
+
+from naja.events import InvalidateTheWorld, SelectEvent
class Widget(object):
self.pos = pos
self.size = size or (0, 0)
self._prepared = False
+ self.callbacks = defaultdict(list)
@property
def rect(self):
# True for for this event
self._prepared = False
return False
+ if SelectEvent.matches(ev) or ev.type == pgl.MOUSEBUTTONDOWN:
+ self.callback('click')
return False
+ def add_callback(self, event, callback):
+ self.callbacks[event].append(callback)
+
+ def callback(self, event):
+ for callback in self.callbacks[event]:
+ callback(event)
+
class Container(object):
def __init__(self, *widgets):
widget.render(surface)
def handle_event(self, ev):
- for widget in self.widgets:
- if widget.handle_event(ev):
- return True
+ if hasattr(ev, 'pos'):
+ for widget in self.widgets:
+ if isinstance(widget, Container):
+ if widget.handle_event(ev):
+ return True
+ elif widget.rect.collidepoint(ev.pos):
+ if widget.handle_event(ev):
+ return True
+ else:
+ for widget in self.widgets:
+ if widget.handle_event(ev):
+ return True
return False