From db8c3a956e0762d69ec0e14bf5d97fc05c7149fb Mon Sep 17 00:00:00 2001 From: Thomas Farstrike Date: Sat, 17 May 2025 21:34:00 +0200 Subject: [PATCH] sdl2_demo: capture keypresses on screen --- draft_code/sdl2_demo.py | 54 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/draft_code/sdl2_demo.py b/draft_code/sdl2_demo.py index c7a9b8ac..590d749c 100644 --- a/draft_code/sdl2_demo.py +++ b/draft_code/sdl2_demo.py @@ -1,9 +1,38 @@ import sdl2 import sdl2.ext +import sdl2.sdlttf +import ctypes +# 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 + +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: @@ -12,5 +41,28 @@ while running: if event.type == sdl2.SDL_QUIT: running = False elif event.type == sdl2.SDL_KEYDOWN: - print(f"Key pressed: {event.key.keysym.sym}") + # Update text with pressed key + last_key = f"Key pressed: {sdl2.SDL_GetKeyName(event.key.keysym.sym).decode()}" + 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()