diff --git a/Source/Editor/GUI/Docking/WindowDragHelper.cs b/Source/Editor/GUI/Docking/WindowDragHelper.cs
index 6650560b5..0ba7d85b7 100644
--- a/Source/Editor/GUI/Docking/WindowDragHelper.cs
+++ b/Source/Editor/GUI/Docking/WindowDragHelper.cs
@@ -26,7 +26,7 @@ namespace FlaxEditor.GUI.Docking
///
/// The hint control size.
///
- public const float HintControlSize = 32.0f;
+ public const float HintControlSize = 48.0f;
///
/// The opacity of the dragged window when hint controls are shown.
@@ -341,7 +341,10 @@ namespace FlaxEditor.GUI.Docking
bool showBorderHints = showProxyHints;
bool showCenterHint = showProxyHints;
Control hoveredHintControl = null;
+ Float2 hoveredLocationOffset = Float2.Zero;
Float2 hoveredSizeOverride = Float2.Zero;
+ DockState prevToSet = _toSet;
+ float hoveredMargin = 1.0f;
if (showProxyHints)
{
// If moved window has not only tabs but also child panels disable docking as tab
@@ -358,7 +361,7 @@ namespace FlaxEditor.GUI.Docking
// Cache dock rectangles
var size = _rectDock.Size / Platform.DpiScale;
var offset = _toDock.PointFromScreen(_rectDock.Location);
- var borderMargin = 4.0f;
+ var borderMargin = 10.0f;
var hintWindowsSize = HintControlSize;
var hintWindowsSize2 = hintWindowsSize * 0.5f;
var hintPreviewSize = new Float2(Math.Max(HintControlSize * 2, size.X * 0.5f), Math.Max(HintControlSize * 2, size.Y * 0.5f));
@@ -371,35 +374,40 @@ namespace FlaxEditor.GUI.Docking
_rCenter = new Rectangle(centerX - hintWindowsSize2, centerY - hintWindowsSize2, hintWindowsSize, hintWindowsSize) + offset;
// Hit test, and calculate the approximation for filled area when hovered over the hint
- DockState toSet = DockState.Float;
+ var toSet = DockState.Float;
+ var hintTestPoint = _toDock.PointFromScreen(_mouse);
if (showBorderHints)
{
- if (_rUpper.Contains(_toDock.PointFromScreen(_mouse)))
+ if (_rUpper.Contains(ref hintTestPoint))
{
toSet = DockState.DockTop;
hoveredHintControl = _dockHintUp;
- hoveredSizeOverride = new Float2(size.X, hintPreviewSize.Y);
+ hoveredSizeOverride = new Float2(size.X, size.Y * DockPanel.DefaultSplitterValue);
+ hoveredLocationOffset.Y -= borderMargin - hoveredMargin;
}
- else if (_rBottom.Contains(_toDock.PointFromScreen(_mouse)))
+ else if (_rBottom.Contains(ref hintTestPoint))
{
toSet = DockState.DockBottom;
hoveredHintControl = _dockHintDown;
- hoveredSizeOverride = new Float2(size.X, hintPreviewSize.Y);
+ hoveredSizeOverride = new Float2(size.X, size.Y * DockPanel.DefaultSplitterValue);
+ hoveredLocationOffset.Y += borderMargin - hoveredMargin;
}
- else if (_rLeft.Contains(_toDock.PointFromScreen(_mouse)))
+ else if (_rLeft.Contains(ref hintTestPoint))
{
toSet = DockState.DockLeft;
hoveredHintControl = _dockHintLeft;
- hoveredSizeOverride = new Float2(hintPreviewSize.X, size.Y);
+ hoveredSizeOverride = new Float2(size.X * DockPanel.DefaultSplitterValue, size.Y);
+ hoveredLocationOffset.X -= borderMargin - hoveredMargin;
}
- else if (_rRight.Contains(_toDock.PointFromScreen(_mouse)))
+ else if (_rRight.Contains(ref hintTestPoint))
{
toSet = DockState.DockRight;
hoveredHintControl = _dockHintRight;
- hoveredSizeOverride = new Float2(hintPreviewSize.X, size.Y);
+ hoveredSizeOverride = new Float2(size.X * DockPanel.DefaultSplitterValue, size.Y);
+ hoveredLocationOffset.X += borderMargin - hoveredMargin;
}
}
- if (showCenterHint && _rCenter.Contains(_toDock.PointFromScreen(_mouse)))
+ if (showCenterHint && _rCenter.Contains(ref hintTestPoint))
{
toSet = DockState.DockFill;
hoveredHintControl = _dockHintCenter;
@@ -416,38 +424,41 @@ namespace FlaxEditor.GUI.Docking
// Update sizes and opacity of hint controls
if (_toDock != null)
{
+ var mainColor = Style.Current.Selection;
if (hoveredHintControl != _dockHintDown)
{
_dockHintDown.Size = new Float2(HintControlSize);
- _dockHintDown.BackgroundColor = Style.Current.Selection.AlphaMultiplied(0.6f);
+ _dockHintDown.BackgroundColor = mainColor.AlphaMultiplied(0.6f);
}
if (hoveredHintControl != _dockHintLeft)
{
_dockHintLeft.Size = new Float2(HintControlSize);
- _dockHintLeft.BackgroundColor = Style.Current.Selection.AlphaMultiplied(0.6f);
+ _dockHintLeft.BackgroundColor = mainColor.AlphaMultiplied(0.6f);
}
if (hoveredHintControl != _dockHintRight)
{
_dockHintRight.Size = new Float2(HintControlSize);
- _dockHintRight.BackgroundColor = Style.Current.Selection.AlphaMultiplied(0.6f);
+ _dockHintRight.BackgroundColor = mainColor.AlphaMultiplied(0.6f);
}
if (hoveredHintControl != _dockHintUp)
{
_dockHintUp.Size = new Float2(HintControlSize);
- _dockHintUp.BackgroundColor = Style.Current.Selection.AlphaMultiplied(0.6f);
+ _dockHintUp.BackgroundColor = mainColor.AlphaMultiplied(0.6f);
}
if (hoveredHintControl != _dockHintCenter)
{
_dockHintCenter.Size = new Float2(HintControlSize);
- _dockHintCenter.BackgroundColor = Style.Current.Selection.AlphaMultiplied(0.6f);
+ _dockHintCenter.BackgroundColor = mainColor.AlphaMultiplied(0.6f);
}
if (_toSet != DockState.Float)
{
if (hoveredHintControl != null)
{
- hoveredHintControl.BackgroundColor = Style.Current.Selection.AlphaMultiplied(1.0f);
- hoveredHintControl.Size = hoveredSizeOverride;
+ hoveredHintControl.BackgroundColor = mainColor;
+ if (_toSet != prevToSet)
+ hoveredHintControl.Location += hoveredLocationOffset;
+ hoveredHintControl.Size = hoveredSizeOverride - hoveredMargin;
}
}
}