sdl2_demo: capture keypresses on screen

This commit is contained in:
Thomas Farstrike
2025-05-17 21:34:00 +02:00
parent 7a7d3a17f1
commit db8c3a956e
+53 -1
View File
@@ -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()