Some fixes, fixes PCjr when the emulator is started in full screen, fixes #1702.

This commit is contained in:
OBattler
2021-09-18 15:24:00 +02:00
parent 249e7779c7
commit 0f69aa7ff7
4 changed files with 64 additions and 40 deletions

View File

@@ -505,7 +505,7 @@ load_general(void)
video_fullscreen_scale = config_get_int(cat, "video_fullscreen_scale", 0);
video_fullscreen_first = config_get_int(cat, "video_fullscreen_first", 1);
video_fullscreen_first = config_get_int(cat, "video_fullscreen_first", 0);
video_filter_method = config_get_int(cat, "video_filter_method", 1);
@@ -524,7 +524,10 @@ load_general(void)
update_icons = config_get_int(cat, "update_icons", 1);
window_remember = config_get_int(cat, "window_remember", 0);
if (window_remember) {
if (window_remember || (vid_resize & 2)) {
if (!window_remember)
config_delete_var(cat, "window_remember");
p = config_get_string(cat, "window_coordinates", NULL);
if (p == NULL)
p = "0, 0, 0, 0";
@@ -2156,8 +2159,11 @@ save_general(void)
else
config_set_int(cat, "update_icons", update_icons);
if (window_remember) {
config_set_int(cat, "window_remember", window_remember);
if (window_remember || (vid_resize & 2)) {
if (window_remember)
config_set_int(cat, "window_remember", window_remember);
else
config_delete_var(cat, "window_remember");
sprintf(temp, "%i, %i, %i, %i", window_w, window_h, window_x, window_y);
config_set_string(cat, "window_coordinates", temp);

View File

@@ -1047,10 +1047,10 @@ plat_setfullscreen(int on)
int dpi = win_get_dpi(hwndMain);
/* Are we changing from the same state to the same state? */
if ((!!on) == (!!video_fullscreen))
if ((!!(on & 1)) == (!!video_fullscreen))
return;
if (on && video_fullscreen_first) {
if (on && (start_in_fullscreen || video_fullscreen_first)) {
video_fullscreen |= 2;
if (ui_msgbox_header(MBX_INFO | MBX_DONTASK, (wchar_t *) IDS_2134, (wchar_t *) IDS_2052) == 10) {
video_fullscreen_first = 0;
@@ -1060,13 +1060,14 @@ plat_setfullscreen(int on)
}
/* OK, claim the video. */
win_mouse_close();
if (!(on & 2))
win_mouse_close();
/* Close the current mode, and open the new one. */
video_fullscreen = on | 2;
video_fullscreen = (on & 1) | 2;
if (vid_apis[vid_api].set_fs)
vid_apis[vid_api].set_fs(on);
if (!on) {
vid_apis[vid_api].set_fs(on & 1);
if (!(on & 1)) {
plat_resize(scrnsz_x, scrnsz_y);
if (vid_resize) {
/* scale the screen base on DPI */
@@ -1114,26 +1115,31 @@ plat_setfullscreen(int on)
}
video_fullscreen &= 1;
video_force_resize_set(1);
if (!on)
if (!(on & 1))
doresize = 1;
win_mouse_init();
/* Release video and make it redraw the screen. */
device_force_redraw();
if (!(on & 2)) {
/* Release video and make it redraw the screen. */
device_force_redraw();
/* Send a CTRL break code so CTRL does not get stuck. */
keyboard_input(0, 0x01D);
/* Send a CTRL break code so CTRL does not get stuck. */
keyboard_input(0, 0x01D);
}
/* Finally, handle the host's mouse cursor. */
/* win_log("%s full screen, %s cursor\n", on ? "enter" : "leave", on ? "hide" : "show"); */
show_cursor(video_fullscreen ? 0 : -1);
/* This is needed for OpenGL. */
plat_vidapi_enable(0);
plat_vidapi_enable(1);
if (!(on & 2)) {
/* This is needed for OpenGL. */
plat_vidapi_enable(0);
plat_vidapi_enable(1);
}
}
void
plat_vid_reload_options(void)
{

View File

@@ -234,7 +234,7 @@ sdl_blit(int x, int y, int w, int h)
SDL_Rect r_src;
int ret;
if (!sdl_enabled || (h <= 0) || (buffer32 == NULL) || (sdl_render == NULL) || (sdl_tex == NULL)) {
if (!sdl_enabled || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || (sdl_render == NULL) || (sdl_tex == NULL)) {
video_blit_complete();
return;
}
@@ -277,6 +277,11 @@ sdl_destroy_window(void)
static void
sdl_destroy_texture(void)
{
if (sdl_tex != NULL) {
SDL_DestroyTexture(sdl_tex);
sdl_tex = NULL;
}
/* SDL_DestroyRenderer also automatically destroys all associated textures. */
if (sdl_render != NULL) {
SDL_DestroyRenderer(sdl_render);
@@ -339,13 +344,8 @@ sdl_select_best_hw_driver(void)
static void
sdl_reinit_texture(void)
sdl_init_texture(void)
{
if (sdl_flags == -1)
return;
sdl_destroy_texture();
if (sdl_flags & RENDERER_HARDWARE) {
sdl_render = SDL_CreateRenderer(sdl_win, -1, SDL_RENDERER_ACCELERATED);
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, video_filter_method ? "1" : "0");
@@ -357,6 +357,17 @@ sdl_reinit_texture(void)
}
static void
sdl_reinit_texture(void)
{
if (sdl_flags == -1)
return;
sdl_destroy_texture();
sdl_init_texture();
}
void
sdl_set_fs(int fs)
{
@@ -365,7 +376,6 @@ sdl_set_fs(int fs)
SDL_LockMutex(sdl_mutex);
sdl_enabled = 0;
sdl_destroy_texture();
if (fs) {
ShowWindow(sdl_parent_hwnd, TRUE);
@@ -408,7 +418,7 @@ sdl_set_fs(int fs)
else
sdl_flags &= ~RENDERER_FULL_SCREEN;
sdl_reinit_texture();
// sdl_reinit_texture();
sdl_enabled = 1;
SDL_UnlockMutex(sdl_mutex);
}
@@ -456,6 +466,7 @@ sdl_init_common(int flags)
}
sdl_win = SDL_CreateWindowFrom((void *)hwndRender);
sdl_init_texture();
sdl_set_fs(video_fullscreen & 1);
/* Make sure we get a clean exit. */
@@ -554,16 +565,16 @@ sdl_enable(int enable)
SDL_UnlockMutex(sdl_mutex);
}
void
sdl_reload(void)
{
if (sdl_flags & RENDERER_HARDWARE)
{
SDL_LockMutex(sdl_mutex);
if (sdl_flags & RENDERER_HARDWARE) {
SDL_LockMutex(sdl_mutex);
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, video_filter_method ? "1" : "0");
sdl_reinit_texture();
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, video_filter_method ? "1" : "0");
sdl_reinit_texture();
SDL_UnlockMutex(sdl_mutex);
}
}
SDL_UnlockMutex(sdl_mutex);
}
}

View File

@@ -1427,7 +1427,8 @@ ui_init(int nCmdShow)
}
/* Initialize the mouse module. */
win_mouse_init();
if (!start_in_fullscreen && !video_fullscreen_first)
win_mouse_init();
/*
* Before we can create the Render window, we first have
@@ -1457,16 +1458,16 @@ ui_init(int nCmdShow)
else
plat_resize(scrnsz_x, scrnsz_y);
/* Initialize the rendering window, or fullscreen. */
if (start_in_fullscreen || video_fullscreen_first)
plat_setfullscreen(3);
/* Fire up the machine. */
pc_reset_hard_init();
/* Set the PAUSE mode depending on the renderer. */
plat_pause(0);
/* Initialize the rendering window, or fullscreen. */
if (start_in_fullscreen)
plat_setfullscreen(1);
/* If so requested via the command line, inform the
* application that started us of our HWND, using the
* the hWnd and unique ID the application has given