X-Git-Url: https://scm.cri.ensmp.fr/git/minwii.git/blobdiff_plain/36542520a974d97265a405a50d37c065f7c8db29..c9bd8f475f8fb2bce0e96a300d50c3c7e3ffd23b:/src/app/widgets/cursors.py?ds=sidebyside diff --git a/src/app/widgets/cursors.py b/src/app/widgets/cursors.py index 6d81a67..29ce61c 100755 --- a/src/app/widgets/cursors.py +++ b/src/app/widgets/cursors.py @@ -8,9 +8,12 @@ $URL$ import pygame import os +from eventutils import EventHandlerMixin, event_handler +from itertools import cycle +from pygame.locals import MOUSEBUTTONDOWN, MOUSEBUTTONUP, USEREVENT +TIMEOUT = USEREVENT + 1 - -class WarpingCursor(pygame.sprite.Sprite): +class WarpingCursor(pygame.sprite.Sprite, EventHandlerMixin): ''' The class for animating the warping cursor @@ -40,10 +43,12 @@ class WarpingCursor(pygame.sprite.Sprite): 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 = [] @@ -52,7 +57,6 @@ class WarpingCursor(pygame.sprite.Sprite): 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() @@ -63,6 +67,9 @@ class WarpingCursor(pygame.sprite.Sprite): surface = pygame.display.get_surface() surface.blit(self.image, self.rect) + self.blink = blink + if blink : + self._startBlink() #self.flashImagePath = flashImage #self.durations = durations @@ -73,6 +80,33 @@ class WarpingCursor(pygame.sprite.Sprite): #self._imagePointer = 0 #self._animationOffset = 0 #self._flashTimer = 0 + + def _startBlink(self) : + pygame.time.set_timer(TIMEOUT, self.duration) + self.iterator = self.iterImages() + + def iterImages(self) : + for img in cycle(self.images) : + yield img + + @event_handler(TIMEOUT) + def loadNext(self, event) : + 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'