Add options for game window on macOS

This commit is contained in:
Wojtek Figat
2022-01-17 21:14:41 +01:00
parent 788afe611d
commit 35d9016053
4 changed files with 87 additions and 1 deletions

View File

@@ -133,7 +133,7 @@ int32 Engine::Main(const Char* cmdLine)
Platform::BeforeRun();
EngineImpl::InitMainWindow();
Application::BeforeRun();
#if !USE_EDITOR && (PLATFORM_WINDOWS || PLATFORM_LINUX)
#if !USE_EDITOR && (PLATFORM_WINDOWS || PLATFORM_LINUX || PLATFORM_MAC)
EngineImpl::RunInBackground = PlatformSettings::Get()->RunInBackground;
#endif
Log::Logger::WriteFloor();

View File

@@ -0,0 +1,47 @@
// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
#if PLATFORM_MAC && !USE_EDITOR
#include "MacGame.h"
#include "Engine/Platform/Window.h"
#include "Engine/Core/Config/PlatformSettings.h"
#include "Engine/Engine/CommandLine.h"
void MacGame::InitMainWindowSettings(CreateWindowSettings& settings)
{
// TODO: restore window size and fullscreen mode from the cached local settings saved after previous session
const auto platformSettings = MacPlatformSettings::Get();
auto windowMode = platformSettings->WindowMode;
// Use command line switches
if (CommandLine::Options.Fullscreen.IsTrue())
windowMode = GameWindowMode::Fullscreen;
else if (CommandLine::Options.Windowed.IsTrue())
windowMode = GameWindowMode::Windowed;
settings.AllowDragAndDrop = false;
settings.Fullscreen = windowMode == GameWindowMode::Fullscreen;
settings.HasSizingFrame = platformSettings->ResizableWindow;
// Fullscreen - put window to cover the whole desktop area
if (windowMode == GameWindowMode::FullscreenBorderless || windowMode == GameWindowMode::Fullscreen)
{
settings.Size = Platform::GetDesktopSize();
settings.Position = Vector2::Zero;
}
// Not fullscreen - put window in the middle of the screen
else if (windowMode == GameWindowMode::Windowed || windowMode == GameWindowMode::Borderless)
{
settings.Size = Vector2((float)platformSettings->ScreenWidth, (float)platformSettings->ScreenHeight);
settings.Position = (Platform::GetDesktopSize() - settings.Size) / 2;
}
// Windowed mode
settings.HasBorder = windowMode == GameWindowMode::Windowed || windowMode == GameWindowMode::Fullscreen;
settings.AllowMaximize = true;
settings.AllowMinimize = platformSettings->ResizableWindow;
}
#endif

View File

@@ -12,6 +12,10 @@
/// <seealso cref="Game" />
class MacGame : public GameBase
{
public:
// [GameBase]
static void InitMainWindowSettings(CreateWindowSettings& settings);
};
typedef MacGame Game;

View File

@@ -23,12 +23,42 @@ API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings") class FLAXENGINE_API
API_FIELD(Attributes="EditorOrder(0), EditorDisplay(\"General\")")
String AppIdentifier = TEXT("com.${COMPANY_NAME}.${PROJECT_NAME}");
/// <summary>
/// The default game window mode.
/// </summary>
API_FIELD(Attributes="EditorOrder(110), EditorDisplay(\"Window\")")
GameWindowMode WindowMode = GameWindowMode::Windowed;
/// <summary>
/// The default game window width (in pixels).
/// </summary>
API_FIELD(Attributes="EditorOrder(120), EditorDisplay(\"Window\")")
int32 ScreenWidth = 1280;
/// <summary>
/// The default game window height (in pixels).
/// </summary>
API_FIELD(Attributes="EditorOrder(130), EditorDisplay(\"Window\")")
int32 ScreenHeight = 720;
/// <summary>
/// Enables resizing the game window by the user.
/// </summary>
API_FIELD(Attributes="EditorOrder(140), EditorDisplay(\"Window\")")
bool ResizableWindow = false;
/// <summary>
/// Custom icon texture to use for the application (overrides the default one).
/// </summary>
API_FIELD(Attributes="EditorOrder(1000), EditorDisplay(\"Other\")")
SoftObjectReference<Texture> OverrideIcon;
/// <summary>
/// Enables game running when application window loses focus.
/// </summary>
API_FIELD(Attributes="EditorOrder(1010), EditorDisplay(\"Other\", \"Run In Background\")")
bool RunInBackground = false;
public:
/// <summary>
/// Gets the instance of the settings asset (default value if missing). Object returned by this method is always loaded with valid data to use.
@@ -39,7 +69,12 @@ public:
void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override
{
DESERIALIZE(AppIdentifier);
DESERIALIZE(WindowMode);
DESERIALIZE(ScreenWidth);
DESERIALIZE(ScreenHeight);
DESERIALIZE(ResizableWindow);
DESERIALIZE(OverrideIcon);
DESERIALIZE(RunInBackground);
}
};