diff --git a/source/text/textrenderer.cpp b/source/text/textrenderer.cpp index c17ddd5..24ec7f4 100644 --- a/source/text/textrenderer.cpp +++ b/source/text/textrenderer.cpp @@ -186,10 +186,16 @@ void TextRenderer::printAbsolute(int physical_x, int physical_y, const char* tex SDL_SetTextureAlphaModFloat(text_texture, color.a / 255.0f); } + // Obtener viewport ANTES de deshabilitar presentación lógica + // En modo letterbox (F3), SDL crea un viewport con offset para centrar la imagen + SDL_Rect viewport; + SDL_GetRenderViewport(renderer_, &viewport); + // Preparar rectángulo de destino en coordenadas físicas absolutas + // Aplicar offset del viewport para que el texto se pinte dentro del área visible SDL_FRect dest_rect; - dest_rect.x = static_cast(physical_x); - dest_rect.y = static_cast(physical_y); + dest_rect.x = static_cast(physical_x + viewport.x); + dest_rect.y = static_cast(physical_y + viewport.y); dest_rect.w = static_cast(text_surface->w); dest_rect.h = static_cast(text_surface->h); @@ -198,7 +204,7 @@ void TextRenderer::printAbsolute(int physical_x, int physical_y, const char* tex SDL_RendererLogicalPresentation presentation_mode; SDL_GetRenderLogicalPresentation(renderer_, &logical_w, &logical_h, &presentation_mode); - // Renderizar sin presentación lógica (coordenadas absolutas) + // Renderizar sin presentación lógica (coordenadas absolutas con offset de viewport) SDL_SetRenderLogicalPresentation(renderer_, 0, 0, SDL_LOGICAL_PRESENTATION_DISABLED); SDL_RenderTexture(renderer_, text_texture, nullptr, &dest_rect);