diff --git a/ApplicationResourcePatches/DITL/1017.json b/ApplicationResourcePatches/DITL/1017.json index 7e013ba..7bd26c9 100644 --- a/ApplicationResourcePatches/DITL/1017.json +++ b/ApplicationResourcePatches/DITL/1017.json @@ -74,7 +74,7 @@ "enabled" : true }, { - "name" : "Adjust resolution to fit window", + "name" : "Scale to fit window", "itemType" : "CheckBox", "pos" : [ 8, 105 ], "size" : [ 256, 18 ], @@ -97,6 +97,14 @@ "id" : 0, "enabled" : true }, + { + "name" : "Full screen mode", + "itemType" : "CheckBox", + "pos" : [ 8, 172 ], + "size" : [ 256, 18 ], + "id" : 0, + "enabled" : true + }, { "name" : "", "itemType" : "UserItem", diff --git a/GpApp/Main.cpp b/GpApp/Main.cpp index 1710b8c..26a3555 100644 --- a/GpApp/Main.cpp +++ b/GpApp/Main.cpp @@ -10,6 +10,8 @@ #include "PLKeyEncoding.h" #include "Externs.h" #include "Environ.h" +#include "HostDisplayDriver.h" +#include "IGpDisplayDriver.h" #include "IOStream.h" #include "House.h" #include "WindowManager.h" @@ -215,6 +217,10 @@ void ReadInPrefs (void) doPrettyMap = false; doBitchDialogs = true; + IGpDisplayDriver *displayDriver = PortabilityLayer::HostDisplayDriver::GetInstance(); + if (!displayDriver->IsFullScreen()) + displayDriver->RequestToggleFullScreen(0); + modulePrefs.Dispose(); } diff --git a/GpApp/Settings.cpp b/GpApp/Settings.cpp index 34eb73b..b20e317 100644 --- a/GpApp/Settings.cpp +++ b/GpApp/Settings.cpp @@ -41,9 +41,10 @@ #define kScaleResolutionItem 10 #define kUseICCProfileItem 11 #define kDoColorFadeItem 12 -#define kBorder2Item 13 -#define kBorder3Item 14 -#define kDispDefault 15 +#define kFullScreenItem 13 +#define kBorder2Item 14 +#define kBorder3Item 15 +#define kDispDefault 16 // Sound dialog #define kSofterItem 4 @@ -106,7 +107,7 @@ Str15 tempLeftStr, tempRightStr, tempBattStr, tempBandStr; long tempLeftMap, tempRightMap, tempBattMap, tempBandMap; short whichCtrl, wasDepthPref; Boolean wasFade, wasIdle, wasPlay, wasTransit, wasZooms, wasBackground; -Boolean wasEscPauseKey, wasDemos, wasAutoScale, wasUseICCProfile, nextRestartChange, wasErrorCheck, needResolutionReset; +Boolean wasEscPauseKey, wasDemos, wasAutoScale, wasUseICCProfile, nextRestartChange, wasErrorCheck, wasFullscreenPref, needResolutionReset; Boolean wasPrettyMap, wasBitchDialogs; extern short numNeighbors, isDepthPref, maxFiles, willMaxFiles; @@ -917,6 +918,9 @@ void DisplayUpdate (Dialog *theDialog) SetDialogItemValue(theDialog, k32BitColorItem, wasDepthPref == 32); SetDialogItemValue(theDialog, kScaleResolutionItem, (short)isAutoScale); SetDialogItemValue(theDialog, kUseICCProfileItem, (short)isUseICCProfile); + + wasFullscreenPref = PortabilityLayer::HostDisplayDriver::GetInstance()->IsFullScreen(); + SetDialogItemValue(theDialog, kFullScreenItem, wasFullscreenPref); FrameDisplayIcon(theDialog, StdColors::Red()); FrameDialogItemC(theDialog, kBorder1Item, kRedOrangeColor8); @@ -1089,6 +1093,11 @@ void DoDisplayPrefs (void) wasUseICCProfile = !wasUseICCProfile; SetDialogItemValue(prefDlg, kUseICCProfileItem, (short)wasUseICCProfile); break; + + case kFullScreenItem: + wasFullscreenPref = !wasFullscreenPref; + SetDialogItemValue(prefDlg, kFullScreenItem, (short)wasFullscreenPref); + break; case kDispDefault: FrameDisplayIcon(prefDlg, StdColors::White()); @@ -1334,6 +1343,14 @@ void DoSettingsMain (void) nextRestartChange = false; } + IGpDisplayDriver *displayDriver = PortabilityLayer::HostDisplayDriver::GetInstance(); + + if (displayDriver->IsFullScreen() != (wasFullscreenPref != 0)) + { + displayDriver->RequestToggleFullScreen(0); + needResolutionReset = false; + } + if (needResolutionReset) { PortabilityLayer::HostDisplayDriver::GetInstance()->RequestResetVirtualResolution(); diff --git a/GpCommon/IGpDisplayDriver.h b/GpCommon/IGpDisplayDriver.h index 98c7b36..452addd 100644 --- a/GpCommon/IGpDisplayDriver.h +++ b/GpCommon/IGpDisplayDriver.h @@ -47,6 +47,8 @@ public: virtual void RequestToggleFullScreen(uint32_t timestamp) = 0; virtual void RequestResetVirtualResolution() = 0; + virtual bool IsFullScreen() const = 0; + virtual const GpDisplayDriverProperties &GetProperties() const = 0; virtual IGpPrefsHandler *GetPrefsHandler() const = 0; }; diff --git a/GpDisplayDriver_D3D11/GpDisplayDriverD3D11.cpp b/GpDisplayDriver_D3D11/GpDisplayDriverD3D11.cpp index 2f7b666..684fb0f 100644 --- a/GpDisplayDriver_D3D11/GpDisplayDriverD3D11.cpp +++ b/GpDisplayDriver_D3D11/GpDisplayDriverD3D11.cpp @@ -1458,7 +1458,7 @@ void GpDisplayDriverD3D11::SetUseICCProfile(bool useICCProfile) void GpDisplayDriverD3D11::RequestToggleFullScreen(uint32_t timestamp) { // Alt-Enter gets re-sent after a full-screen toggle, so we ignore toggle requests until half a second has elapsed - if (timestamp > m_lastFullScreenToggleTimeStamp + 30) + if (timestamp == 0 || timestamp > m_lastFullScreenToggleTimeStamp + 30) { m_isFullScreenDesired = !m_isFullScreenDesired; m_lastFullScreenToggleTimeStamp = timestamp; @@ -1470,6 +1470,11 @@ void GpDisplayDriverD3D11::RequestResetVirtualResolution() m_isResolutionResetDesired = true; } +bool GpDisplayDriverD3D11::IsFullScreen() const +{ + return m_isFullScreenDesired; +} + const GpDisplayDriverProperties &GpDisplayDriverD3D11::GetProperties() const { return m_properties; diff --git a/GpDisplayDriver_D3D11/GpDisplayDriverD3D11.h b/GpDisplayDriver_D3D11/GpDisplayDriverD3D11.h index 54b6740..086fdab 100644 --- a/GpDisplayDriver_D3D11/GpDisplayDriverD3D11.h +++ b/GpDisplayDriver_D3D11/GpDisplayDriverD3D11.h @@ -58,6 +58,8 @@ public: void RequestToggleFullScreen(uint32_t timestamp) override; void RequestResetVirtualResolution() override; + bool IsFullScreen() const override; + const GpDisplayDriverProperties &GetProperties() const override; IGpPrefsHandler *GetPrefsHandler() const override;