X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=helpers%2Fkey.py;h=56cccaa537475836b8120c1a2269e9c5b0fab2c3;hb=d05b1117dfb842959f89797174718ab58d04dd77;hp=2e4a313b39f28abb324cb1689e433621b95d1c3d;hpb=be27763f8be0f647cbe17ecee8c782901ce2cede;p=perso%2FImmae%2FProjets%2FPython%2FMusicSampler.git diff --git a/helpers/key.py b/helpers/key.py index 2e4a313..56cccaa 100644 --- a/helpers/key.py +++ b/helpers/key.py @@ -1,24 +1,16 @@ from .rounded_rect import * from .action import * +from .font import font import time import sys import pygame class Key: - row_positions = { - 'first': 0, - 'second': 50, - 'third': 100, - 'fourth': 150, - 'fifth': 200, - 'sixth': 250, - } - default_outer_color = (120, 120, 120) lighter_outer_color = (200, 200, 200) default_inner_color = (255, 255, 255) mapped_inner_color = ( 0, 255, 0) - mapped_unready_inner_color = (255, 165, 0) + mapped_unready_inner_color = ( 0, 255, 0, 100) def __init__(self, mapping, draw_lock, key_name, key_sym, top, left, width = 48, height = 48, disabled = False): self.draw_lock = draw_lock @@ -26,11 +18,7 @@ class Key: self.key_name = key_name self.key_sym = key_sym - if isinstance(top, str): - self.top = self.row_positions[top] - else: - self.top = top - + self.top = top self.left = left self.width = width self.height = height @@ -40,6 +28,7 @@ class Key: self.rect = (self.left, self.top, self.right, self.bottom) self.position = (self.left, self.top) + self.disabled = disabled if disabled: self.outer_color = self.lighter_outer_color @@ -50,13 +39,16 @@ class Key: self.inner_color = self.default_inner_color self.actions = [] + self.description = [] + self.custom_color = self.mapped_inner_color + self.custom_unready_color = self.mapped_unready_inner_color def square(self, all_actions_ready): if self.has_actions(): if all_actions_ready: - self.inner_color = self.mapped_inner_color + self.inner_color = self.custom_color else: - self.inner_color = self.mapped_unready_inner_color + self.inner_color = self.custom_unready_color return RoundedRect((0, 0, self.width, self.height), self.outer_color, self.inner_color, self.linewidth) @@ -67,19 +59,43 @@ class Key: position[1] - self.position[1] ) + def set_description(self, description): + for desc in description: + if desc is None: + self.description.append("") + else: + self.description.append(str(desc)) + + def set_color(self, color): + self.custom_color = tuple(color) + color.append(100) + self.custom_unready_color = tuple(color) + def draw(self, background_surface): self.draw_lock.acquire() all_actions_ready = self.all_actions_ready() self.surface = self.square(all_actions_ready).surface() - if getattr(sys, 'frozen', False): - police = pygame.font.Font(sys._MEIPASS + "/Ubuntu-Regular.ttf", 14) - else: - police = pygame.font.Font("Ubuntu-Regular.ttf", 14) + police = font(14) + text_police = font(10) + police.set_bold(True) text = police.render(self.key_sym, True, (0,0,0)) self.surface.blit(text, (5,5)) + + is_first_line = True + offset = 11 + text_police.get_linesize() - 4 + first_line_offset = 18 + for description in self.description: + text = text_police.render(description, True, (0,0,0)) + if is_first_line: + self.surface.blit(text, (first_line_offset, 9)) + is_first_line = False + else: + self.surface.blit(text, (3, offset)) + offset += text_police.get_linesize() - 4 + background_surface.blit(self.surface, self.position) self.draw_lock.release() @@ -112,9 +128,29 @@ class Key: self.mapping.finished_running(self, start_time) - def list_actions(self, surface): - # FIXME: Todo - print("bouh", self.key_sym) - surface.fill((255, 0, 0)) + def list_actions(self, screen): + action_descriptions = [action.description() for action in self.actions] + #print("actions linked to key {}:".format(self.key_sym)) + #print("\t" + "\n\t".join(action_descriptions)) + self.draw_lock.acquire() + surface = pygame.Surface((690, 250)).convert() + surface.fill((250, 250, 250)) + police = font(14) + + offset = 0 + police.set_bold(True) + text = police.render("actions linked to key {}:".format(self.key_sym), True, (0,0,0)) + surface.blit(text, (0, offset)) + offset += police.get_linesize() + + police.set_bold(False) + for description in action_descriptions: + text = police.render(description, True, (0,0,0)) + surface.blit(text, (0, offset)) + offset += police.get_linesize() + + screen.blit(surface, (5, 308)) + pygame.display.flip() + self.draw_lock.release()