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.Size = size;
settings.Position = location; settings.Position = location;
settings.MinimumSize = new Float2(1); settings.MinimumSize = new Float2(1);
settings.MaximumSize = new Float2(4096); settings.MaximumSize = Float2.Zero; // Unlimited size
settings.Fullscreen = false; settings.Fullscreen = false;
settings.HasBorder = true; settings.HasBorder = true;
settings.SupportsTransparency = false; settings.SupportsTransparency = false;

View File

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

View File

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

View File

@@ -150,9 +150,9 @@ LinuxWindow::LinuxWindow(const CreateWindowSettings& settings)
{ {
// Set resizing range // Set resizing range
hints.min_width = (int)settings.MinimumSize.X; 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.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; hints.flags |= USSize;
} }
// honor the WM placement except for manual (overriding) placements // honor the WM placement except for manual (overriding) placements

View File

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

View File

@@ -1056,7 +1056,10 @@ LRESULT WindowsWindow::WndProc(UINT msg, WPARAM wParam, LPARAM lParam)
case WM_GETMINMAXINFO: case WM_GETMINMAXINFO:
{ {
const auto minMax = reinterpret_cast<MINMAXINFO*>(lParam); const auto minMax = reinterpret_cast<MINMAXINFO*>(lParam);
minMax->ptMinTrackSize.x = (int32)_settings.MinimumSize.X;
minMax->ptMinTrackSize.y = (int32)_settings.MinimumSize.Y;
if (_settings.MaximumSize.SumValues() > 0)
{
int32 borderWidth = 0, borderHeight = 0; int32 borderWidth = 0, borderHeight = 0;
if (_settings.HasBorder) if (_settings.HasBorder)
{ {
@@ -1067,11 +1070,9 @@ LRESULT WindowsWindow::WndProc(UINT msg, WPARAM wParam, LPARAM lParam)
borderWidth = borderRect.right - borderRect.left; borderWidth = borderRect.right - borderRect.left;
borderHeight = borderRect.bottom - borderRect.top; 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.x = (int32)_settings.MaximumSize.X + borderWidth;
minMax->ptMaxTrackSize.y = (int32)_settings.MaximumSize.Y + borderHeight; minMax->ptMaxTrackSize.y = (int32)_settings.MaximumSize.Y + borderHeight;
}
// Include Windows task bar size into maximized tool window // Include Windows task bar size into maximized tool window
WINDOWPLACEMENT e; WINDOWPLACEMENT e;