--- /dev/null
+# -*- coding: utf-8 -*-
+"""
+Décorateur, métaclasse et classe mixin pour faciliter
+l'implémentation des gestionnaires d'événements pygame.
+
+Utilisation :
+- hériter de EventHandlerMixin
+- décorer les méthodes gestionnaires d'événements avec le décorateur 'event_handler'
+ en passant en paramètre le code d'événement pygame
+
+Il n'existe aucune contrainte sur le nommage de la méthode décorée.
+La méthode gestionnaire d'événement reçoit l'événement pygame comme unique paramètre.
+
+par exemple :
+
+import pygame
+class Machin(pygame.sprite.Sprite, EventHandlerMixin) :
+
+ # .../...
+
+ @event_handler(pygame.KEYDOWN)
+ def handleKeyDown(self, event) :
+ pass
+
+
+$Id$
+$URL$
+"""
+import types
+
+def event_handler(eventType) :
+ def doRename(m) :
+ m.__name__ = 'eventHandler%s' % eventType
+ return m
+ return doRename
+
+
+class MetaRenamer(type):
+ def __new__(mcs, name, bases, dict) :
+ for k, v in dict.items() :
+ if isinstance(v, types.FunctionType) :
+ if k != v.__name__ :
+ print 'renommage de %s en %s' % (k, v.__name__)
+ dict[v.__name__] = v
+ del dict[k]
+ return type.__new__(mcs, name, bases, dict)
+
+
+class EventHandlerMixin(object) :
+ __metaclass__ = MetaRenamer
+
+ def input(self, event) :
+ handler = getattr(self, 'eventHandler%s' % event.type, lambda e:None)
+ handler(event)
from colorsys import hls_to_rgb
from gradients import gradients
from cursors import WarpingCursor
+from eventutils import event_handler, EventHandlerMixin
from math import floor
import types
# TODO : positionner cette constance en fonction de la résolution d'affichage
ON_COLUMN_OVERSIZING = 1.5
-def event_handler(eventType) :
- def doRename(m) :
- m.__name__ = 'eventHandler%s' % eventType
- return m
- return doRename
-
-
-class MetaRenamer(type):
- def __new__(mcs, name, bases, dict) :
- for k, v in dict.items() :
- if isinstance(v, types.FunctionType) :
- if k != v.__name__ :
- print 'renommage de %s en %s' % (k, v.__name__)
- dict[v.__name__] = v
- del dict[k]
- return type.__new__(mcs, name, bases, dict)
-
-
-class _PlayingScreenBase(pygame.sprite.OrderedUpdates) :
-
- __metaclass__ = MetaRenamer
+class _PlayingScreenBase(pygame.sprite.OrderedUpdates, EventHandlerMixin) :
def __init__(self, distinctNotes=[]) :
"""