From f6267e8c7d43904a33bf02d5fbaa3c6b0fd14b16 Mon Sep 17 00:00:00 2001 From: OusmBlueNinja <89956790+OusmBlueNinja@users.noreply.github.com> Date: Sat, 21 Sep 2024 15:51:54 -0500 Subject: [PATCH] Update pygui.py --- pygui.py | 52 +++++++++++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/pygui.py b/pygui.py index de8d183..6d566d3 100644 --- a/pygui.py +++ b/pygui.py @@ -12,42 +12,45 @@ def _load_colors(file_path='pygui_colors.json'): colors = json.load(file) print(f"[pygui] Color config Data:") - print(f" name: {colors['meta'].get('name', 'N/A')}") - print(f" description: {colors['meta'].get('description','N/A')}") - print(f" version: {colors['meta'].get('version','N/A')}") - print(f" link: {colors['meta'].get('link','N/A')}") + print(f"[pygui] name: {colors['meta'].get('name', 'N/A')}") + print(f"[pygui] description: {colors['meta'].get('description','N/A')}") + print(f"[pygui] version: {colors['meta'].get('version','N/A')}") + print(f"[pygui] link: {colors['meta'].get('link','N/A')}") return colors # Load the colors at the start of the program color = {"label_colors":{},"gui_color":{}, "slider_color":{}} # Default colors -def init_pygui(): +def init(file_path='pygui_colors.json'): """Initialize Pygame.""" global windowsId, colors - - colors = _load_colors() + print("[pygui] Welcome to PyGUI!") + colors = _load_colors(file_path=file_path) windowsId = 0 pygame.init() -def quit_pygui(): +def quit(): """Quit Pygame.""" pygame.quit() class Button: - def __init__(self, text, pos, size): + def __init__(self, text:str, pos:tuple[int,int], size:tuple[int,int]): + + if type(text) != str and type(pos) != tuple and type(size) != tuple: + print(f"[pygui] Invalid Cunstructor Values 'Button' '{text}'") self.text = text self.pos = pos self.size = size - self.rect = pygame.Rect(pos, size) + self.rect = pygame.Rect(pos[0], pos[1], size[0], size[1]) + self.is_clicked = False self.mouse_released = True # Track mouse state internally self.type = Button - def call(self, screen): + def call(self, screen, mouse_pos=(0,0)): """Draw the button and check if it's clicked.""" - mouse_pos = pygame.mouse.get_pos() mouse_click = pygame.mouse.get_pressed()[0] # Colors @@ -92,9 +95,8 @@ class Checkbox: self.type = Checkbox - def call(self, screen): + def call(self, screen, mouse_pos=(0,0)): """Draw the checkbox and toggle its state if clicked.""" - mouse_pos = pygame.mouse.get_pos() mouse_click = pygame.mouse.get_pressed()[0] # Handle toggle only on mouse click @@ -129,7 +131,7 @@ class TextInput: self.text = initial_text self.is_active = False - def call(self, screen, event_list): + def call(self, screen, event_list, mouse_pos=(0,0)): """Draw the text input field and handle typing when active.""" base_color = (255, 255, 255) active_color = (230, 230, 255) @@ -140,7 +142,6 @@ class TextInput: pygame.draw.rect(screen, (0, 0, 0), self.rect, 2) # Handle clicking to activate/deactivate input - mouse_pos = pygame.mouse.get_pos() if pygame.mouse.get_pressed()[0] and self.rect.collidepoint(mouse_pos): self.is_active = True elif pygame.mouse.get_pressed()[0] and not self.rect.collidepoint(mouse_pos): @@ -192,9 +193,8 @@ class Slider: knob_x = int(self.rect.x + ((self.value - self.min_value) / (self.max_value - self.min_value)) * (self.rect.width - self.knob_width)) self.knob_rect.x = knob_x # Set the knob's x position - def call(self, screen): + def call(self, screen, mouse_pos=(0,0)): """Draw the slider and handle user interaction.""" - mouse_pos = pygame.mouse.get_pos() # Get the current mouse position mouse_click = pygame.mouse.get_pressed()[0] # Check if the mouse button is pressed # Draw the slider track @@ -256,10 +256,9 @@ class Knob: self.angle_offset = -(self.min_angle + self.max_angle) / 2 - def call(self, screen): + def call(self, screen, mouse_pos=(0,0)): """Draw the knob and handle rotation.""" # Get the current mouse position and mouse click status - mouse_pos = pygame.mouse.get_pos() mouse_click = pygame.mouse.get_pressed()[0] # Check if the knob is clicked (or already being dragged) @@ -340,9 +339,8 @@ class Window: self.backround_color = colors['gui_color'].get("background", (70,70,70)) self.title_color = colors['gui_color'].get("title", (100,100,100)) - def draw(self, screen): + def draw(self, screen, mouse_pos=(0,0)): """Draw the window and allow it to be dragged.""" - mouse_pos = pygame.mouse.get_pos() mouse_click = pygame.mouse.get_pressed()[0] @@ -378,13 +376,13 @@ class Window: if Window.focused_window == self or not Window.focused_window: element.rect.topleft = (self.pos[0] + element.pos[0], self.pos[1] + element.pos[1]) - def call(self, screen): + def call(self, screen, mouse_pos=(0,0)): """Draw the window and all contained elements.""" - self.draw(screen) # Draw the window itself + self.draw(screen, mouse_pos) # Draw the window itself # Always draw all elements inside the window for element in self.elements: self.move_element(element) - element.call(screen) + element.call(screen, mouse_pos) #print(element.type, self.id) @@ -405,7 +403,7 @@ class Label: self.type = Label - def call(self, screen): + def call(self, screen, *mouse_pos): """Render and draw the label text.""" text_surface = self.font.render(self.text, True, self.color) screen.blit(text_surface, self.rect.topleft) # Draw the label using the rect position @@ -413,4 +411,4 @@ class Label: if __name__ == "__main__": print("[pygui] Import this file into your project to use, dont run directly") else: - print("[pygui] Py-GUI 0.4.1") \ No newline at end of file + print("[pygui] Py-GUI 0.4.1")