From 189bf90cfc9401b4bc0f6f36c152a439626cef3a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Mon, 13 Jun 2016 10:48:04 +0200 Subject: [PATCH] Initial commit --- helpers.py | 232 +++++++++++++++++++++++++++++++++++++++++++++++++++++ run.py | 45 +++++++++++ 2 files changed, 277 insertions(+) create mode 100644 helpers.py create mode 100644 run.py diff --git a/helpers.py b/helpers.py new file mode 100644 index 0000000..6a2ed6f --- /dev/null +++ b/helpers.py @@ -0,0 +1,232 @@ +from pygame import * +from math import pi + +class Key: + row_positions = { + 'first': 5, + 'second': 55, + 'third': 105, + 'fourth': 155, + 'fifth': 205, + 'sixth': 255, + } + + default_outer_color = (120, 120, 120) + lighter_outer_color = (200, 200, 200) + default_inner_color = (255, 255, 255) + + def __init__(self, key_name, key_sym, top, left, width = 48, height = 48, disabled = False): + 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.left = left + self.width = width + self.height = height + + self.bottom = self.top + self.height + self.right = self.left + self.width + + self.rect = (self.left, self.top, self.right, self.bottom) + self.position = (self.left, self.top) + + if disabled: + self.outer_color = self.lighter_outer_color + self.linewidth = 1 + else: + self.outer_color = self.default_outer_color + self.linewidth = 3 + + self.inner_color = self.default_inner_color + + def square(self): + return RoundedRect((0, 0, self.width, self.height), + self.outer_color, self.inner_color, self.linewidth) + + def collidepoint(self, position): + return self.surface.get_rect().collidepoint( + position[0] - self.position[0], + position[1] - self.position[1] + ) + + def draw(self, background_surface): + self.surface = self.square().surface() + + police = font.Font(None, 20) + text = police.render(self.key_sym, True, (0,0,0)) + self.surface.blit(text, (5,5)) + background_surface.blit(self.surface, self.position) + + def do_actions(self): + print("coucou" + self.key_sym) + pass + +keys = { + K_ESCAPE: Key(K_ESCAPE, 'ESC', 'first', 0), + + K_F1: Key(K_F1, 'F1', 'first', 100), + K_F2: Key(K_F2, 'F2', 'first', 150), + K_F3: Key(K_F3, 'F3', 'first', 200), + K_F4: Key(K_F4, 'F4', 'first', 250), + + K_F5: Key(K_F5, 'F5', 'first', 325), + K_F6: Key(K_F6, 'F6', 'first', 375), + K_F7: Key(K_F7, 'F7', 'first', 425), + K_F8: Key(K_F8, 'F8', 'first', 475), + + K_F9: Key(K_F9, 'F9', 'first', 550), + K_F10: Key(K_F10, 'F10', 'first', 600), + K_F11: Key(K_F11, 'F11', 'first', 650), + K_F12: Key(K_F12, 'F12', 'first', 700), + + + 178: Key(178, '²', 'second', 0), + K_AMPERSAND: Key(K_AMPERSAND, '&', 'second', 50), + 233: Key(233, 'é', 'second', 100), + K_QUOTEDBL: Key(K_QUOTEDBL, '"', 'second', 150), + K_QUOTE: Key(K_QUOTE, "'", 'second', 200), + K_LEFTPAREN: Key(K_LEFTPAREN, '(', 'second', 250), + K_MINUS: Key(K_MINUS, '-', 'second', 300), + 232: Key(232, 'è', 'second', 350), + K_UNDERSCORE: Key(K_UNDERSCORE, '_', 'second', 400), + 231: Key(231, 'ç', 'second', 450), + 224: Key(224, 'à', 'second', 500), + K_RIGHTPAREN: Key(K_RIGHTPAREN, ')', 'second', 550), + K_EQUALS: Key(K_EQUALS, '=', 'second', 600), + + K_BACKSPACE: Key(K_BACKSPACE, '<-', 'second', 650, width = 98), + + + K_TAB: Key(K_TAB, 'tab', 'third', 0, width = 73), + K_a: Key(K_a, 'a', 'third', 75), + K_z: Key(K_z, 'z', 'third', 125), + K_e: Key(K_e, 'e', 'third', 175), + K_r: Key(K_r, 'r', 'third', 225), + K_t: Key(K_t, 't', 'third', 275), + K_y: Key(K_y, 'y', 'third', 325), + K_u: Key(K_u, 'u', 'third', 375), + K_i: Key(K_i, 'i', 'third', 425), + K_o: Key(K_o, 'o', 'third', 475), + K_p: Key(K_p, 'p', 'third', 525), + K_CARET: Key(K_CARET, '^', 'third', 575), + K_DOLLAR: Key(K_DOLLAR, '$', 'third', 625), + + K_RETURN: Key(K_RETURN, 'Enter', 'third', 692, width = 56, height = 98), + + K_CAPSLOCK: Key(K_CAPSLOCK, 'CAPS', 'fourth', 0, width = 88, disabled = True), + + K_q: Key(K_q, 'q', 'fourth', 90), + K_s: Key(K_s, 's', 'fourth', 140), + K_d: Key(K_d, 'd', 'fourth', 190), + K_f: Key(K_f, 'f', 'fourth', 240), + K_g: Key(K_g, 'g', 'fourth', 290), + K_h: Key(K_h, 'h', 'fourth', 340), + K_j: Key(K_j, 'j', 'fourth', 390), + K_k: Key(K_k, 'k', 'fourth', 440), + K_l: Key(K_l, 'l', 'fourth', 490), + K_m: Key(K_m, 'm', 'fourth', 540), + 249: Key(249, 'ù', 'fourth', 590), + K_ASTERISK: Key(K_ASTERISK, '*', 'fourth', 640), + + + K_LSHIFT: Key(K_LSHIFT, 'LShift', 'fifth', 0, width = 63, disabled = True), + + K_LESS: Key(K_LESS, '<', 'fifth', 65), + K_w: Key(K_w, 'w', 'fifth', 115), + K_x: Key(K_x, 'x', 'fifth', 165), + K_c: Key(K_c, 'c', 'fifth', 215), + K_v: Key(K_v, 'v', 'fifth', 265), + K_b: Key(K_b, 'b', 'fifth', 315), + K_n: Key(K_n, 'n', 'fifth', 365), + K_COMMA: Key(K_COMMA, ',', 'fifth', 415), + K_SEMICOLON: Key(K_SEMICOLON, ';', 'fifth', 465), + K_COLON: Key(K_COLON, ':', 'fifth', 515), + K_EXCLAIM: Key(K_EXCLAIM, '!', 'fifth', 565), + + K_RSHIFT: Key(K_RSHIFT, 'RShift', 'fifth', 615, width = 133, disabled = True), + + K_LCTRL: Key(K_LCTRL, 'LCtrl', 'sixth', 0, width = 63, disabled = True), + K_LSUPER: Key(K_LSUPER, 'LSuper', 'sixth', 115, disabled = True), + K_LALT: Key(K_LALT, 'LAlt', 'sixth', 165, disabled = True), + K_SPACE: Key(K_SPACE, 'Espace', 'sixth', 215, width = 248), + K_MODE: Key(K_MODE, 'AltGr', 'sixth', 465, disabled = True), + 314: Key(314, 'Compose', 'sixth', 515, disabled = True), + K_RCTRL: Key(K_RCTRL, 'RCtrl', 'sixth', 565, width = 63, disabled = True), + + + K_INSERT: Key(K_INSERT, 'ins', 'second', 755), + K_HOME: Key(K_HOME, 'home', 'second', 805), + K_PAGEUP: Key(K_PAGEUP, 'pg_u', 'second', 855), + K_DELETE: Key(K_DELETE, 'del', 'third', 755), + K_END: Key(K_END, 'end', 'third', 805), + K_PAGEDOWN: Key(K_PAGEDOWN, 'pg_d', 'third', 855), + + + K_UP: Key(K_UP, 'up', 'fifth', 805), + K_DOWN: Key(K_DOWN, 'down', 'sixth', 805), + K_LEFT: Key(K_LEFT, 'left', 'sixth', 755), + K_RIGHT: Key(K_RIGHT, 'right', 'sixth', 855), +} + +class RoundedRect: + def __init__(self, rect, outer_color, inner_color, linewidth = 2, radius = 0.4): + self.rect = Rect(rect) + self.outer_color = Color(*outer_color) + self.inner_color = Color(*inner_color) + self.linewidth = linewidth + self.radius = radius + + def surface(self): + rectangle = filledRoundedRect(self.rect, self.outer_color, self.radius) + + inner_rect = Rect(( + self.rect.left + 2 * self.linewidth, + self.rect.top + 2 * self.linewidth, + self.rect.right - 2 * self.linewidth, + self.rect.bottom - 2 * self.linewidth + )) + + inner_rectangle = self.filledRoundedRect(inner_rect, self.inner_color, self.radius) + + rectangle.blit(inner_rectangle, (self.linewidth, self.linewidth)) + + return rectangle + + def filledRoundedRect(self, rect, color, radius=0.4): + """ + filledRoundedRect(rect,color,radius=0.4) + + rect : rectangle + color : rgb or rgba + radius : 0 <= radius <= 1 + """ + + alpha = color.a + color.a = 0 + pos = rect.topleft + rect.topleft = 0,0 + rectangle = Surface(rect.size,SRCALPHA) + + circle = Surface([min(rect.size)*3]*2,SRCALPHA) + draw.ellipse(circle,(0,0,0),circle.get_rect(),0) + circle = transform.smoothscale(circle,[int(min(rect.size)*radius)]*2) + + radius = rectangle.blit(circle,(0,0)) + radius.bottomright = rect.bottomright + rectangle.blit(circle,radius) + radius.topright = rect.topright + rectangle.blit(circle,radius) + radius.bottomleft = rect.bottomleft + rectangle.blit(circle,radius) + + rectangle.fill((0,0,0),rect.inflate(-radius.w,0)) + rectangle.fill((0,0,0),rect.inflate(0,-radius.h)) + + rectangle.fill(color,special_flags=BLEND_RGBA_MAX) + rectangle.fill((255,255,255,alpha),special_flags=BLEND_RGBA_MIN) + + return rectangle diff --git a/run.py b/run.py new file mode 100644 index 0000000..88afaad --- /dev/null +++ b/run.py @@ -0,0 +1,45 @@ +import pygame +import sys +import helpers + +pygame.init() + +size = width, height = 1024, 600 + +screen = pygame.display.set_mode(size) +background = pygame.Surface(screen.get_size()) +background = background.convert() +background.fill((250, 250, 250)) + +for key_name in helpers.keys: + key = helpers.keys[key_name] + key.draw(background) + +screen.blit(background, (0, 0)) +pygame.display.flip() + +contexts = [ + 'normal' +] + +context = 'normal' + +while 1: + event = pygame.event.wait() + if event.type == pygame.QUIT or ( + event.type == pygame.KEYDOWN and + event.mod == 4160 and + event.key == pygame.K_c): + pygame.quit() + sys.exit() + + if context == 'normal': + if event.type == pygame.KEYDOWN and event.key in helpers.keys: + helpers.keys[event.key].do_actions() + if event.type == pygame.MOUSEBUTTONUP: + for key in helpers.keys: + if helpers.keys[key].collidepoint(pygame.mouse.get_pos()): + helpers.keys[key].do_actions() + + pygame.display.flip() + -- 2.41.0