gestion du flash du curseur.
[minwii.git] / src / app / widgets / cursors.py
index b52bfb3..29ce61c 100755 (executable)
@@ -10,7 +10,7 @@ import pygame
 import os
 from eventutils import EventHandlerMixin, event_handler
 from itertools import cycle
-from pygame.locals import USEREVENT
+from pygame.locals import MOUSEBUTTONDOWN, MOUSEBUTTONUP, USEREVENT
 TIMEOUT = USEREVENT + 1
 
 class WarpingCursor(pygame.sprite.Sprite, EventHandlerMixin):
@@ -43,10 +43,12 @@ class WarpingCursor(pygame.sprite.Sprite, EventHandlerMixin):
         return basePath, images
 
     
-    def __init__(self, theme='black', duration=75):
+    def __init__(self, theme='black', duration=75, blink=True):
         pygame.sprite.Sprite.__init__(self)
         imagesPath, images = WarpingCursor._get_theme_images(theme)
-        self.flashImage = images.pop(images.index('flash.png'))
+        flashImage = images.pop(images.index('flash.png'))
+        flashImagePath = os.path.sep.join([imagesPath, flashImage]) 
+        self.flashImage = pygame.image.load(flashImagePath).convert_alpha()
         images.sort(lambda a, b : cmp(*[int(os.path.splitext(f)[0]) for f in [a, b]]))
         
         self.images = []
@@ -55,7 +57,6 @@ class WarpingCursor(pygame.sprite.Sprite, EventHandlerMixin):
             img = pygame.image.load(imagePath).convert_alpha()
             self.images.append(img)
         
-        self._imageLength = len(self.images)
         # assumes that all images have same dimensions
         self.width = self.images[0].get_width()
         self.height = self.images[0].get_height()
@@ -66,7 +67,9 @@ class WarpingCursor(pygame.sprite.Sprite, EventHandlerMixin):
         
         surface = pygame.display.get_surface()
         surface.blit(self.image, self.rect)
-        self._startBlink()
+        self.blink = blink
+        if blink :
+            self._startBlink()
         
         #self.flashImagePath = flashImage
         #self.durations = durations
@@ -88,10 +91,23 @@ class WarpingCursor(pygame.sprite.Sprite, EventHandlerMixin):
     
     @event_handler(TIMEOUT)
     def loadNext(self, event) :
-        self.image = self.iterator.next()
+        if self.blink :
+            self.image = self.iterator.next()
+            surface = pygame.display.get_surface()
+            surface.blit(self.image, self.rect)
+    
+    @event_handler(MOUSEBUTTONDOWN)
+    def flashOn(self, event) :
+        self.blink=False
+        self.image = self.flashImage
         surface = pygame.display.get_surface()
         surface.blit(self.image, self.rect)
 
+    @event_handler(MOUSEBUTTONUP)
+    def flashOff(self, event) :
+        self.blink = True
+        self.loadNext(event)
+
     def update(self) :
         print 'cursor update'