From 6f540a960339d81fb40dfcda2779c6fbf9a8a7fb Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sat, 10 Aug 2024 08:07:15 +0200 Subject: [PATCH] disable Vsync checkbox in case we are in borderelss or windowed mode to avoid unnecessary input lag --- config/ConfigFormUnit.cpp | 34 ++++++++++++++++++++++++++++++++++ config/ConfigFormUnit.dfm | 10 ---------- config/ConfigFormUnit.h | 1 + 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/config/ConfigFormUnit.cpp b/config/ConfigFormUnit.cpp index f2b5aca..1d49427 100644 --- a/config/ConfigFormUnit.cpp +++ b/config/ConfigFormUnit.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include "ConfigFormUnit.h" //--------------------------------------------------------------------------- #pragma package(smart_init) @@ -1197,6 +1198,11 @@ void __fastcall TConfigForm::FormCreate(TObject *Sender) delete ini; + VsyncChk->Enabled = VsyncAllowed(); + if (!VsyncChk->Enabled) { + VsyncChk->State = tssOff; + } + Initialized = true; } @@ -1618,8 +1624,31 @@ bool TConfigForm::GetBool(TIniFile *ini, System::UnicodeString key, bool defValu return s == "true" || s == "yes" || s == "1"; } +bool TConfigForm::VsyncAllowed() +{ + if (GetProcAddress(GetModuleHandleW(L"ntdll.dll"), "wine_get_version")) { + return true; + } + + if (!IsWindows8OrGreater()) { + return true; + } + + if (NonexclusiveChk->State == tssOff && + (PresentationCbx->ItemIndex == 0 || PresentationCbx->ItemIndex == 1)) { + return true; + } + + return false; +} + void __fastcall TConfigForm::PresentationCbxChange(TObject *Sender) { + VsyncChk->Enabled = VsyncAllowed(); + if (!VsyncChk->Enabled) { + VsyncChk->State = tssOff; + } + SaveSettings(); } @@ -1728,6 +1757,11 @@ void __fastcall TConfigForm::SinglecpuChkClick(TObject *Sender) void __fastcall TConfigForm::NonexclusiveChkClick(TObject *Sender) { + VsyncChk->Enabled = VsyncAllowed(); + if (!VsyncChk->Enabled) { + VsyncChk->State = tssOff; + } + SaveSettings(); } diff --git a/config/ConfigFormUnit.dfm b/config/ConfigFormUnit.dfm index 6ed9761..a34dc9f 100644 --- a/config/ConfigFormUnit.dfm +++ b/config/ConfigFormUnit.dfm @@ -2696,8 +2696,6 @@ object ConfigForm: TConfigForm ShowCaption = False TabOrder = 1 StyleElements = [seFont, seBorder] - ExplicitWidth = 495 - ExplicitHeight = 464 DesignSize = ( 499 465) @@ -2885,7 +2883,6 @@ object ConfigForm: TConfigForm TabOrder = 5 StyleElements = [seFont, seBorder] OnClick = ThemePnlClick - ExplicitLeft = 471 end end object CompatibilityPnl: TPanel @@ -2901,8 +2898,6 @@ object ConfigForm: TConfigForm TabOrder = 3 Visible = False StyleElements = [seFont, seBorder] - ExplicitWidth = 495 - ExplicitHeight = 464 object MaxgameticksLbl: TLabel Left = 40 Top = 28 @@ -3083,8 +3078,6 @@ object ConfigForm: TConfigForm TabOrder = 2 Visible = False StyleElements = [seFont, seBorder] - ExplicitWidth = 495 - ExplicitHeight = 464 object RendererLbl: TLabel Left = 40 Top = 28 @@ -3309,8 +3302,6 @@ object ConfigForm: TConfigForm TabOrder = 4 Visible = False StyleElements = [seFont, seBorder] - ExplicitWidth = 495 - ExplicitHeight = 464 object ToggleWindowedLbl: TLabel Left = 40 Top = 27 @@ -3538,7 +3529,6 @@ object ConfigForm: TConfigForm Color = clMenu ParentBackground = False TabOrder = 0 - ExplicitHeight = 467 DesignSize = ( 233 468) diff --git a/config/ConfigFormUnit.h b/config/ConfigFormUnit.h index 8a8a14c..7eda35e 100644 --- a/config/ConfigFormUnit.h +++ b/config/ConfigFormUnit.h @@ -118,6 +118,7 @@ private: // Benutzer-Deklarationen virtual void __fastcall CreateParams(TCreateParams & Params); void SaveSettings(); bool GetBool(TIniFile *ini, System::UnicodeString key, bool defValue); + bool VsyncAllowed(); void ApplyTranslation(TIniFile *ini); System::UnicodeString GetKeyText(WORD key); WORD GetKeyCode(System::UnicodeString text);