mirror of
https://github.com/colhountech/DarkUI.Net5.git
synced 2025-07-02 23:29:28 +03:00
139 lines
4.2 KiB
C#
139 lines
4.2 KiB
C#
using System.Drawing;
|
|
|
|
namespace DarkUI.Docking
|
|
{
|
|
internal class DockDropArea
|
|
{
|
|
#region Property Region
|
|
|
|
internal DarkDockPanel DockPanel { get; private set; }
|
|
|
|
internal Rectangle DropArea { get; private set; }
|
|
|
|
internal Rectangle HighlightArea { get; private set; }
|
|
|
|
internal DarkDockRegion DockRegion { get; private set; }
|
|
|
|
internal DarkDockGroup DockGroup { get; private set; }
|
|
|
|
internal DockInsertType InsertType { get; private set; }
|
|
|
|
#endregion
|
|
|
|
#region Constructor Region
|
|
|
|
internal DockDropArea(DarkDockRegion region, DockInsertType insertType)
|
|
{
|
|
DockRegion = region;
|
|
InsertType = insertType;
|
|
}
|
|
|
|
internal DockDropArea(DarkDockGroup group, DockInsertType insertType)
|
|
{
|
|
DockGroup = group;
|
|
InsertType = insertType;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Method Region
|
|
|
|
internal void BuildAreas()
|
|
{
|
|
if (DockRegion != null)
|
|
BuildRegionAreas();
|
|
else if (DockGroup != null)
|
|
BuildGroupAreas();
|
|
}
|
|
|
|
private void BuildRegionAreas()
|
|
{
|
|
|
|
}
|
|
|
|
private void BuildGroupAreas()
|
|
{
|
|
switch (InsertType)
|
|
{
|
|
case DockInsertType.None:
|
|
var dropRect = new Rectangle
|
|
{
|
|
X = DockGroup.PointToScreen(Point.Empty).X,
|
|
Y = DockGroup.PointToScreen(Point.Empty).Y,
|
|
Width = DockGroup.Width,
|
|
Height = DockGroup.Height
|
|
};
|
|
|
|
DropArea = dropRect;
|
|
HighlightArea = dropRect;
|
|
|
|
break;
|
|
|
|
case DockInsertType.Before:
|
|
var beforeDropWidth = DockGroup.Width;
|
|
var beforeDropHeight = DockGroup.Height;
|
|
|
|
switch (DockGroup.DockArea)
|
|
{
|
|
case DarkDockArea.Left:
|
|
case DarkDockArea.Right:
|
|
beforeDropHeight = DockGroup.Height / 4;
|
|
break;
|
|
|
|
case DarkDockArea.Bottom:
|
|
beforeDropWidth = DockGroup.Width / 4;
|
|
break;
|
|
}
|
|
|
|
var beforeDropRect = new Rectangle
|
|
{
|
|
X = DockGroup.PointToScreen(Point.Empty).X,
|
|
Y = DockGroup.PointToScreen(Point.Empty).Y,
|
|
Width = beforeDropWidth,
|
|
Height = beforeDropHeight
|
|
};
|
|
|
|
DropArea = beforeDropRect;
|
|
HighlightArea = beforeDropRect;
|
|
|
|
break;
|
|
|
|
case DockInsertType.After:
|
|
var afterDropX = DockGroup.PointToScreen(Point.Empty).X;
|
|
var afterDropY = DockGroup.PointToScreen(Point.Empty).Y;
|
|
var afterDropWidth = DockGroup.Width;
|
|
var afterDropHeight = DockGroup.Height;
|
|
|
|
switch (DockGroup.DockArea)
|
|
{
|
|
case DarkDockArea.Left:
|
|
case DarkDockArea.Right:
|
|
afterDropHeight = DockGroup.Height / 4;
|
|
afterDropY = DockGroup.PointToScreen(Point.Empty).Y + DockGroup.Height - afterDropHeight;
|
|
break;
|
|
|
|
case DarkDockArea.Bottom:
|
|
afterDropWidth = DockGroup.Width / 4;
|
|
afterDropX = DockGroup.PointToScreen(Point.Empty).X + DockGroup.Width - afterDropWidth;
|
|
break;
|
|
}
|
|
|
|
var afterDropRect = new Rectangle
|
|
{
|
|
X = afterDropX,
|
|
Y = afterDropY,
|
|
Width = afterDropWidth,
|
|
Height = afterDropHeight
|
|
};
|
|
|
|
DropArea = afterDropRect;
|
|
HighlightArea = afterDropRect;
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|