Add options for game window on macOS
This commit is contained in:
@@ -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();
|
||||
|
||||
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" />
|
||||
class MacGame : public GameBase
|
||||
{
|
||||
public:
|
||||
|
||||
// [GameBase]
|
||||
static void InitMainWindowSettings(CreateWindowSettings& settings);
|
||||
};
|
||||
|
||||
typedef MacGame Game;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user