--- hatari/src/falcon/hostscreen.c 2019/04/09 08:54:34 1.1.1.8 +++ hatari/src/falcon/hostscreen.c 2019/04/09 08:55:47 1.1.1.9 @@ -50,7 +50,6 @@ const char HostScreen_fileid[] = "Hatari /* TODO: put these hostscreen globals to some struct */ -static Uint32 sdl_videoparams; static SDL_Rect hs_rect; static int hs_width_req, hs_height_req, hs_bpp; static bool doUpdate; // the HW surface is available -> the SDL need not to update the surface after ->pixel access @@ -89,17 +88,13 @@ void HostScreen_UnInit(void) void HostScreen_toggleFullScreen(void) { - sdl_videoparams ^= SDL_FULLSCREEN; - Dprintf(("Fullscreen = %s, width = %d, height = %d, bpp = %d\n", - sdl_videoparams&SDL_FULLSCREEN?"true":"false", hs_width_req, hs_height_req, hs_bpp)); - - HostScreen_setWindowSize(hs_width_req, hs_height_req, hs_bpp); + HostScreen_setWindowSize(hs_width_req, hs_height_req, hs_bpp, true); /* force screen redraw */ HostScreen_update1(NULL, true); } -void HostScreen_setWindowSize(int width, int height, int bpp) +void HostScreen_setWindowSize(int width, int height, int bpp, bool bForceChange) { const bool keep = ConfigureParams.Screen.bKeepResolution; int screenwidth, screenheight, maxw, maxh; @@ -114,8 +109,8 @@ void HostScreen_setWindowSize(int width, while (width > maxw*scalex) { scalex *= 2; } - while (height > maxh*scalex) { - scalex *= 2; + while (height > maxh*scaley) { + scaley *= 2; } if (scalex * scaley > 1) { fprintf(stderr, "WARNING: too large screen size %dx%d -> divided by %dx%d!\n", @@ -187,9 +182,7 @@ void HostScreen_setWindowSize(int width, hs_rect.w = screenwidth; hs_rect.h = screenheight - sbarheight; - if (sdlscrn && (!bpp || sdlscrn->format->BitsPerPixel == bpp) && - sdlscrn->w == (signed)screenwidth && sdlscrn->h == (signed)screenheight && - (sdlscrn->flags&SDL_FULLSCREEN) == (sdl_videoparams&SDL_FULLSCREEN)) + if (!Screen_SetSDLVideoSize(screenwidth, screenheight, bpp, bForceChange)) { /* same host screen size despite Atari resolution change, * -> no time consuming host video mode change needed @@ -208,31 +201,13 @@ void HostScreen_setWindowSize(int width, */ Statusbar_Init(sdlscrn); } +#if WITH_SDL2 + doUpdate = true; +#else // check in case switched from VDI to Hostscreen doUpdate = ( sdlscrn->flags & SDL_HWSURFACE ) == 0; - return; - } - - if (bInFullScreen) { - /* un-embed the Hatari WM window for fullscreen */ - Control_ReparentWindow(screenwidth, screenheight, bInFullScreen); - - sdl_videoparams = SDL_SWSURFACE|SDL_HWPALETTE|SDL_FULLSCREEN; - } else { - sdl_videoparams = SDL_SWSURFACE|SDL_HWPALETTE; - } -#ifdef _MUDFLAP - if (sdlscrn) { - __mf_unregister(sdlscrn->pixels, sdlscrn->pitch*sdlscrn->h, __MF_TYPE_GUESS); - } -#endif - sdlscrn = SDL_SetVideoMode(screenwidth, screenheight, bpp, sdl_videoparams); -#ifdef _MUDFLAP - __mf_register(sdlscrn->pixels, sdlscrn->pitch*sdlscrn->h, __MF_TYPE_GUESS, "SDL pixels"); #endif - if (!bInFullScreen) { - /* re-embed the new Hatari SDL window */ - Control_ReparentWindow(screenwidth, screenheight, bInFullScreen); + return; } // In case surface format changed, update SDL palette & remap the native palette @@ -245,8 +220,12 @@ void HostScreen_setWindowSize(int width, Dprintf(("Surface Pitch = %d, width = %d, height = %d\n", sdlscrn->pitch, sdlscrn->w, sdlscrn->h)); Dprintf(("Must Lock? %s\n", SDL_MUSTLOCK(sdlscrn) ? "YES" : "NO")); +#if WITH_SDL2 + doUpdate = true; +#else // is the SDL_update needed? doUpdate = ( sdlscrn->flags & SDL_HWSURFACE ) == 0; +#endif Dprintf(("Pixel format:bitspp=%d, tmasks r=%04x g=%04x b=%04x" ", tshifts r=%d g=%d b=%d" @@ -256,7 +235,7 @@ void HostScreen_setWindowSize(int width, sdlscrn->format->Rshift, sdlscrn->format->Gshift, sdlscrn->format->Bshift, sdlscrn->format->Rloss, sdlscrn->format->Gloss, sdlscrn->format->Bloss)); - Main_WarpMouse(sdlscrn->w/2,sdlscrn->h/2); + Main_WarpMouse(sdlscrn->w/2,sdlscrn->h/2, false); }