From 8e4a9825b3464ea2600eb193151b03f903aed5f4 Mon Sep 17 00:00:00 2001 From: pin Date: Wed, 3 Mar 2010 16:06:30 +0000 Subject: [PATCH] =?utf8?q?commit=20par=20s=C3=A9curit=C3=A9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@63 fe552daf-6dbe-4428-90eb-1537e0879342 --- src/app/config.py | 6 ++++ src/app/events.py | 2 ++ src/app/minwii.py | 4 +-- src/app/widgets/playingscreen.py | 55 ++++++++++++++++++++------------ 4 files changed, 45 insertions(+), 22 deletions(-) diff --git a/src/app/config.py b/src/app/config.py index 9e27584..aaf51a0 100755 --- a/src/app/config.py +++ b/src/app/config.py @@ -5,6 +5,9 @@ $Id$ $URL$ """ +import pygame +pygame.font.init() + # playingscreen BORDER = 0 # 5px FIRST_HUE = 0.6 @@ -14,3 +17,6 @@ ON_TOP_LUMINANCE = 0.6 ON_BOTTOM_LUMINANCE = 0.9 ON_SATURATION = 1 ON_COLUMN_OVERSIZING = 1.75 +ON_COLUMN_ALPHA = 0.98 +FONT = pygame.font.Font(None, 80) +FONT_COLOR = (0,0,0) diff --git a/src/app/events.py b/src/app/events.py index b271c1f..149c2ff 100755 --- a/src/app/events.py +++ b/src/app/events.py @@ -1,2 +1,4 @@ from pygame.locals import USEREVENT TIMEOUT = USEREVENT + 1 +NOTEON = USEREVENT + 2 +NOTEOFF = USEREVENT + 3 diff --git a/src/app/minwii.py b/src/app/minwii.py index 6e29cd9..2cc4988 100755 --- a/src/app/minwii.py +++ b/src/app/minwii.py @@ -9,10 +9,10 @@ $URL$ #from pgu.gui import Desktop #from pgu.gui import QUIT from widgets.home import Home -from widgets.playingscreen import _PlayingScreenBase, SongPlayingScreenTest +from widgets.playingscreen import PlayingScreen class MinWii(object): def __init__(self) : - playingScreen = SongPlayingScreenTest() + playingScreen = PlayingScreen() playingScreen.run() diff --git a/src/app/widgets/playingscreen.py b/src/app/widgets/playingscreen.py index f881433..b4d5cb4 100755 --- a/src/app/widgets/playingscreen.py +++ b/src/app/widgets/playingscreen.py @@ -13,6 +13,7 @@ from cursors import WarpingCursor from eventutils import event_handler, EventDispatcher, EventHandlerMixin from math import floor import types +from musicxml import Tone from config import BORDER from config import FIRST_HUE @@ -22,7 +23,9 @@ from config import ON_TOP_LUMINANCE from config import ON_BOTTOM_LUMINANCE from config import ON_SATURATION from config import ON_COLUMN_OVERSIZING - +from config import ON_COLUMN_ALPHA +from config import FONT +from config import FONT_COLOR class _PlayingScreenBase(pygame.sprite.LayeredUpdates, EventHandlerMixin) : @@ -75,19 +78,14 @@ class _PlayingScreenBase(pygame.sprite.LayeredUpdates, EventHandlerMixin) : hueStep = FIRST_HUE / (self.keyboardLength - 1) for i, rect in enumerate(self.keyboardRects) : hue = FIRST_HUE - hueStep * i - c = Column(hue, rect) + tone = self.distinctNotes[i] + c = Column(self, hue, rect, tone) self.add(c, layer=0) def _initCursor(self) : self.cursor = WarpingCursor(blinkMode=True) self.add(self.cursor, layer=2) - - def highlightColumn(self, index) : - for i, sprite in enumerate(self.sprites()) : - sprite.update(i==index) - self.draw(pygame.display.get_surface()) - def run(self): self._running = True clock = pygame.time.Clock() @@ -97,22 +95,30 @@ class _PlayingScreenBase(pygame.sprite.LayeredUpdates, EventHandlerMixin) : dirty = self.draw(pygame.display.get_surface()) pygame.display.update(dirty) clock.tick(50) - + @event_handler(pygame.KEYDOWN) def handleKeyDown(self, event) : if event.key == pygame.K_q: self._running = False - uni = event.unicode + - if uni.isdigit() and int(uni) <=8 : - self.highlightColumn(int(uni)) - @event_handler(pygame.MOUSEMOTION) def handleMouseMotion(self, event) : pass - +class PlayingScreen(_PlayingScreenBase) : + "fenêtre de jeu pour improvisation" + scale = [55, 57, 59, 60, 62, 64, 65, 67, 69, 71, 72] + + def __init__(self) : + distinctNotes = [] + for midi in self.scale : + tone = Tone(midi) + distinctNotes.append(tone) + + super(PlayingScreen, self).__init__(distinctNotes) + class SongPlayingScreen(_PlayingScreenBase) : @@ -130,16 +136,16 @@ class SongPlayingScreenTest(_PlayingScreenBase) : class Column(pygame.sprite.Sprite, EventHandlerMixin) : - def __init__(self, hue, rect) : - pygame.sprite.Sprite.__init__(self) + def __init__(self, group, hue, rect, tone) : + pygame.sprite.Sprite.__init__(self, group) sur = pygame.surface.Surface(rect.size) rgba = hls_to_rgba_8bits(hue, OFF_LUMINANCE, OFF_SATURATION) sur.fill(rgba) self.stateOff = sur self.rectOff = rect - topRgba = hls_to_rgba_8bits(hue, ON_TOP_LUMINANCE, ON_SATURATION) - bottomRgba = hls_to_rgba_8bits(hue, ON_BOTTOM_LUMINANCE, ON_SATURATION) + topRgba = hls_to_rgba_8bits(hue, ON_TOP_LUMINANCE, ON_SATURATION, ON_COLUMN_ALPHA) + bottomRgba = hls_to_rgba_8bits(hue, ON_BOTTOM_LUMINANCE, ON_SATURATION, ON_COLUMN_ALPHA) onWidth = rect.width * ON_COLUMN_OVERSIZING onLeft = rect.centerx - onWidth / 2 rectOn = pygame.Rect((onLeft, 0), @@ -149,6 +155,7 @@ class Column(pygame.sprite.Sprite, EventHandlerMixin) : self.image = self.stateOff self.rect = rect + self.toneName = FONT.render(tone.nom, True, (0,0,0)) def update(self, state) : group = self.groups()[0] @@ -169,8 +176,16 @@ class Column(pygame.sprite.Sprite, EventHandlerMixin) : @event_handler(pygame.MOUSEBUTTONUP) def onMouseUp(self, event) : self.update(False) + + def raiseNoteOn(self) : + pass + + def raiseNoteOff(self) : + pass + + -def hls_to_rgba_8bits(h, l, s) : +def hls_to_rgba_8bits(h, l, s, a=1) : #convert to rgb ranging from 0 to 255 - rgba = [floor(255 * i) for i in hls_to_rgb(h, l, s) + (1,)] + rgba = [floor(255 * i) for i in hls_to_rgb(h, l, s) + (a,)] return tuple(rgba) -- 2.20.1