fixed pause screen overlay

This commit is contained in:
2025-11-23 08:29:01 +01:00
parent 39da4484ca
commit 4b77cfa3e1

View File

@ -431,6 +431,8 @@ void GameRenderer::renderPlayingState(
// Pause overlay (skip when visuals are suppressed, e.g., countdown)
if (!suppressPauseVisuals && game->isPaused() && !showExitConfirmPopup) {
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
// Draw blur effect around the grid (keep in logical coordinates)
for (int i = -4; i <= 4; ++i) {
float spread = static_cast<float>(std::abs(i));
Uint8 alpha = Uint8(std::max(8.f, 32.f - spread * 4.f));
@ -443,14 +445,41 @@ void GameRenderer::renderPlayingState(
};
SDL_RenderFillRect(renderer, &blurRect);
}
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
// Switch to window coordinates for the full-screen overlay and text
SDL_Rect oldViewport;
SDL_GetRenderViewport(renderer, &oldViewport);
float oldScaleX, oldScaleY;
SDL_GetRenderScale(renderer, &oldScaleX, &oldScaleY);
SDL_SetRenderViewport(renderer, nullptr);
SDL_SetRenderScale(renderer, 1.0f, 1.0f);
// Draw full screen overlay
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 180);
SDL_FRect pauseOverlay{0, 0, logicalW, logicalH};
SDL_FRect pauseOverlay{0, 0, winW, winH};
SDL_RenderFillRect(renderer, &pauseOverlay);
pixelFont->draw(renderer, logicalW * 0.5f - 80, logicalH * 0.5f - 20, "PAUSED", 2.0f, {255, 255, 255, 255});
pixelFont->draw(renderer, logicalW * 0.5f - 120, logicalH * 0.5f + 30, "Press P to resume", 0.8f, {200, 200, 220, 255});
// Draw centered text
// Note: We multiply font scale by logicalScale to maintain consistent size
// since we reset the renderer scale to 1.0
const char* pausedText = "PAUSED";
float pausedScale = 2.0f * logicalScale;
int pW = 0, pH = 0;
pixelFont->measure(pausedText, pausedScale, pW, pH);
pixelFont->draw(renderer, (winW - pW) * 0.5f, (winH - pH) * 0.5f - (20 * logicalScale), pausedText, pausedScale, {255, 255, 255, 255});
const char* resumeText = "Press P to resume";
float resumeScale = 0.8f * logicalScale;
int rW = 0, rH = 0;
pixelFont->measure(resumeText, resumeScale, rW, rH);
pixelFont->draw(renderer, (winW - rW) * 0.5f, (winH - pH) * 0.5f + (40 * logicalScale), resumeText, resumeScale, {200, 200, 220, 255});
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE);
// Restore previous render state
SDL_SetRenderViewport(renderer, &oldViewport);
SDL_SetRenderScale(renderer, oldScaleX, oldScaleY);
}
// Exit confirmation popup styled like other retro panels