Merge branch 'feat/text_input' into 'main'
feat: implement text input See merge request swd25-bootcamp/silent-fh!10
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
import pygame
|
||||
|
||||
class TextInput:
|
||||
def __init__(self, width, height, pos_x, pos_y):
|
||||
self.rect = pygame.Rect(pos_x, pos_y, width, height)
|
||||
|
||||
self.font = pygame.font.SysFont("Arial", 22)
|
||||
|
||||
# input text
|
||||
self.text = ""
|
||||
|
||||
self.active = False
|
||||
|
||||
# colors
|
||||
self.text_color = (255, 255, 255)
|
||||
self.border_color = (255, 255, 255)
|
||||
self.active_border_color = (0, 255, 0)
|
||||
self.background_color = (30, 30, 30)
|
||||
|
||||
def handle_event(self, event):
|
||||
# check if mouse click event on text input box
|
||||
if event.type == pygame.MOUSEBUTTONDOWN:
|
||||
if self.rect.collidepoint(event.pos):
|
||||
self.active = True
|
||||
else:
|
||||
self.active = False
|
||||
|
||||
# check for keyboard input
|
||||
if event.type == pygame.KEYDOWN and self.active:
|
||||
# enter will submit and exit input box
|
||||
if event.key == pygame.K_RETURN:
|
||||
self.active = False
|
||||
|
||||
# backspace will delete last character
|
||||
elif event.key == pygame.K_BACKSPACE:
|
||||
self.text = self.text[:-1]
|
||||
# other characters will be added to the string
|
||||
else:
|
||||
self.text += event.unicode
|
||||
|
||||
def draw(self, screen):
|
||||
# draw background of input box
|
||||
pygame.draw.rect(screen, self.background_color, self.rect)
|
||||
|
||||
# change border color depending if input box is active or not
|
||||
if self.active:
|
||||
border_color = self.active_border_color
|
||||
else:
|
||||
border_color = self.border_color
|
||||
|
||||
# draw border
|
||||
pygame.draw.rect(screen, border_color, self.rect, 2)
|
||||
|
||||
# draw text
|
||||
text_surface = self.font.render(self.text, True, self.text_color)
|
||||
|
||||
# show text with indentation
|
||||
screen.blit(text_surface, (self.rect.x + 10, self.rect.y + 10))
|
||||
|
||||
def get_text(self):
|
||||
return self.text
|
||||
Reference in New Issue
Block a user