Add options for game window on macOS
This commit is contained in:
@@ -133,7 +133,7 @@ int32 Engine::Main(const Char* cmdLine)
|
|||||||
Platform::BeforeRun();
|
Platform::BeforeRun();
|
||||||
EngineImpl::InitMainWindow();
|
EngineImpl::InitMainWindow();
|
||||||
Application::BeforeRun();
|
Application::BeforeRun();
|
||||||
#if !USE_EDITOR && (PLATFORM_WINDOWS || PLATFORM_LINUX)
|
#if !USE_EDITOR && (PLATFORM_WINDOWS || PLATFORM_LINUX || PLATFORM_MAC)
|
||||||
EngineImpl::RunInBackground = PlatformSettings::Get()->RunInBackground;
|
EngineImpl::RunInBackground = PlatformSettings::Get()->RunInBackground;
|
||||||
#endif
|
#endif
|
||||||
Log::Logger::WriteFloor();
|
Log::Logger::WriteFloor();
|
||||||
|
|||||||
47
Source/Engine/Engine/Mac/MacGame.cpp
Normal file
47
Source/Engine/Engine/Mac/MacGame.cpp
Normal 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
|
||||||
@@ -12,6 +12,10 @@
|
|||||||
/// <seealso cref="Game" />
|
/// <seealso cref="Game" />
|
||||||
class MacGame : public GameBase
|
class MacGame : public GameBase
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// [GameBase]
|
||||||
|
static void InitMainWindowSettings(CreateWindowSettings& settings);
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef MacGame Game;
|
typedef MacGame Game;
|
||||||
|
|||||||
@@ -23,12 +23,42 @@ API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings") class FLAXENGINE_API
|
|||||||
API_FIELD(Attributes="EditorOrder(0), EditorDisplay(\"General\")")
|
API_FIELD(Attributes="EditorOrder(0), EditorDisplay(\"General\")")
|
||||||
String AppIdentifier = TEXT("com.${COMPANY_NAME}.${PROJECT_NAME}");
|
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>
|
/// <summary>
|
||||||
/// Custom icon texture to use for the application (overrides the default one).
|
/// Custom icon texture to use for the application (overrides the default one).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
API_FIELD(Attributes="EditorOrder(1000), EditorDisplay(\"Other\")")
|
API_FIELD(Attributes="EditorOrder(1000), EditorDisplay(\"Other\")")
|
||||||
SoftObjectReference<Texture> OverrideIcon;
|
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:
|
public:
|
||||||
/// <summary>
|
/// <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.
|
/// 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
|
void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override
|
||||||
{
|
{
|
||||||
DESERIALIZE(AppIdentifier);
|
DESERIALIZE(AppIdentifier);
|
||||||
|
DESERIALIZE(WindowMode);
|
||||||
|
DESERIALIZE(ScreenWidth);
|
||||||
|
DESERIALIZE(ScreenHeight);
|
||||||
|
DESERIALIZE(ResizableWindow);
|
||||||
DESERIALIZE(OverrideIcon);
|
DESERIALIZE(OverrideIcon);
|
||||||
|
DESERIALIZE(RunInBackground);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user