From 36542520a974d97265a405a50d37c065f7c8db29 Mon Sep 17 00:00:00 2001 From: pin Date: Mon, 22 Feb 2010 12:30:40 +0000 Subject: [PATCH] avancement sur cursors. git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@49 fe552daf-6dbe-4428-90eb-1537e0879342 --- src/app/minwii.py | 2 +- src/app/widgets/cursors.py | 76 +++++++++++++++++++------------- src/app/widgets/playingscreen.py | 11 ++++- 3 files changed, 56 insertions(+), 33 deletions(-) diff --git a/src/app/minwii.py b/src/app/minwii.py index a7ca431..3757df1 100755 --- a/src/app/minwii.py +++ b/src/app/minwii.py @@ -28,7 +28,7 @@ class MinWii(Desktop): import pygame playingScreen = SongPlayingScreenTest() - playingScreen.draw(pygame.display.get_surface()) + #playingScreen.draw(pygame.display.get_surface()) playingScreen.run() #pygame.display.flip() diff --git a/src/app/widgets/cursors.py b/src/app/widgets/cursors.py index 6729fc9..6d81a67 100755 --- a/src/app/widgets/cursors.py +++ b/src/app/widgets/cursors.py @@ -14,7 +14,7 @@ class WarpingCursor(pygame.sprite.Sprite): ''' The class for animating the warping cursor - durations: + duration: The duration of each image in the animation centerPosition: The Position of the center of the cursor @@ -29,30 +29,41 @@ class WarpingCursor(pygame.sprite.Sprite): #centerPosition = None #_imagePointer = None #_animationOffset = None - + @staticmethod - def _get_theme_images(name) : + def _get_theme_images(name) : basePath = os.path.abspath(__file__).split(os.path.sep)[:-1] basePath.append('data') basePath.append(name) basePath = os.path.sep.join(basePath) images = [f for f in os.listdir(basePath) if os.path.splitext(f)[1] == '.png'] return basePath, images - + def __init__(self, theme='black', duration=75): pygame.sprite.Sprite.__init__(self) imagesPath, images = WarpingCursor._get_theme_images(theme) - flashImage = images.pop(images.index('flash.png')) + self.flashImage = images.pop(images.index('flash.png')) images.sort(lambda a, b : cmp(*[int(os.path.splitext(f)[0]) for f in [a, b]])) - + self.images = [] for img in images : imagePath = os.path.sep.join([imagesPath, img]) - self.images = pygame.image.load(imagePath).convert_alpha() + 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() self.duration = duration - + + self.image = self.images[0] + self.rect = pygame.Rect((0,0), (self.width, self.height)) + + surface = pygame.display.get_surface() + surface.blit(self.image, self.rect) + #self.flashImagePath = flashImage #self.durations = durations #self.centerPosition = initCenterPosition @@ -61,44 +72,47 @@ class WarpingCursor(pygame.sprite.Sprite): #self.image = pygame.image.load(self.images[0]).convert_alpha() #self._imagePointer = 0 #self._animationOffset = 0 - #self._flashTimer = 0 + #self._flashTimer = 0 + + def update(self) : + print 'cursor update' - def update(self, elapsedTime, centerPosition): - ''' - Update the cursor's look and position - - elapsedTime: - The time passed since the previous update - centerPosition: - the new position of the creep - ''' - self._updateImage(elapsedTime) - self.centerPosition = centerPosition - if self.flashing : - self._flashTimer += elapsedTime - if self._flashTimer > self.flashLength: - self.flashing = False +# def update(self, elapsedTime, centerPosition): +# ''' +# Update the cursor's look and position +# +# elapsedTime: +# The time passed since the previous update +# centerPosition: +# the new position of the creep +# ''' +# self._updateImage(elapsedTime) +# self.centerPosition = centerPosition +# if self.flashing : +# self._flashTimer += elapsedTime +# if self._flashTimer > self.flashLength: +# self.flashing = False def _updateImage(self, elapsedTime): ''' Update the cursor's image - + elapsedTime: The time passed since the previous update ''' self._animationOffset += elapsedTime - if self._animationOffset > self.durations[self._imagePointer]: + if self._animationOffset > self.duration : #New animation offset is computed first, before updating the pointer - self._animationOffset -= self.durations[self._imagePointer] + self._animationOffset -= self.duration #point to the next image (restarts from the beginning when it reaches the end) self._imagePointer = (self._imagePointer + 1) % len(self.images) - + if self.flashing: - self.image = pygame.image.load(self.flashImagePath).convert_alpha() - else : + self.image = pygame.image.load(self.flashImagePath).convert_alpha() + else : self.image = pygame.image.load(self.images[self._imagePointer]).convert_alpha() - + def flash(self,flashLength = None): self._flashTimer = 0 self.flashing = True diff --git a/src/app/widgets/playingscreen.py b/src/app/widgets/playingscreen.py index 055ed71..09b9550 100755 --- a/src/app/widgets/playingscreen.py +++ b/src/app/widgets/playingscreen.py @@ -9,6 +9,7 @@ $URL$ import pygame from colorsys import hls_to_rgb from gradients import gradients +from cursors import WarpingCursor from math import floor import types # TODO : positionner cette constance en fonction de la résolution d'affichage @@ -54,9 +55,12 @@ class _PlayingScreenBase(pygame.sprite.OrderedUpdates) : self.distinctNotes = distinctNotes self.keyboardLength = 0 self.keyboardRects = [] + self.cursor = None self._initRects() self._initColumns() self._running = False + self.draw(pygame.display.get_surface()) + self._initCursor() @@ -94,7 +98,11 @@ class _PlayingScreenBase(pygame.sprite.OrderedUpdates) : print hue c = Column(hue, rect) self.add(c) - + + def _initCursor(self) : + self.cursor = WarpingCursor() + #self.add(self.cursor) + def highlightColumn(self, index) : for i, sprite in enumerate(self.sprites()) : @@ -124,6 +132,7 @@ class _PlayingScreenBase(pygame.sprite.OrderedUpdates) : @event_handler(pygame.MOUSEMOTION) def handleMouseMotion(self, event) : + pass -- 2.20.1