Files
clawbot/skills/fullscreen_message/fullscreen_message_skill.py

62 lines
1.9 KiB
Python

import argparse
import pygame
import pygame.freetype
import sys
import time
def get_font(size: int):
"""Return a font surface renderer, falling back to freetype if needed."""
try:
pygame.font.init()
font = pygame.font.Font(None, size)
return "font", font
except (NotImplementedError, pygame.error):
pygame.freetype.init()
font = pygame.freetype.SysFont(None, size)
return "freetype", font
def render_text(font_kind, font_obj, message):
color = (255, 255, 255)
if font_kind == "font":
return font_obj.render(message, True, color)
surface, _ = font_obj.render(message, fgcolor=color)
return surface
def main():
parser = argparse.ArgumentParser(description="Display a fullscreen message.")
parser.add_argument('--message', type=str, default="Hello, Adolfo!", help='Message to display')
parser.add_argument('--timeout', type=int, default=0, help='Seconds before auto-dismiss (0 = wait for key)')
args = parser.parse_args()
pygame.init()
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
pygame.display.set_caption("Fullscreen Message")
font_kind, font_obj = get_font(100)
text = render_text(font_kind, font_obj, args.message)
text_rect = text.get_rect(center=(screen.get_width() // 2, screen.get_height() // 2))
clock = pygame.time.Clock()
start_time = time.time()
running = True
while running:
for event in pygame.event.get():
if event.type in (pygame.QUIT, pygame.KEYDOWN, pygame.MOUSEBUTTONDOWN):
running = False
if args.timeout and (time.time() - start_time) > args.timeout:
running = False
screen.fill((0, 0, 0))
screen.blit(text, text_rect)
pygame.display.flip()
clock.tick(30)
pygame.quit()
sys.exit()
if __name__ == "__main__":
main()