Passed
Push — main ( c9a320...45682b )
by Yohann
53s
created

ui.App.handle_typing()   A

Complexity

Conditions 5

Size

Total Lines 13
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 10
dl 0
loc 13
rs 9.3333
c 0
b 0
f 0
cc 5
nop 2
1
import pygame
2
3
pygame.init()
4
pygame.key.set_repeat(500, 50)
5
6
7
class App:
8
9
    def __init__(self, client):
10
        self.client = client
11
        pygame.display.set_caption("PyChat v2.0")
12
13
        self.screen = pygame.display.set_mode((1280, 720))
14
        icon = pygame.Surface((64, 64), pygame.SRCALPHA)
15
        pygame.display.set_icon(icon)
16
17
        self.update_event = pygame.USEREVENT + 1
18
        pygame.time.set_timer(self.update_event, 1000)
19
20
        self.font = pygame.font.Font("assets/oxygen.ttf", 12)
21
22
        self.message = ''
23
        self.history = []
24
25
        self.is_running = True
26
27
    def run(self):
28
        pygame.event.set_blocked(None)
29
        pygame.event.set_allowed(
30
            (self.update_event, pygame.KEYDOWN, pygame.TEXTINPUT, pygame.QUIT)
31
        )
32
33
        while self.is_running:
34
            self.draw()
35
            self.handle_event(pygame.event.wait())
36
37
    def draw(self):
38
        self.screen.fill(0)
39
40
        text = self.font.render(f">>>   {self.message}", True, (255, 255, 255))
41
        self.screen.blit(text, (20, 680))
42
43
        history = self.history[-15:]
44
        length_history = len(history)
45
46
        c_gain = 255 // (length_history + 1)
47
48
        for c, message in enumerate(history):
49
            color = ((c + 1) * c_gain, (c + 1) * c_gain, (c + 1) * c_gain)
50
51
            info = self.font.render(message['author'], True, color)
52
            self.screen.blit(info, (20, (c + 1) * 40))
53
54
            text = self.font.render(message['content'], True, color)
55
            self.screen.blit(text, (20, (c + 1) * 40 + 15))
56
57
        pygame.display.update()
58
59
    def update(self):
60
        new_messages = self.client.fetch_new_messages()
61
62
        if not len(new_messages):
63
            return
64
65
        self.history.extend(new_messages)
66
67
    def send_message(self):
68
        if not len(self.message):
69
            return
70
71
        self.client.send_message = self.message
72
        self.client.send()
73
74
        self.history.append({"author": "you", "content": self.message})
75
        self.message = ''
76
77
    def handle_event(self, event):
78
        if event.type == pygame.QUIT:
79
            self.is_running = False
80
            return
81
82
        if event.type == self.update_event:
83
            self.update()
84
            return
85
86
        self.handle_typing(event)
87
88
    def handle_typing(self, event):
89
        if event.type == pygame.TEXTINPUT:
90
            self.message += event.text
91
            return
92
93
        if event.type != pygame.KEYDOWN:
94
            return
95
96
        if event.key == pygame.K_BACKSPACE:
97
            self.message = self.message[:-1]
98
99
        if event.key == pygame.K_RETURN:
100
            self.send_message()
101