Add full-screen option

This commit is contained in:
elasota
2020-07-20 23:38:31 -04:00
parent 7bf6147fa1
commit 53ecdabb43
6 changed files with 46 additions and 6 deletions

View File

@@ -74,7 +74,7 @@
"enabled" : true "enabled" : true
}, },
{ {
"name" : "Adjust resolution to fit window", "name" : "Scale to fit window",
"itemType" : "CheckBox", "itemType" : "CheckBox",
"pos" : [ 8, 105 ], "pos" : [ 8, 105 ],
"size" : [ 256, 18 ], "size" : [ 256, 18 ],
@@ -97,6 +97,14 @@
"id" : 0, "id" : 0,
"enabled" : true "enabled" : true
}, },
{
"name" : "Full screen mode",
"itemType" : "CheckBox",
"pos" : [ 8, 172 ],
"size" : [ 256, 18 ],
"id" : 0,
"enabled" : true
},
{ {
"name" : "", "name" : "",
"itemType" : "UserItem", "itemType" : "UserItem",

View File

@@ -10,6 +10,8 @@
#include "PLKeyEncoding.h" #include "PLKeyEncoding.h"
#include "Externs.h" #include "Externs.h"
#include "Environ.h" #include "Environ.h"
#include "HostDisplayDriver.h"
#include "IGpDisplayDriver.h"
#include "IOStream.h" #include "IOStream.h"
#include "House.h" #include "House.h"
#include "WindowManager.h" #include "WindowManager.h"
@@ -215,6 +217,10 @@ void ReadInPrefs (void)
doPrettyMap = false; doPrettyMap = false;
doBitchDialogs = true; doBitchDialogs = true;
IGpDisplayDriver *displayDriver = PortabilityLayer::HostDisplayDriver::GetInstance();
if (!displayDriver->IsFullScreen())
displayDriver->RequestToggleFullScreen(0);
modulePrefs.Dispose(); modulePrefs.Dispose();
} }

View File

@@ -41,9 +41,10 @@
#define kScaleResolutionItem 10 #define kScaleResolutionItem 10
#define kUseICCProfileItem 11 #define kUseICCProfileItem 11
#define kDoColorFadeItem 12 #define kDoColorFadeItem 12
#define kBorder2Item 13 #define kFullScreenItem 13
#define kBorder3Item 14 #define kBorder2Item 14
#define kDispDefault 15 #define kBorder3Item 15
#define kDispDefault 16
// Sound dialog // Sound dialog
#define kSofterItem 4 #define kSofterItem 4
@@ -106,7 +107,7 @@ Str15 tempLeftStr, tempRightStr, tempBattStr, tempBandStr;
long tempLeftMap, tempRightMap, tempBattMap, tempBandMap; long tempLeftMap, tempRightMap, tempBattMap, tempBandMap;
short whichCtrl, wasDepthPref; short whichCtrl, wasDepthPref;
Boolean wasFade, wasIdle, wasPlay, wasTransit, wasZooms, wasBackground; 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; Boolean wasPrettyMap, wasBitchDialogs;
extern short numNeighbors, isDepthPref, maxFiles, willMaxFiles; extern short numNeighbors, isDepthPref, maxFiles, willMaxFiles;
@@ -918,6 +919,9 @@ void DisplayUpdate (Dialog *theDialog)
SetDialogItemValue(theDialog, kScaleResolutionItem, (short)isAutoScale); SetDialogItemValue(theDialog, kScaleResolutionItem, (short)isAutoScale);
SetDialogItemValue(theDialog, kUseICCProfileItem, (short)isUseICCProfile); SetDialogItemValue(theDialog, kUseICCProfileItem, (short)isUseICCProfile);
wasFullscreenPref = PortabilityLayer::HostDisplayDriver::GetInstance()->IsFullScreen();
SetDialogItemValue(theDialog, kFullScreenItem, wasFullscreenPref);
FrameDisplayIcon(theDialog, StdColors::Red()); FrameDisplayIcon(theDialog, StdColors::Red());
FrameDialogItemC(theDialog, kBorder1Item, kRedOrangeColor8); FrameDialogItemC(theDialog, kBorder1Item, kRedOrangeColor8);
FrameDialogItemC(theDialog, kBorder2Item, kRedOrangeColor8); FrameDialogItemC(theDialog, kBorder2Item, kRedOrangeColor8);
@@ -1090,6 +1094,11 @@ void DoDisplayPrefs (void)
SetDialogItemValue(prefDlg, kUseICCProfileItem, (short)wasUseICCProfile); SetDialogItemValue(prefDlg, kUseICCProfileItem, (short)wasUseICCProfile);
break; break;
case kFullScreenItem:
wasFullscreenPref = !wasFullscreenPref;
SetDialogItemValue(prefDlg, kFullScreenItem, (short)wasFullscreenPref);
break;
case kDispDefault: case kDispDefault:
FrameDisplayIcon(prefDlg, StdColors::White()); FrameDisplayIcon(prefDlg, StdColors::White());
DisplayDefaults(); DisplayDefaults();
@@ -1334,6 +1343,14 @@ void DoSettingsMain (void)
nextRestartChange = false; nextRestartChange = false;
} }
IGpDisplayDriver *displayDriver = PortabilityLayer::HostDisplayDriver::GetInstance();
if (displayDriver->IsFullScreen() != (wasFullscreenPref != 0))
{
displayDriver->RequestToggleFullScreen(0);
needResolutionReset = false;
}
if (needResolutionReset) if (needResolutionReset)
{ {
PortabilityLayer::HostDisplayDriver::GetInstance()->RequestResetVirtualResolution(); PortabilityLayer::HostDisplayDriver::GetInstance()->RequestResetVirtualResolution();

View File

@@ -47,6 +47,8 @@ public:
virtual void RequestToggleFullScreen(uint32_t timestamp) = 0; virtual void RequestToggleFullScreen(uint32_t timestamp) = 0;
virtual void RequestResetVirtualResolution() = 0; virtual void RequestResetVirtualResolution() = 0;
virtual bool IsFullScreen() const = 0;
virtual const GpDisplayDriverProperties &GetProperties() const = 0; virtual const GpDisplayDriverProperties &GetProperties() const = 0;
virtual IGpPrefsHandler *GetPrefsHandler() const = 0; virtual IGpPrefsHandler *GetPrefsHandler() const = 0;
}; };

View File

@@ -1458,7 +1458,7 @@ void GpDisplayDriverD3D11::SetUseICCProfile(bool useICCProfile)
void GpDisplayDriverD3D11::RequestToggleFullScreen(uint32_t timestamp) 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 // 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_isFullScreenDesired = !m_isFullScreenDesired;
m_lastFullScreenToggleTimeStamp = timestamp; m_lastFullScreenToggleTimeStamp = timestamp;
@@ -1470,6 +1470,11 @@ void GpDisplayDriverD3D11::RequestResetVirtualResolution()
m_isResolutionResetDesired = true; m_isResolutionResetDesired = true;
} }
bool GpDisplayDriverD3D11::IsFullScreen() const
{
return m_isFullScreenDesired;
}
const GpDisplayDriverProperties &GpDisplayDriverD3D11::GetProperties() const const GpDisplayDriverProperties &GpDisplayDriverD3D11::GetProperties() const
{ {
return m_properties; return m_properties;

View File

@@ -58,6 +58,8 @@ public:
void RequestToggleFullScreen(uint32_t timestamp) override; void RequestToggleFullScreen(uint32_t timestamp) override;
void RequestResetVirtualResolution() override; void RequestResetVirtualResolution() override;
bool IsFullScreen() const override;
const GpDisplayDriverProperties &GetProperties() const override; const GpDisplayDriverProperties &GetProperties() const override;
IGpPrefsHandler *GetPrefsHandler() const override; IGpPrefsHandler *GetPrefsHandler() const override;