Add support for unlimited window size if MaximumSize is set to Zero
#1824
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user