The world is invalid (sometimes, when desirable)
authorNeil <neil@dip.sun.ac.za>
Sun, 11 May 2014 19:52:20 +0000 (21:52 +0200)
committerNeil <neil@dip.sun.ac.za>
Sun, 11 May 2014 19:52:20 +0000 (21:52 +0200)
naja/events.py
naja/widgets/base.py

index 4d3fb07f80a94bc5502edfa048b3e0e017c80393..0e102edf9229d0de4fbdc327514e0b08046144c8 100644 (file)
@@ -35,3 +35,13 @@ class QuitGameEvent(NajaEvent):
     @classmethod
     def post(cls):
         super(QuitGameEvent, cls).post()
+
+
+class InvalidateTheWorld(NajaEvent):
+    # This is used to signal to all the widgets that the world has changed
+    # and cached state may need to be recreated
+    TYPE = "INVALIDATE"
+
+    @classmethod
+    def post(cls):
+        super(InvalidateTheWorld, cls).post()
index bda00a4b755a4c91b8738096a003b6e40f65aac9..133cc532c2ae8fb0886117255decbba65f1e374c 100644 (file)
@@ -1,4 +1,5 @@
 import pygame
+from naja.events import InvalidateTheWorld
 
 
 class Widget(object):
@@ -27,6 +28,11 @@ class Widget(object):
 
     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