mirror of
https://github.com/vcmi/vcmi.git
synced 2025-08-13 19:54:17 +02:00
Merge pull request #621 from sztupy/android_fix_sdl_letterboxing
Fix SDL letterboxing on Android builds
This commit is contained in:
@@ -1056,6 +1056,39 @@ static bool recreateWindow(int w, int h, int bpp, bool fullscreen, int displayIn
|
|||||||
|
|
||||||
#ifdef VCMI_ANDROID
|
#ifdef VCMI_ANDROID
|
||||||
mainWindow = SDL_CreateWindow(NAME.c_str(), SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex),SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), 0, 0, SDL_WINDOW_FULLSCREEN);
|
mainWindow = SDL_CreateWindow(NAME.c_str(), SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex),SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), 0, 0, SDL_WINDOW_FULLSCREEN);
|
||||||
|
|
||||||
|
// SDL on Android doesn't do proper letterboxing, and will show an annoying flickering in the blank space in case you're not using the full screen estate
|
||||||
|
// That's why we need to make sure our width and height we'll use below have the same aspect ratio as the screen itself to ensure we fill the full screen estate
|
||||||
|
|
||||||
|
SDL_Rect screenRect;
|
||||||
|
|
||||||
|
if(SDL_GetDisplayBounds(0, &screenRect) == 0)
|
||||||
|
{
|
||||||
|
int screenWidth, screenHeight;
|
||||||
|
double aspect;
|
||||||
|
|
||||||
|
screenWidth = screenRect.w;
|
||||||
|
screenHeight = screenRect.h;
|
||||||
|
|
||||||
|
aspect = (double)screenWidth / (double)screenHeight;
|
||||||
|
|
||||||
|
logGlobal->info("Screen size and aspect ration: %dx%d (%lf)", screenWidth, screenHeight, aspect);
|
||||||
|
|
||||||
|
if((double)w / aspect > (double)h)
|
||||||
|
{
|
||||||
|
h = (int)round((double)w / aspect);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
w = (int)round((double)h * aspect);
|
||||||
|
}
|
||||||
|
|
||||||
|
logGlobal->info("Changing logical screen size to %dx%d", w, h);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logGlobal->error("Can't fix aspect ratio for screen");
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
if(fullscreen)
|
if(fullscreen)
|
||||||
|
@@ -162,6 +162,9 @@ std::shared_ptr<IShowActivatable> CGuiHandler::topInt()
|
|||||||
|
|
||||||
void CGuiHandler::totalRedraw()
|
void CGuiHandler::totalRedraw()
|
||||||
{
|
{
|
||||||
|
#ifdef VCMI_ANDROID
|
||||||
|
SDL_FillRect(screen2, NULL, SDL_MapRGB(screen2->format, 0, 0, 0));
|
||||||
|
#endif
|
||||||
for(auto & elem : objsToBlit)
|
for(auto & elem : objsToBlit)
|
||||||
elem->showAll(screen2);
|
elem->showAll(screen2);
|
||||||
blitAt(screen2,0,0,screen);
|
blitAt(screen2,0,0,screen);
|
||||||
|
Reference in New Issue
Block a user