diff --git a/DarkUI/Config/Colors.cs b/DarkUI/Config/Colors.cs
index 0f55f88..6ebda15 100644
--- a/DarkUI/Config/Colors.cs
+++ b/DarkUI/Config/Colors.cs
@@ -44,6 +44,11 @@ namespace DarkUI.Config
get { return Color.FromArgb(95, 101, 102); }
}
+ public static Color LightestBackground
+ {
+ get { return Color.FromArgb(178, 178, 178); }
+ }
+
public static Color LightBorder
{
get { return Color.FromArgb(81, 81, 81); }
diff --git a/DarkUI/Config/Consts.cs b/DarkUI/Config/Consts.cs
index b0c7324..f234d2e 100644
--- a/DarkUI/Config/Consts.cs
+++ b/DarkUI/Config/Consts.cs
@@ -8,6 +8,8 @@
public static int ArrowButtonSize = 15;
public static int MinimumThumbSize = 11;
+ public static int CheckBoxSize = 12;
+
public const int ToolWindowHeaderSize = 25;
public const int DocumentTabAreaSize = 24;
public const int ToolWindowTabAreaSize = 21;
diff --git a/DarkUI/Controls/DarkButton.cs b/DarkUI/Controls/DarkButton.cs
index e9e53c6..6f84d45 100644
--- a/DarkUI/Controls/DarkButton.cs
+++ b/DarkUI/Controls/DarkButton.cs
@@ -75,6 +75,13 @@ namespace DarkUI.Controls
#region Code Property Region
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new bool AutoEllipsis
+ {
+ get { return false; }
+ }
+
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public DarkControlState ButtonState
@@ -82,13 +89,6 @@ namespace DarkUI.Controls
get { return _buttonState; }
}
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public new ContentAlignment TextAlign
- {
- get { return base.TextAlign; }
- }
-
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new ContentAlignment ImageAlign
@@ -96,13 +96,6 @@ namespace DarkUI.Controls
get { return base.ImageAlign; }
}
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public new bool AutoEllipsis
- {
- get { return false; }
- }
-
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new bool FlatAppearance
@@ -117,6 +110,13 @@ namespace DarkUI.Controls
get { return base.FlatStyle; }
}
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new ContentAlignment TextAlign
+ {
+ get { return base.TextAlign; }
+ }
+
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new bool UseCompatibleTextRendering
diff --git a/DarkUI/Controls/DarkCheckBox.cs b/DarkUI/Controls/DarkCheckBox.cs
new file mode 100644
index 0000000..a133f81
--- /dev/null
+++ b/DarkUI/Controls/DarkCheckBox.cs
@@ -0,0 +1,346 @@
+using DarkUI.Config;
+using DarkUI.Icons;
+using System;
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace DarkUI.Controls
+{
+ public class DarkCheckBox : CheckBox
+ {
+ #region Field Region
+
+ private DarkControlState _controlState = DarkControlState.Normal;
+
+ private bool _spacePressed;
+
+ #endregion
+
+ #region Property Region
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new Appearance Appearance
+ {
+ get { return base.Appearance; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new bool AutoEllipsis
+ {
+ get { return base.AutoEllipsis; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new Image BackgroundImage
+ {
+ get { return base.BackgroundImage; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new ImageLayout BackgroundImageLayout
+ {
+ get { return base.BackgroundImageLayout; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new bool FlatAppearance
+ {
+ get { return false; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new FlatStyle FlatStyle
+ {
+ get { return base.FlatStyle; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new Image Image
+ {
+ get { return base.Image; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new ContentAlignment ImageAlign
+ {
+ get { return base.ImageAlign; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new int ImageIndex
+ {
+ get { return base.ImageIndex; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new string ImageKey
+ {
+ get { return base.ImageKey; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new ImageList ImageList
+ {
+ get { return base.ImageList; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new ContentAlignment TextAlign
+ {
+ get { return base.TextAlign; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new TextImageRelation TextImageRelation
+ {
+ get { return base.TextImageRelation; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new bool ThreeState
+ {
+ get { return base.ThreeState; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new bool UseCompatibleTextRendering
+ {
+ get { return false; }
+ }
+
+ [Browsable(false)]
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new bool UseVisualStyleBackColor
+ {
+ get { return false; }
+ }
+
+ #endregion
+
+ #region Constructor Region
+
+ public DarkCheckBox()
+ {
+ SetStyle(ControlStyles.SupportsTransparentBackColor |
+ ControlStyles.OptimizedDoubleBuffer |
+ ControlStyles.ResizeRedraw |
+ ControlStyles.UserPaint, true);
+ }
+
+ #endregion
+
+ #region Method Region
+
+ private void SetControlState(DarkControlState controlState)
+ {
+ if (_controlState != controlState)
+ {
+ _controlState = controlState;
+ Invalidate();
+ }
+ }
+
+ #endregion
+
+ #region Event Handler Region
+
+ protected override void OnMouseMove(MouseEventArgs e)
+ {
+ base.OnMouseMove(e);
+
+ if (_spacePressed)
+ return;
+
+ if (e.Button == MouseButtons.Left)
+ {
+ if (ClientRectangle.Contains(e.Location))
+ SetControlState(DarkControlState.Pressed);
+ else
+ SetControlState(DarkControlState.Hover);
+ }
+ else
+ {
+ SetControlState(DarkControlState.Hover);
+ }
+ }
+
+ protected override void OnMouseDown(MouseEventArgs e)
+ {
+ base.OnMouseDown(e);
+
+ if (!ClientRectangle.Contains(e.Location))
+ return;
+
+ SetControlState(DarkControlState.Pressed);
+ }
+
+ protected override void OnMouseUp(MouseEventArgs e)
+ {
+ base.OnMouseUp(e);
+
+ if (_spacePressed)
+ return;
+
+ SetControlState(DarkControlState.Normal);
+ }
+
+ protected override void OnMouseLeave(EventArgs e)
+ {
+ base.OnMouseLeave(e);
+
+ if (_spacePressed)
+ return;
+
+ SetControlState(DarkControlState.Normal);
+ }
+
+ protected override void OnMouseCaptureChanged(EventArgs e)
+ {
+ base.OnMouseCaptureChanged(e);
+
+ if (_spacePressed)
+ return;
+
+ var location = Cursor.Position;
+
+ if (!ClientRectangle.Contains(location))
+ SetControlState(DarkControlState.Normal);
+ }
+
+ protected override void OnGotFocus(EventArgs e)
+ {
+ base.OnGotFocus(e);
+
+ Invalidate();
+ }
+
+ protected override void OnLostFocus(EventArgs e)
+ {
+ base.OnLostFocus(e);
+
+ _spacePressed = false;
+
+ var location = Cursor.Position;
+
+ if (!ClientRectangle.Contains(location))
+ SetControlState(DarkControlState.Normal);
+ else
+ SetControlState(DarkControlState.Hover);
+ }
+
+ protected override void OnKeyDown(KeyEventArgs e)
+ {
+ base.OnKeyDown(e);
+
+ if (e.KeyCode == Keys.Space)
+ {
+ _spacePressed = true;
+ SetControlState(DarkControlState.Pressed);
+ }
+ }
+
+ protected override void OnKeyUp(KeyEventArgs e)
+ {
+ base.OnKeyUp(e);
+
+ if (e.KeyCode == Keys.Space)
+ {
+ _spacePressed = false;
+
+ var location = Cursor.Position;
+
+ if (!ClientRectangle.Contains(location))
+ SetControlState(DarkControlState.Normal);
+ else
+ SetControlState(DarkControlState.Hover);
+ }
+ }
+
+ #endregion
+
+ #region Paint Region
+
+ protected override void OnPaint(PaintEventArgs e)
+ {
+ var g = e.Graphics;
+ var rect = new Rectangle(0, 0, ClientSize.Width, ClientSize.Height);
+
+ var size = Consts.CheckBoxSize;
+
+ var textColor = Colors.LightText;
+ var borderColor = Colors.LightText;
+ var fillColor = Colors.LightestBackground;
+
+ if (Enabled)
+ {
+ if (Focused)
+ {
+ textColor = Colors.BlueHighlight;
+ borderColor = Colors.BlueHighlight;
+ fillColor = Colors.BlueSelection;
+ }
+
+ if (_controlState == DarkControlState.Hover)
+ {
+ borderColor = Colors.BlueHighlight;
+ fillColor = Colors.BlueSelection;
+ }
+ else if (_controlState == DarkControlState.Pressed)
+ {
+ borderColor = Colors.GreyHighlight;
+ fillColor = Colors.GreySelection;
+ }
+ }
+ else
+ {
+ textColor = Colors.DisabledText;
+ borderColor = Colors.GreyHighlight;
+ fillColor = Colors.GreySelection;
+ }
+
+ using (var b = new SolidBrush(Colors.GreyBackground))
+ {
+ g.FillRectangle(b, rect);
+ }
+
+ using (var p = new Pen(borderColor))
+ {
+ var boxRect = new Rectangle(0, (rect.Height / 2) - (size / 2), size, size);
+ g.DrawRectangle(p, boxRect);
+ }
+
+ if (Checked)
+ {
+ using (var b = new SolidBrush(fillColor))
+ {
+ Rectangle boxRect = new Rectangle(2, (rect.Height / 2) - ((size - 4) / 2), size - 3, size - 3);
+ g.FillRectangle(b, boxRect);
+ }
+ }
+
+ using (var b = new SolidBrush(textColor))
+ {
+ var modRect = new Rectangle(size + 5, 0, rect.Width - (size + 5), rect.Height);
+ g.DrawString(Text, Font, b, modRect);
+ }
+ }
+
+ #endregion
+ }
+}
diff --git a/DarkUI/DarkUI.csproj b/DarkUI/DarkUI.csproj
index f02f8c3..1acab31 100644
--- a/DarkUI/DarkUI.csproj
+++ b/DarkUI/DarkUI.csproj
@@ -43,6 +43,9 @@
+
+ Component
+
Component
diff --git a/DarkUI/Docking/DarkDockPanel.cs b/DarkUI/Docking/DarkDockPanel.cs
index 5961f0b..92c74e4 100644
--- a/DarkUI/Docking/DarkDockPanel.cs
+++ b/DarkUI/Docking/DarkDockPanel.cs
@@ -113,7 +113,7 @@ namespace DarkUI.Docking
if (_contents.Contains(dockContent))
return;
- if (dockContent.DockArea != dockGroup.DockArea)
+ if (dockGroup != null && dockContent.DockArea != dockGroup.DockArea)
throw new Exception($"Attempting to add '{dockContent.DockArea}' content to '{dockGroup.DockArea}' group.");
dockContent.DockPanel = this;
diff --git a/Example/Example.csproj b/Example/Example.csproj
index 8cf6514..965f6b2 100644
--- a/Example/Example.csproj
+++ b/Example/Example.csproj
@@ -47,11 +47,11 @@
DialogAbout.cs
-
+
Form
-
- DialogTest.cs
+
+ DialogControls.cs
UserControl
@@ -105,8 +105,8 @@
DialogAbout.cs
-
- DialogTest.cs
+
+ DialogControls.cs
DockDocument.cs
@@ -195,6 +195,9 @@
+
+
+