fix(dock): move dock math to core to fix test suite breakage
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
namespace Ghost.Editor.Core.Controls.Internal.Docking;
|
||||
|
||||
/// <summary>
|
||||
/// Defines the possible dock positions for a drop operation.
|
||||
/// </summary>
|
||||
public enum DockPosition
|
||||
{
|
||||
Center,
|
||||
Top,
|
||||
Bottom,
|
||||
Left,
|
||||
Right,
|
||||
None
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Helper class for docking-related calculations.
|
||||
/// </summary>
|
||||
public static class DockMath
|
||||
{
|
||||
/// <summary>
|
||||
/// Calculates the dock position based on the relative position within a target element.
|
||||
/// Precedence: Left/Right win over Top/Bottom at corners.
|
||||
/// </summary>
|
||||
public static DockPosition CalculateDockPosition(double width, double height, double x, double y, double threshold)
|
||||
{
|
||||
if (x < width * threshold) return DockPosition.Left;
|
||||
if (x > width * (1 - threshold)) return DockPosition.Right;
|
||||
if (y < height * threshold) return DockPosition.Top;
|
||||
if (y > height * (1 - threshold)) return DockPosition.Bottom;
|
||||
return DockPosition.Center;
|
||||
}
|
||||
}
|
||||
@@ -25,8 +25,6 @@ public sealed partial class DockLayout : Control
|
||||
private FrameworkElement? _dropTargetOverlay;
|
||||
private readonly HashSet<DockNode> _subscribedNodes = new();
|
||||
|
||||
public enum DockPosition { Center, Top, Bottom, Left, Right, None }
|
||||
|
||||
public DockLayout()
|
||||
{
|
||||
DefaultStyleKey = typeof(DockLayout);
|
||||
@@ -34,19 +32,6 @@ public sealed partial class DockLayout : Control
|
||||
Unloaded += OnUnloaded;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Calculates the dock position based on the relative position within a target element.
|
||||
/// Precedence: Left/Right win over Top/Bottom at corners.
|
||||
/// </summary>
|
||||
public static DockPosition CalculateDockPosition(double width, double height, double x, double y, double threshold)
|
||||
{
|
||||
if (x < width * threshold) return DockPosition.Left;
|
||||
if (x > width * (1 - threshold)) return DockPosition.Right;
|
||||
if (y < height * threshold) return DockPosition.Top;
|
||||
if (y > height * (1 - threshold)) return DockPosition.Bottom;
|
||||
return DockPosition.Center;
|
||||
}
|
||||
|
||||
private void OnLoaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (Root != null)
|
||||
@@ -327,7 +312,7 @@ public sealed partial class DockLayout : Control
|
||||
e.AcceptedOperation = global::Windows.ApplicationModel.DataTransfer.DataPackageOperation.Move;
|
||||
|
||||
var position = e.GetPosition(targetElement);
|
||||
var newPosition = CalculateDockPosition(targetElement.ActualWidth, targetElement.ActualHeight, position.X, position.Y, DROP_EDGE_THRESHOLD);
|
||||
var newPosition = DockMath.CalculateDockPosition(targetElement.ActualWidth, targetElement.ActualHeight, position.X, position.Y, DROP_EDGE_THRESHOLD);
|
||||
|
||||
if (newPosition != _currentDropPosition)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user