Mercurial > boomslang
diff pyntnclick/widgets/base.py @ 692:d6ded808cc33 pyntnclick
Much scene management refactoring.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Tue, 14 Feb 2012 13:39:05 +0200 |
parents | 0749438e325e |
children | c8b683dd56d3 |
line wrap: on
line diff
--- a/pyntnclick/widgets/base.py Tue Feb 14 13:05:10 2012 +0200 +++ b/pyntnclick/widgets/base.py Tue Feb 14 13:39:05 2012 +0200 @@ -9,6 +9,8 @@ class Widget(object): + highlight_cursor = False + def __init__(self, rect, gd): if not isinstance(rect, pygame.Rect): rect = pygame.Rect(rect, (0, 0)) @@ -19,6 +21,8 @@ self.parent = None self.disabled = False self.callbacks = collections.defaultdict(list) + # To track which widget the mouse is over + self.mouseover_widget = self def add_callback(self, eventtype, callback, *args): self.callbacks[eventtype].append((callback, args)) @@ -64,6 +68,8 @@ class Button(Widget): + highlight_cursor = True + def event(self, ev): if super(Button, self).event(ev): return True @@ -93,10 +99,13 @@ """Push an event down through the tree, and fire our own event as a last resort """ + self.mouseover_widget = self if ev.type in (MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN): for child in self.children[:]: if child.rect.collidepoint(ev.pos): - if child.event(ev): + result = child.event(ev) + self.mouseover_widget = child.mouseover_widget + if result: return True else: @@ -137,6 +146,7 @@ def event(self, ev): """Only the topmost child gets events. """ + self.mouseover_widget = self.children[-1].mouseover_widget if self.children[-1].event(ev): return True