DarkUI.Net5/DarkUI/Docking/Items/DarkDockSplitter.cs
2015-09-19 15:30:09 +01:00

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
}
}