Add support for unlimited window size if MaximumSize is set to Zero

#1824
This commit is contained in:
Wojtek Figat
2023-11-06 14:42:29 +01:00
parent 51c0a6e100
commit c025b4414c
6 changed files with 23 additions and 21 deletions

View File

@@ -72,7 +72,7 @@ namespace FlaxEditor.GUI.Docking
settings.Size = size;
settings.Position = location;
settings.MinimumSize = new Float2(1);
settings.MaximumSize = new Float2(4096);
settings.MaximumSize = Float2.Zero; // Unlimited size
settings.Fullscreen = false;
settings.HasBorder = true;
settings.SupportsTransparency = false;

View File

@@ -12,7 +12,7 @@ namespace FlaxEngine
Position = new Float2(100, 100),
Size = new Float2(640, 480),
MinimumSize = Float2.One,
MaximumSize = new Float2(4100, 4100),
MaximumSize = Float2.Zero, // Unlimited size
StartPosition = WindowStartPosition.CenterParent,
HasBorder = true,
ShowInTaskbar = true,

View File

@@ -59,9 +59,9 @@ DECLARE_SCRIPTING_TYPE_MINIMAL(CreateWindowSettings);
API_FIELD() Float2 MinimumSize = Float2(1, 1);
/// <summary>
/// The maximum size.
/// The maximum size. Set to 0 to use unlimited size.
/// </summary>
API_FIELD() Float2 MaximumSize = Float2(8192, 4096);
API_FIELD() Float2 MaximumSize = Float2(0, 0);
/// <summary>
/// The start position mode.

View File

@@ -150,9 +150,9 @@ LinuxWindow::LinuxWindow(const CreateWindowSettings& settings)
{
// Set resizing range
hints.min_width = (int)settings.MinimumSize.X;
hints.max_width = (int)settings.MaximumSize.X;
hints.max_width = settings.MaximumSize.X > 0 ? (int)settings.MaximumSize.X : MAX_uint16;
hints.min_height = (int)settings.MinimumSize.Y;
hints.max_height = (int)settings.MaximumSize.Y;
hints.max_height = settings.MaximumSize.Y > 0 ? (int)settings.MaximumSize.Y : MAX_uint16;
hints.flags |= USSize;
}
// honor the WM placement except for manual (overriding) placements

View File

@@ -751,7 +751,8 @@ MacWindow::MacWindow(const CreateWindowSettings& settings)
[window setWindow:this];
[window setReleasedWhenClosed:NO];
[window setMinSize:NSMakeSize(settings.MinimumSize.X, settings.MinimumSize.Y)];
[window setMaxSize:NSMakeSize(settings.MaximumSize.X, settings.MaximumSize.Y)];
if (settings.MaximumSize.SumValues() > 0)
[window setMaxSize:NSMakeSize(settings.MaximumSize.X, settings.MaximumSize.Y)];
[window setOpaque:!settings.SupportsTransparency];
[window setContentView:view];
if (settings.AllowInput)

View File

@@ -1056,22 +1056,23 @@ LRESULT WindowsWindow::WndProc(UINT msg, WPARAM wParam, LPARAM lParam)
case WM_GETMINMAXINFO:
{
const auto minMax = reinterpret_cast<MINMAXINFO*>(lParam);
int32 borderWidth = 0, borderHeight = 0;
if (_settings.HasBorder)
{
const DWORD windowStyle = GetWindowLongW(_handle, GWL_STYLE);
const DWORD windowExStyle = GetWindowLongW(_handle, GWL_EXSTYLE);
RECT borderRect = { 0, 0, 0, 0 };
AdjustWindowRectEx(&borderRect, windowStyle, false, windowExStyle);
borderWidth = borderRect.right - borderRect.left;
borderHeight = borderRect.bottom - borderRect.top;
}
minMax->ptMinTrackSize.x = (int32)_settings.MinimumSize.X;
minMax->ptMinTrackSize.y = (int32)_settings.MinimumSize.Y;
minMax->ptMaxTrackSize.x = (int32)_settings.MaximumSize.X + borderWidth;
minMax->ptMaxTrackSize.y = (int32)_settings.MaximumSize.Y + borderHeight;
if (_settings.MaximumSize.SumValues() > 0)
{
int32 borderWidth = 0, borderHeight = 0;
if (_settings.HasBorder)
{
const DWORD windowStyle = GetWindowLongW(_handle, GWL_STYLE);
const DWORD windowExStyle = GetWindowLongW(_handle, GWL_EXSTYLE);
RECT borderRect = { 0, 0, 0, 0 };
AdjustWindowRectEx(&borderRect, windowStyle, false, windowExStyle);
borderWidth = borderRect.right - borderRect.left;
borderHeight = borderRect.bottom - borderRect.top;
}
minMax->ptMaxTrackSize.x = (int32)_settings.MaximumSize.X + borderWidth;
minMax->ptMaxTrackSize.y = (int32)_settings.MaximumSize.Y + borderHeight;
}
// Include Windows task bar size into maximized tool window
WINDOWPLACEMENT e;