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 = ( 0, 255, 0, 100)
- #mapped_unready_inner_color = (255, 165, 0)
def __init__(self, mapping, draw_lock, key_name, key_sym, top, left, width = 48, height = 48, disabled = False):
self.draw_lock = draw_lock
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
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
self.inner_color = self.default_inner_color
self.actions = []
self.description = []
- self.custom_color = None
- self.custom_unready_color = None
+ 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.custom_color or self.mapped_inner_color
+ self.inner_color = self.custom_color
else:
- self.inner_color = self.custom_unready_color or 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)
self.surface = self.square(all_actions_ready).surface()
- if getattr(sys, 'frozen', False):
- police = pygame.font.Font(sys._MEIPASS + "/Ubuntu-Regular.ttf", 14)
- text_police = pygame.font.Font(sys._MEIPASS + "/Ubuntu-Regular.ttf", 10)
- else:
- police = pygame.font.Font("Ubuntu-Regular.ttf", 14)
- text_police = pygame.font.Font("Ubuntu-Regular.ttf", 10)
+ police = font(14)
+ text_police = font(10)
police.set_bold(True)
text = police.render(self.key_sym, True, (0,0,0))
def add_action(self, action_name, **arguments):
self.actions.append(Action(action_name, self, **arguments))
- def do_actions(self):
+ def do_actions(self, screen):
print("running actions for {}".format(self.key_sym))
start_time = time.time()
self.mapping.start_running(self, start_time)
+ action_number = 0
for action in self.actions:
if self.mapping.keep_running(self, start_time):
+ self.list_actions(screen, action_number = action_number + 0.5)
action.run()
+ action_number += 1
+ self.list_actions(screen, action_number = action_number)
self.mapping.finished_running(self, start_time)
- def list_actions(self, screen):
+ def list_actions(self, screen, action_number = 0):
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))
- 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)
offset = 0
police.set_bold(True)
offset += police.get_linesize()
police.set_bold(False)
- for description in action_descriptions:
+ icon_police = font(14, font = "Symbola")
+ for index, description in enumerate(action_descriptions):
+ if index < int(action_number):
+ icon = icon_police.render("✓", True, (0,0,0))
+ elif index + 0.5 == action_number:
+ icon = icon_police.render("✅", True, (0,0,0))
+ else:
+ icon = icon_police.render(" ", True, (0,0,0))
+
text = police.render(description, True, (0,0,0))
- surface.blit(text, (0, offset))
+ surface.blit(icon, (0, offset))
+ surface.blit(text, (10, offset))
offset += police.get_linesize()
screen.blit(surface, (5, 308))