DarkUI.Net5/DarkUI/Docking/DarkToolWindow.cs
2015-12-05 14:16:37 +00:00

116 lines
3.4 KiB
C#

using DarkUI.Config;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace DarkUI.Docking
{
[ToolboxItem(false)]
public class DarkToolWindow : DarkDockContent
{
#region Property Region
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new Padding Padding
{
get { return base.Padding; }
}
#endregion
#region Constructor Region
public DarkToolWindow()
{
SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.ResizeRedraw |
ControlStyles.UserPaint, true);
BackColor = Colors.GreyBackground;
base.Padding = new Padding(0, Consts.ToolWindowHeaderSize, 0, 0);
}
#endregion
#region Method Region
private bool IsActive()
{
if (DockPanel == null)
return false;
return DockPanel.ActiveContent == this;
}
#endregion
#region Paint Region
protected override void OnPaint(PaintEventArgs e)
{
var g = e.Graphics;
// Fill body
using (var b = new SolidBrush(Colors.GreyBackground))
{
g.FillRectangle(b, ClientRectangle);
}
var isActive = IsActive();
// Draw header
var bgColor = isActive ? Colors.BlueBackground : Colors.HeaderBackground;
var darkColor = isActive ? Colors.DarkBlueBorder : Colors.DarkBorder;
var lightColor = isActive ? Colors.LightBlueBorder : Colors.LightBorder;
using (var b = new SolidBrush(bgColor))
{
var bgRect = new Rectangle(0, 0, ClientRectangle.Width, Consts.ToolWindowHeaderSize);
g.FillRectangle(b, bgRect);
}
using (var p = new Pen(darkColor))
{
g.DrawLine(p, ClientRectangle.Left, 0, ClientRectangle.Right, 0);
g.DrawLine(p, ClientRectangle.Left, Consts.ToolWindowHeaderSize - 1, ClientRectangle.Right, Consts.ToolWindowHeaderSize - 1);
}
using (var p = new Pen(lightColor))
{
g.DrawLine(p, ClientRectangle.Left, 1, ClientRectangle.Right, 1);
}
var xOffset = 2;
if (Icon != null)
{
g.DrawImageUnscaled(Icon, ClientRectangle.Left + 5, ClientRectangle.Top + (Consts.ToolWindowHeaderSize / 2) - (Icon.Height / 2) + 1);
xOffset = Icon.Width + 8;
}
using (var b = new SolidBrush(Colors.LightText))
{
var textRect = new Rectangle(xOffset, 0, ClientRectangle.Width - 4 - xOffset, Consts.ToolWindowHeaderSize);
var format = new StringFormat
{
Alignment = StringAlignment.Near,
LineAlignment = StringAlignment.Center,
FormatFlags = StringFormatFlags.NoWrap,
Trimming = StringTrimming.EllipsisCharacter
};
g.DrawString(DockText, Font, b, textRect, format);
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
// Absorb event
}
#endregion
}
}