Files
MicroPythonOS/draft_code/sdl2_demo.py
T
2025-05-17 21:35:59 +02:00

80 lines
2.5 KiB
Python

import sdl2
import sdl2.ext
import sdl2.sdlttf
import ctypes # Added missing import
# Initialize SDL2 and TTF
sdl2.ext.init()
sdl2.sdlttf.TTF_Init()
# Create window and renderer
window = sdl2.ext.Window("Test", size=(800, 600))
window.show()
renderer = sdl2.ext.Renderer(window)
# Load font
font = sdl2.sdlttf.TTF_OpenFont(b"/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 24)
if not font:
print("Failed to load font!")
exit(1)
# Initialize text variables
last_key = "No key pressed"
text_surface = None
text_texture = None
fullscreen = False # Track fullscreen state
def render_text(text):
global text_surface, text_texture
# Clean up previous texture
if text_texture:
sdl2.SDL_DestroyTexture(text_texture)
# Create new surface and texture
color = sdl2.SDL_Color(r=255, g=255, b=255)
text_surface = sdl2.sdlttf.TTF_RenderText_Solid(font, text.encode('utf-8'), color)
text_texture = sdl2.SDL_CreateTextureFromSurface(renderer.sdlrenderer, text_surface)
running = True
while running:
events = sdl2.ext.get_events()
for event in events:
if event.type == sdl2.SDL_QUIT:
running = False
elif event.type == sdl2.SDL_KEYDOWN:
key_name = sdl2.SDL_GetKeyName(event.key.keysym.sym).decode()
if key_name == "F": # Toggle fullscreen on 'F' key
fullscreen = not fullscreen
if fullscreen:
sdl2.SDL_SetWindowFullscreen(window.window, sdl2.SDL_WINDOW_FULLSCREEN)
sdl2.SDL_SetWindowSize(window.window, 800, 600)
else:
sdl2.SDL_SetWindowFullscreen(window.window, 0)
sdl2.SDL_SetWindowSize(window.window, 800, 600)
last_key = "Toggled fullscreen"
else:
last_key = f"Key pressed: {key_name}"
render_text(last_key)
# Clear screen
renderer.clear()
# Render text if available
if text_texture:
w, h = ctypes.c_int(), ctypes.c_int()
sdl2.SDL_QueryTexture(text_texture, None, None, ctypes.byref(w), ctypes.byref(h))
dstrect = sdl2.SDL_Rect(x=10, y=10, w=w.value, h=h.value)
sdl2.SDL_RenderCopy(renderer.sdlrenderer, text_texture, None, dstrect)
# Update display
renderer.present()
# Cleanup
if text_texture:
sdl2.SDL_DestroyTexture(text_texture)
if text_surface:
sdl2.SDL_FreeSurface(text_surface)
sdl2.sdlttf.TTF_CloseFont(font)
sdl2.sdlttf.TTF_Quit()
sdl2.ext.quit()