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.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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user