Source code for scripts.engine.widgets.window
from __future__ import annotations
from abc import ABC, abstractmethod
import pygame
from pygame_gui import UI_BUTTON_PRESSED
from pygame_gui.elements import UIWindow
__all__ = ["Window"]
[docs]class Window(ABC, UIWindow):
[docs] def process_event(self, event: pygame.event.Event):
"""
Gives UI Windows access to pygame events. Derived windows should super() call this class if they implement
their own process_event method.
NOTE: Copied check for button close from pygame_gui UIWindow to allow overwriting use of close button.
"""
super().process_event(event)
if event.type == pygame.MOUSEBUTTONDOWN and event.button in [
pygame.BUTTON_LEFT,
pygame.BUTTON_MIDDLE,
pygame.BUTTON_RIGHT,
]:
scaled_mouse_pos = self.ui_manager.calculate_scaled_mouse_position(event.pos)
edge_hovered = (
self.edge_hovering[0] or self.edge_hovering[1] or self.edge_hovering[2] or self.edge_hovering[3]
)
if self.is_enabled and event.button == pygame.BUTTON_LEFT and edge_hovered:
self.resizing_mode_active = True
self.start_resize_point = scaled_mouse_pos
self.start_resize_rect = self.rect.copy()
if event.type == pygame.MOUSEBUTTONUP and event.button == pygame.BUTTON_LEFT and self.resizing_mode_active:
self.resizing_mode_active = False
if (
event.type == pygame.USEREVENT
and event.user_type == UI_BUTTON_PRESSED
and event.ui_element == self.close_window_button
):
self.process_close_button()
[docs] def update(self, time_delta: float):
"""
Update based on current state and data. Run every frame.
"""
super().update(time_delta)