From 45e2a1657cd8aaac83494b43f21ccbd5811b3498 Mon Sep 17 00:00:00 2001 From: VoxelTek <53562267+VoxelTek@users.noreply.github.com> Date: Tue, 15 Jul 2025 12:53:33 +1000 Subject: [PATCH] Rework to add Exclusive Fullscreen option. --- CONFIG/MainDlg.cpp | 11 +++++++++ CONFIG/MainDlg.h | 1 + CONFIG/config.cpp | 3 +++ CONFIG/config.h | 1 + CONFIG/res/maindialog.ui | 48 +++++++++++++++++++++++++++++++++------- ISLE/isleapp.cpp | 5 ++++- ISLE/isleapp.h | 3 ++- 7 files changed, 62 insertions(+), 10 deletions(-) diff --git a/CONFIG/MainDlg.cpp b/CONFIG/MainDlg.cpp index a789a542..4df74f16 100644 --- a/CONFIG/MainDlg.cpp +++ b/CONFIG/MainDlg.cpp @@ -58,6 +58,7 @@ CMainDialog::CMainDialog(QWidget* pParent) : QDialog(pParent) connect(m_ui->musicCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxMusic); connect(m_ui->sound3DCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckbox3DSound); connect(m_ui->fullscreenCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxFullscreen); + connect(m_ui->exclusiveFullscreenCheckbox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxExclusiveFullscreen); connect(m_ui->rumbleCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxRumble); connect(m_ui->textureCheckBox, &QCheckBox::toggled, this, &CMainDialog::OnCheckboxTexture); connect(m_ui->touchComboBox, &QComboBox::currentIndexChanged, this, &CMainDialog::TouchControlsChanged); @@ -259,6 +260,8 @@ void CMainDialog::UpdateInterface() } m_ui->musicCheckBox->setChecked(currentConfigApp->m_music); m_ui->fullscreenCheckBox->setChecked(currentConfigApp->m_full_screen); + m_ui->exclusiveFullscreenCheckbox->setEnabled(currentConfigApp->m_full_screen); + m_ui->exclusiveFullscreenCheckbox->setChecked(currentConfigApp->m_exclusive_full_screen); m_ui->rumbleCheckBox->setChecked(currentConfigApp->m_haptic); m_ui->touchComboBox->setCurrentIndex(currentConfigApp->m_touch_scheme); m_ui->transitionTypeComboBox->setCurrentIndex(currentConfigApp->m_transition_type); @@ -344,6 +347,14 @@ void CMainDialog::OnCheckboxMusic(bool checked) void CMainDialog::OnCheckboxFullscreen(bool checked) { currentConfigApp->m_full_screen = checked; + m_ui->exclusiveFullscreenCheckbox->setEnabled(checked); + m_modified = true; + UpdateInterface(); +} + +void CMainDialog::OnCheckboxExclusiveFullscreen(bool checked) +{ + currentConfigApp->m_exclusive_full_screen = checked; m_modified = true; UpdateInterface(); } diff --git a/CONFIG/MainDlg.h b/CONFIG/MainDlg.h index 75f154bb..ece4dbfd 100644 --- a/CONFIG/MainDlg.h +++ b/CONFIG/MainDlg.h @@ -42,6 +42,7 @@ private slots: void OnRadiobuttonTextureHighQuality(bool checked); void OnCheckboxMusic(bool checked); void OnCheckboxFullscreen(bool checked); + void OnCheckboxExclusiveFullscreen(bool checked); void OnCheckboxRumble(bool checked); void OnCheckboxTexture(bool checked); void TouchControlsChanged(int index); diff --git a/CONFIG/config.cpp b/CONFIG/config.cpp index 52634d76..6877900c 100644 --- a/CONFIG/config.cpp +++ b/CONFIG/config.cpp @@ -74,6 +74,7 @@ bool CConfigApp::InitInstance() m_driver = NULL; m_device = NULL; m_full_screen = TRUE; + m_exclusive_full_screen = FALSE; m_transition_type = 3; // 3: Mosaic m_wide_view_angle = TRUE; m_use_joystick = TRUE; @@ -165,6 +166,7 @@ bool CConfigApp::ReadRegisterSettings() m_display_bit_depth = iniparser_getint(dict, "isle:Display Bit Depth", -1); m_flip_surfaces = iniparser_getboolean(dict, "isle:Flip Surfaces", m_flip_surfaces); m_full_screen = iniparser_getboolean(dict, "isle:Full Screen", m_full_screen); + m_exclusive_full_screen = iniparser_getboolean(dict, "isle:Exclusive Full Screen", m_exclusive_full_screen); m_transition_type = iniparser_getint(dict, "isle:Transition Type", m_transition_type); m_touch_scheme = iniparser_getint(dict, "isle:Touch Scheme", m_touch_scheme); m_3d_video_ram = iniparser_getboolean(dict, "isle:Back Buffers in Video RAM", m_3d_video_ram); @@ -337,6 +339,7 @@ void CConfigApp::WriteRegisterSettings() const SetIniInt(dict, "isle:Display Bit Depth", m_display_bit_depth); SetIniBool(dict, "isle:Flip Surfaces", m_flip_surfaces); SetIniBool(dict, "isle:Full Screen", m_full_screen); + SetIniBool(dict, "isle:Exclusive Full Screen", m_exclusive_full_screen); SetIniBool(dict, "isle:Wide View Angle", m_wide_view_angle); SetIniInt(dict, "isle:Transition Type", m_transition_type); diff --git a/CONFIG/config.h b/CONFIG/config.h index a63e8fa4..ad3321ac 100644 --- a/CONFIG/config.h +++ b/CONFIG/config.h @@ -69,6 +69,7 @@ class CConfigApp { int m_display_bit_depth; bool m_flip_surfaces; bool m_full_screen; + bool m_exclusive_full_screen; int m_transition_type; bool m_3d_video_ram; bool m_wide_view_angle; diff --git a/CONFIG/res/maindialog.ui b/CONFIG/res/maindialog.ui index 1e42b729..f7480614 100644 --- a/CONFIG/res/maindialog.ui +++ b/CONFIG/res/maindialog.ui @@ -605,6 +605,9 @@ The game will gradually increase the number of actors until this maximum is reac + + <html><head/><body><p>Maximum framerate. Values above 100fps are untested.</p></body></html> + fps @@ -620,14 +623,31 @@ The game will gradually increase the number of actors until this maximum is reac - - - Toggle fullscreen display mode. - - - Fullscreen - - + + + + + Toggle fullscreen display mode. + + + Fullscreen + + + + + + + false + + + Grants the app full control of the display for better performance and lower input lag. May cause slower alt-tabbing. + + + Exclusive Fullscreen + + + + @@ -640,6 +660,9 @@ The game will gradually increase the number of actors until this maximum is reac + + <html><head/><body><p>The aspect ratio you intend to use.<br/>Select <span style=" font-weight:700;">Custom</span> to define your own width and height.<br/>Has no effect on the game itself.</p></body></html> + 0 @@ -675,6 +698,9 @@ The game will gradually increase the number of actors until this maximum is reac 0 + + <html><head/><body><p>Horizontal resolution. </p><p>Locked to aspect ratio, unless <span style=" font-weight:700;">Custom</span> is select as the aspect ratio.</p></body></html> + Qt::AlignmentFlag::AlignCenter @@ -719,6 +745,9 @@ The game will gradually increase the number of actors until this maximum is reac 0 + + <html><head/><body><p>Vertical resolution. </p><p>If an aspect ratio other than <span style=" font-weight:700;">Custom</span> is selected, this directly affects the horizontal resolution.</p></body></html> + Qt::AlignmentFlag::AlignCenter @@ -827,6 +856,9 @@ The game will gradually increase the number of actors until this maximum is reac + + Settings for Texture Loader extension. + Texture Loader Extension diff --git a/ISLE/isleapp.cpp b/ISLE/isleapp.cpp index 9455e91d..bda3ec98 100644 --- a/ISLE/isleapp.cpp +++ b/ISLE/isleapp.cpp @@ -179,6 +179,7 @@ IsleApp::IsleApp() m_xRes = 640; m_yRes = 480; m_frameRate = 100.0f; + m_exclusiveFullScreen = FALSE; } // FUNCTION: ISLE 0x4011a0 @@ -841,7 +842,7 @@ MxResult IsleApp::SetupWindow() window = SDL_CreateWindowWithProperties(props); - if (m_fullScreen) { + if (m_exclusiveFullScreen && m_fullScreen) { SDL_DisplayMode closestMode; SDL_DisplayID displayID = SDL_GetDisplayForWindow(window); bool findModeSuccess = @@ -1007,6 +1008,7 @@ bool IsleApp::LoadConfig() iniparser_set(dict, "isle:Flip Surfaces", m_flipSurfaces ? "true" : "false"); iniparser_set(dict, "isle:Full Screen", m_fullScreen ? "true" : "false"); + iniparser_set(dict, "isle:Exclusive Full Screen", m_exclusiveFullScreen ? "true" : "false"); iniparser_set(dict, "isle:Wide View Angle", m_wideViewAngle ? "true" : "false"); iniparser_set(dict, "isle:3DSound", m_use3dSound ? "true" : "false"); @@ -1072,6 +1074,7 @@ bool IsleApp::LoadConfig() m_flipSurfaces = iniparser_getboolean(dict, "isle:Flip Surfaces", m_flipSurfaces); m_fullScreen = iniparser_getboolean(dict, "isle:Full Screen", m_fullScreen); + m_exclusiveFullScreen = iniparser_getboolean(dict, "isle:Exclusive Full Screen", m_exclusiveFullScreen); m_wideViewAngle = iniparser_getboolean(dict, "isle:Wide View Angle", m_wideViewAngle); m_use3dSound = iniparser_getboolean(dict, "isle:3DSound", m_use3dSound); m_useMusic = iniparser_getboolean(dict, "isle:Music", m_useMusic); diff --git a/ISLE/isleapp.h b/ISLE/isleapp.h index 380ad719..946f0611 100644 --- a/ISLE/isleapp.h +++ b/ISLE/isleapp.h @@ -72,7 +72,7 @@ class IsleApp { char* m_cdPath; // 0x04 char* m_deviceId; // 0x08 char* m_savePath; // 0x0c - MxS32 m_fullScreen; // 0x10 + MxBool m_fullScreen; // 0x10 MxS32 m_flipSurfaces; // 0x14 MxS32 m_backBuffersInVram; // 0x18 MxS32 m_using8bit; // 0x1c @@ -111,6 +111,7 @@ class IsleApp { MxS32 m_xRes; MxS32 m_yRes; MxFloat m_frameRate; + MxBool m_exclusiveFullScreen; }; extern IsleApp* g_isle;