mirror of
https://github.com/colhountech/DarkUI.Net5.git
synced 2025-07-03 15:49:26 +03:00
125 lines
3.7 KiB
C#
125 lines
3.7 KiB
C#
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
|
|
namespace DarkUI
|
|
{
|
|
public class DarkDockSplitter
|
|
{
|
|
#region Field Region
|
|
|
|
private Control _control;
|
|
private DarkSplitterType _splitterType;
|
|
private DarkTranslucentForm _overlayForm;
|
|
|
|
#endregion
|
|
|
|
#region Property Region
|
|
|
|
public Rectangle Bounds { get; set; }
|
|
|
|
public Cursor ResizeCursor { get; private set; }
|
|
|
|
#endregion
|
|
|
|
#region Constructor Region
|
|
|
|
public DarkDockSplitter(Control control, DarkSplitterType splitterType)
|
|
{
|
|
_control = control;
|
|
_splitterType = splitterType;
|
|
_overlayForm = new DarkTranslucentForm(Color.Black);
|
|
|
|
switch (_splitterType)
|
|
{
|
|
case DarkSplitterType.Left:
|
|
case DarkSplitterType.Right:
|
|
ResizeCursor = Cursors.SizeWE;
|
|
break;
|
|
case DarkSplitterType.Top:
|
|
case DarkSplitterType.Bottom:
|
|
ResizeCursor = Cursors.SizeNS;
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Method Region
|
|
|
|
public void ShowOverlay()
|
|
{
|
|
_overlayForm.Show();
|
|
UpdateOverlay(new Point(0, 0));
|
|
}
|
|
|
|
public void HideOverlay()
|
|
{
|
|
_overlayForm.Hide();
|
|
}
|
|
|
|
public void UpdateOverlay(Point difference)
|
|
{
|
|
var bounds = _control.RectangleToScreen(Bounds);
|
|
|
|
switch (_splitterType)
|
|
{
|
|
case DarkSplitterType.Left:
|
|
bounds.Location = new Point(bounds.Location.X - difference.X, bounds.Location.Y);
|
|
break;
|
|
case DarkSplitterType.Right:
|
|
bounds.Location = new Point(bounds.Location.X - difference.X, bounds.Location.Y);
|
|
break;
|
|
case DarkSplitterType.Top:
|
|
bounds.Location = new Point(bounds.Location.X, bounds.Location.Y - difference.Y);
|
|
break;
|
|
case DarkSplitterType.Bottom:
|
|
bounds.Location = new Point(bounds.Location.X, bounds.Location.Y - difference.Y);
|
|
break;
|
|
}
|
|
|
|
_overlayForm.Location = bounds.Location;
|
|
_overlayForm.Size = bounds.Size;
|
|
}
|
|
|
|
public void Move(Point difference)
|
|
{
|
|
switch (_splitterType)
|
|
{
|
|
case DarkSplitterType.Left:
|
|
_control.Width += difference.X;
|
|
break;
|
|
case DarkSplitterType.Right:
|
|
_control.Width -= difference.X;
|
|
break;
|
|
case DarkSplitterType.Top:
|
|
_control.Height += difference.Y;
|
|
break;
|
|
case DarkSplitterType.Bottom:
|
|
_control.Height -= difference.Y;
|
|
break;
|
|
}
|
|
}
|
|
|
|
public void UpdateBounds()
|
|
{
|
|
switch (_splitterType)
|
|
{
|
|
case DarkSplitterType.Left:
|
|
Bounds = new Rectangle(_control.Left - 2, _control.Top, 5, _control.Height);
|
|
break;
|
|
case DarkSplitterType.Right:
|
|
Bounds = new Rectangle(_control.Right - 3, _control.Top, 5, _control.Height);
|
|
break;
|
|
case DarkSplitterType.Top:
|
|
Bounds = new Rectangle(_control.Left, _control.Top - 2, _control.Width, 5);
|
|
break;
|
|
case DarkSplitterType.Bottom:
|
|
Bounds = new Rectangle(_control.Left, _control.Bottom - 5, _control.Width, 5);
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|