878 lines
34 KiB
C#

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace DevComponents.DotNetBar
{
#region Enums
[System.Flags()]
internal enum eDockingHintSide
{
Left = 1,
Right = 2,
Top = 4,
Bottom = 8,
DockTab = 16,
All = (Left | Right | Top | Bottom | DockTab),
Sides = (Left | Right | Top | Bottom)
}
internal enum eMouseOverHintSide
{
None,
Left,
Right,
Top,
Bottom,
DockTab,
}
#endregion
/// <summary>
/// Summary description for DockingHint.
/// </summary>
[ToolboxItem(false)]
internal class DockingHint : System.Windows.Forms.Form
{
#region Private Variables
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
private eDockingHintSide m_DockingHintSide = eDockingHintSide.All;
private eMouseOverHintSide m_MouseOverHintSide = eMouseOverHintSide.None;
private bool m_PendingRefresh = false;
private GraphicsPath m_LeftHint = null;
private GraphicsPath m_RightHint = null;
private GraphicsPath m_BottomHint = null;
private GraphicsPath m_TopHint = null;
private GraphicsPath m_DockTabHint = null;
private bool m_MiddleDockHint = false;
#endregion
#region Static Members
// Static Images
private static Bitmap s_ImageGuideTop = null;
private static Bitmap s_ImageGuideBottom = null;
private static Bitmap s_ImageGuideLeft = null;
private static Bitmap s_ImageGuideRight = null;
private static Bitmap s_ImageGuideTab = null;
private static Bitmap s_ImageGuideAllSides = null;
private static Bitmap s_ImageGuideTop2010 = null;
private static Bitmap s_ImageGuideBottom2010 = null;
private static Bitmap s_ImageGuideLeft2010 = null;
private static Bitmap s_ImageGuideRight2010 = null;
private static Bitmap s_ImageGuideTab2010 = null;
private static Bitmap s_ImageGuideTabTopBottom2010 = null;
private static Bitmap s_ImageGuideTabLeftRight2010 = null;
private static Bitmap s_ImageGuideAllSides2010 = null;
public static Bitmap ImageGuideTop
{
get
{
if (s_ImageGuideTop == null)
s_ImageGuideTop = BarFunctions.LoadBitmap("SystemImages.DockHintTop.png");
return s_ImageGuideTop;
}
}
public static Bitmap ImageGuideTop2010
{
get
{
if (s_ImageGuideTop2010 == null)
s_ImageGuideTop2010 = BarFunctions.LoadBitmap("SystemImages.DockHintTop2010.png");
return s_ImageGuideTop2010;
}
}
public static Bitmap ImageGuideBottom
{
get
{
if (s_ImageGuideBottom == null)
s_ImageGuideBottom = BarFunctions.LoadBitmap("SystemImages.DockHintBottom.png");
return s_ImageGuideBottom;
}
}
public static Bitmap ImageGuideBottom2010
{
get
{
if (s_ImageGuideBottom2010 == null)
s_ImageGuideBottom2010 = BarFunctions.LoadBitmap("SystemImages.DockHintBottom2010.png");
return s_ImageGuideBottom2010;
}
}
public static Bitmap ImageGuideLeft
{
get
{
if (s_ImageGuideLeft == null)
s_ImageGuideLeft = BarFunctions.LoadBitmap("SystemImages.DockHintLeft.png");// new Bitmap(typeof(DevComponents.DotNetBar.DotNetBarManager),"SystemImages.DockHintLeft.png");
return s_ImageGuideLeft;
}
}
public static Bitmap ImageGuideLeft2010
{
get
{
if (s_ImageGuideLeft2010 == null)
s_ImageGuideLeft2010 = BarFunctions.LoadBitmap("SystemImages.DockHintLeft2010.png");// new Bitmap(typeof(DevComponents.DotNetBar.DotNetBarManager),"SystemImages.DockHintLeft.png");
return s_ImageGuideLeft2010;
}
}
public static Bitmap ImageGuideRight
{
get
{
if (s_ImageGuideRight == null)
s_ImageGuideRight = BarFunctions.LoadBitmap("SystemImages.DockHintRight.png");
return s_ImageGuideRight;
}
}
public static Bitmap ImageGuideRight2010
{
get
{
if (s_ImageGuideRight2010 == null)
s_ImageGuideRight2010 = BarFunctions.LoadBitmap("SystemImages.DockHintRight2010.png");
return s_ImageGuideRight2010;
}
}
public static Bitmap ImageGuideTab
{
get
{
if (s_ImageGuideTab == null)
s_ImageGuideTab = BarFunctions.LoadBitmap("SystemImages.DockHintTab.png");
return s_ImageGuideTab;
}
}
public static Bitmap ImageGuideTab2010
{
get
{
if (s_ImageGuideTab2010 == null)
s_ImageGuideTab2010 = BarFunctions.LoadBitmap("SystemImages.DockHintTab2010.png");
return s_ImageGuideTab2010;
}
}
public static Bitmap ImageGuideAllTopBottom2010
{
get
{
if (s_ImageGuideTabTopBottom2010 == null)
s_ImageGuideTabTopBottom2010 = BarFunctions.LoadBitmap("SystemImages.DockHintTopBottom2010.png");
return s_ImageGuideTabTopBottom2010;
}
}
public static Bitmap ImageGuideAllLeftRight2010
{
get
{
if (s_ImageGuideTabLeftRight2010 == null)
s_ImageGuideTabLeftRight2010 = BarFunctions.LoadBitmap("SystemImages.DockHintLeftRight2010.png");
return s_ImageGuideTabLeftRight2010;
}
}
public static Bitmap ImageGuideAllSides
{
get
{
if (s_ImageGuideAllSides == null)
s_ImageGuideAllSides = BarFunctions.LoadBitmap("SystemImages.DockHintAllSides.png");
return s_ImageGuideAllSides;
}
}
public static Bitmap ImageGuideAllSides2010
{
get
{
if (s_ImageGuideAllSides2010 == null)
s_ImageGuideAllSides2010 = BarFunctions.LoadBitmap("SystemImages.DockHintAllSides2010.png");
return s_ImageGuideAllSides2010;
}
}
#endregion
#region Constructor
private eDotNetBarStyle _Style = eDotNetBarStyle.Office2003;
public DockingHint(eDockingHintSide hintSide, eDotNetBarStyle style) : this(hintSide, false, style) { }
public DockingHint(eDockingHintSide hintSide, bool middleDockingHint, eDotNetBarStyle style)
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
_Style = style;
m_MiddleDockHint = middleDockingHint;
this.SetStyle(ControlStyles.Selectable, false);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(DisplayHelp.DoubleBufferFlag, true);
this.SetStyle(ControlStyles.Opaque, true);
m_DockingHintSide = hintSide;
UpdateControlRegion();
}
#endregion
#region Internal Implemementation
public void ShowFocusless()
{
Size size = this.Size;
NativeFunctions.SetWindowPos(this.Handle, new IntPtr(NativeFunctions.HWND_TOP), 0, 0, size.Width, size.Height, NativeFunctions.SWP_SHOWWINDOW | NativeFunctions.SWP_NOACTIVATE | NativeFunctions.SWP_NOMOVE);
//this.TopMost=true;
if (!BarFunctions.ThemedOS)
UpdateControlRegion();
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= (int)NativeFunctions.WS_EX_TOPMOST | (int)NativeFunctions.SWP_NOACTIVATE;
return cp;
}
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
private void DisposeHintPaths()
{
DisposeHintPath(ref m_LeftHint);
DisposeHintPath(ref m_RightHint);
DisposeHintPath(ref m_TopHint);
DisposeHintPath(ref m_BottomHint);
}
private void DisposeHintPath(ref GraphicsPath path)
{
if (path != null) path.Dispose();
path = null;
}
/// <summary>
/// Update control region based on hint side
/// </summary>
public void UpdateControlRegion()
{
System.Drawing.Region region = null;
System.Drawing.Size size = Size.Empty;
if (m_MiddleDockHint)
{
GraphicsPath path = new GraphicsPath();
m_DockTabHint = this.GetHintPath(eDockingHintSide.DockTab);
DisposeHintPaths();
if (m_DockingHintSide == (eDockingHintSide.Left | eDockingHintSide.Right) && (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style)))
{
m_LeftHint = this.GetHintPath(eDockingHintSide.Left);
m_RightHint = this.GetHintPath(eDockingHintSide.Right);
path.AddRectangle(new Rectangle(0, 36, 112, 40));
}
else if (m_DockingHintSide == (eDockingHintSide.Top | eDockingHintSide.Bottom) && (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style)))
{
m_TopHint = this.GetHintPath(eDockingHintSide.Top);
m_BottomHint = this.GetHintPath(eDockingHintSide.Bottom);
path.AddRectangle(new Rectangle(36, 0, 40, 112));
}
else
{
// Assign paths
if ((m_DockingHintSide & eDockingHintSide.Left) != 0)
{
m_LeftHint = this.GetHintPath(eDockingHintSide.Left);
path.AddPath(m_LeftHint, true);
}
else
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
path.AddLine(26, 36, 26, 76);
else
path.AddLine(23, 57, 23, 29);
}
if ((m_DockingHintSide & eDockingHintSide.Top) != 0)
{
m_TopHint = this.GetHintPath(eDockingHintSide.Top);
path.AddPath(m_TopHint, true);
}
else
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
path.AddLine(26, 36, 88, 36);
else
path.AddLine(29, 23, 57, 23);
}
if ((m_DockingHintSide & eDockingHintSide.Right) != 0)
{
m_RightHint = this.GetHintPath(eDockingHintSide.Right);
path.AddPath(m_RightHint, true);
}
else
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
path.AddLine(88, 36, 88, 76);
else
path.AddLine(64, 29, 64, 57);
}
if ((m_DockingHintSide & eDockingHintSide.Bottom) != 0)
{
m_BottomHint = this.GetHintPath(eDockingHintSide.Bottom);
path.AddPath(m_BottomHint, true);
}
else
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
path.AddLine(88, 76, 26, 76);
else
path.AddLine(57, 64, 29, 64);
}
path.CloseAllFigures();
}
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
size = new Size(112, 112);
else
size = new Size(88, 88);
region = new Region(path);
}
else
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
size = new Size(40, 40);
else
{
if ((m_DockingHintSide & eDockingHintSide.Left) != 0 || (m_DockingHintSide & eDockingHintSide.Right) != 0)
size = new Size(31, 29);
else
size = new Size(29, 31);
}
if ((m_DockingHintSide & eDockingHintSide.Left) != 0)
{
m_LeftHint = new GraphicsPath();
m_LeftHint.AddRectangle(new Rectangle(Point.Empty, size));
}
if ((m_DockingHintSide & eDockingHintSide.Right) != 0)
{
m_RightHint = new GraphicsPath();
m_RightHint.AddRectangle(new Rectangle(Point.Empty, size));
}
if ((m_DockingHintSide & eDockingHintSide.Top) != 0)
{
m_TopHint = new GraphicsPath();
m_TopHint.AddRectangle(new Rectangle(Point.Empty, size));
}
if ((m_DockingHintSide & eDockingHintSide.Bottom) != 0)
{
m_BottomHint = new GraphicsPath();
m_BottomHint.AddRectangle(new Rectangle(Point.Empty, size));
}
region = new Region(new Rectangle(Point.Empty, size));
}
this.Size = size;
if (region != null)
this.Region = region;
}
private Rectangle GetHintRect()
{
System.Drawing.Size size = Size.Empty;
if ((m_DockingHintSide & eDockingHintSide.Bottom) == eDockingHintSide.Bottom)
{
SizeF sf = m_BottomHint.GetBounds().Size;
size = new Size((int)sf.Width, (int)sf.Height);
}
if ((m_DockingHintSide & eDockingHintSide.Top) == eDockingHintSide.Top)
{
SizeF sf = m_TopHint.GetBounds().Size;
size = new Size((int)sf.Width, (int)sf.Height);
}
if ((m_DockingHintSide & eDockingHintSide.Right) == eDockingHintSide.Right)
{
SizeF sf = m_RightHint.GetBounds().Size;
size = new Size((int)sf.Width, (int)sf.Height);
}
if ((m_DockingHintSide & eDockingHintSide.DockTab) == eDockingHintSide.DockTab)
{
SizeF sf = m_DockTabHint.GetBounds().Size;
size = new Size((int)sf.Width, (int)sf.Height);
}
if ((m_DockingHintSide & eDockingHintSide.Left) == eDockingHintSide.Left)
{
SizeF sf = m_LeftHint.GetBounds().Size;
size = new Size((int)sf.Width, (int)sf.Height);
}
if (m_DockingHintSide == eDockingHintSide.Sides)
size = new Size(88, 88);
return new Rectangle(Point.Empty, size);
}
private Image GetImageGuideTab()
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
{
return DockingHint.ImageGuideTab2010;
}
return DockingHint.ImageGuideTab;
}
private Image GetImageGuideAllSides()
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
{
if (m_DockingHintSide == (eDockingHintSide.Left | eDockingHintSide.Right))
return DockingHint.ImageGuideAllLeftRight2010;
else if (m_DockingHintSide == (eDockingHintSide.Top | eDockingHintSide.Bottom))
return DockingHint.ImageGuideAllTopBottom2010;
return DockingHint.ImageGuideAllSides2010;
}
return DockingHint.ImageGuideAllSides;
}
private Image GetImageGuideLeft()
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
return DockingHint.ImageGuideLeft2010;
return DockingHint.ImageGuideLeft;
}
private Image GetImageGuideRight()
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
return DockingHint.ImageGuideRight2010;
return DockingHint.ImageGuideRight;
}
private Image GetImageGuideTop()
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
return DockingHint.ImageGuideTop2010;
return DockingHint.ImageGuideTop;
}
private Image GetImageGuideBottom()
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
return DockingHint.ImageGuideBottom2010;
return DockingHint.ImageGuideBottom;
}
private SolidBrush CreateOverlayMouseOverBrush()
{
return new SolidBrush(Color.FromArgb(48, Color.Navy));
}
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
Color colorHot = Color.FromArgb(65, 112, 202);
Color color = Color.FromArgb(228, 228, 228);
SolidBrush brush = new SolidBrush(color);
Pen pen = new Pen(colorHot, 1);
try
{
if (m_MiddleDockHint)
{
g.DrawImageUnscaled(GetImageGuideAllSides(), 0, 0);
if ((m_DockingHintSide & eDockingHintSide.DockTab) == eDockingHintSide.DockTab)
{
Image imageGuideTab = GetImageGuideTab();
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
g.DrawImageUnscaled(imageGuideTab, (this.Width - imageGuideTab.Width) / 2, (this.Height - imageGuideTab.Height) / 2);
else
g.DrawImageUnscaled(imageGuideTab, (this.Width - imageGuideTab.Width) / 2 + 2, (this.Height - imageGuideTab.Height) / 2 + 2);
}
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
{
}
else
{
if ((m_DockingHintSide & eDockingHintSide.Bottom) != eDockingHintSide.Bottom)
g.FillRectangle(brush, 33, 60, 23, 26);
if ((m_DockingHintSide & eDockingHintSide.Top) != eDockingHintSide.Top)
g.FillRectangle(brush, 33, 4, 23, 26);
if ((m_DockingHintSide & eDockingHintSide.Left) != eDockingHintSide.Left)
g.FillRectangle(brush, 4, 33, 26, 23);
if ((m_DockingHintSide & eDockingHintSide.Right) != eDockingHintSide.Right)
g.FillRectangle(brush, 60, 33, 26, 23);
}
}
else
{
if ((m_DockingHintSide & eDockingHintSide.Left) == eDockingHintSide.Left)
{
g.DrawImage(GetImageGuideLeft(), m_LeftHint.GetBounds());
}
if ((m_DockingHintSide & eDockingHintSide.Right) == eDockingHintSide.Right)
{
g.DrawImage(GetImageGuideRight(), m_RightHint.GetBounds());
}
if ((m_DockingHintSide & eDockingHintSide.Top) == eDockingHintSide.Top)
{
g.DrawImage(GetImageGuideTop(), m_TopHint.GetBounds());
}
if ((m_DockingHintSide & eDockingHintSide.Bottom) == eDockingHintSide.Bottom)
{
g.DrawImage(GetImageGuideBottom(), m_BottomHint.GetBounds());
}
else
g.FillRectangle(brush, 33, 84, 23, 26);
}
if (m_MouseOverHintSide == eMouseOverHintSide.Left)
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
{
Rectangle hintRect;
if (m_MiddleDockHint)
hintRect = new Rectangle(4, 40, 32, 32);
else
hintRect = new Rectangle(4, 4, 32, 32);
using (GraphicsPath mp = DisplayHelp.GetRoundedRectanglePath(hintRect, 1))
{
using(SolidBrush brush2=CreateOverlayMouseOverBrush())
g.FillPath(brush2, mp);
}
}
else
{
RectangleF r = m_LeftHint.GetBounds();
if (m_MiddleDockHint)
{
r.Inflate(0, -6);
r.Width -= 6;
}
g.DrawLine(pen, r.X, r.Y, r.Right, r.Y);
g.DrawLine(pen, r.X, r.Y, r.X, r.Bottom);
g.DrawLine(pen, r.X, r.Bottom - 1, r.Right, r.Bottom - 1);
}
}
if (m_MouseOverHintSide == eMouseOverHintSide.Right)
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
{
Rectangle hintRect;
if (m_MiddleDockHint)
hintRect = new Rectangle(76, 40, 32, 32);
else
hintRect = new Rectangle(4, 4, 32, 32);
using (GraphicsPath mp = DisplayHelp.GetRoundedRectanglePath(hintRect, 1))
{
using (SolidBrush brush2 = CreateOverlayMouseOverBrush())
g.FillPath(brush2, mp);
}
}
else
{
RectangleF r = m_RightHint.GetBounds();
if (m_MiddleDockHint)
{
r.Inflate(0, -6);
r.Width -= 6;
r.X += 6;
}
g.DrawLine(pen, r.X, r.Y, r.Right, r.Y);
g.DrawLine(pen, r.Right - 1, r.Y, r.Right - 1, r.Bottom);
g.DrawLine(pen, r.X, r.Bottom - 1, r.Right, r.Bottom - 1);
}
}
if (m_MouseOverHintSide == eMouseOverHintSide.Top)
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
{
Rectangle hintRect;
if (m_MiddleDockHint)
hintRect = new Rectangle(40, 4, 32, 32);
else
hintRect = new Rectangle(4, 4, 32, 32);
using (GraphicsPath mp = DisplayHelp.GetRoundedRectanglePath(hintRect, 1))
{
using (SolidBrush brush2 = CreateOverlayMouseOverBrush())
g.FillPath(brush2, mp);
}
}
else
{
RectangleF r = m_TopHint.GetBounds();
if (m_MiddleDockHint)
{
r.Inflate(-6, 0);
r.Height -= 6;
}
g.DrawLine(pen, r.X, r.Y, r.Right, r.Y);
g.DrawLine(pen, r.Right - 1, r.Y, r.Right - 1, r.Bottom);
g.DrawLine(pen, r.X, r.Y, r.X, r.Bottom);
}
}
if (m_MouseOverHintSide == eMouseOverHintSide.Bottom)
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
{
Rectangle hintRect;
if (m_MiddleDockHint)
hintRect = new Rectangle(40, 76, 32, 32);
else
hintRect = new Rectangle(4, 4, 32, 32);
using (GraphicsPath mp = DisplayHelp.GetRoundedRectanglePath(hintRect, 1))
{
using (SolidBrush brush2 = CreateOverlayMouseOverBrush())
g.FillPath(brush2, mp);
}
}
else
{
RectangleF r = m_BottomHint.GetBounds();
if (m_MiddleDockHint)
{
r.Inflate(-6, 0);
r.Height -= 6;
r.Y += 6;
}
g.DrawLine(pen, r.X, r.Bottom - 1, r.Right, r.Bottom - 1);
g.DrawLine(pen, r.Right - 1, r.Y, r.Right - 1, r.Bottom);
g.DrawLine(pen, r.X, r.Y, r.X, r.Bottom);
}
}
if (m_MouseOverHintSide == eMouseOverHintSide.DockTab)
{
if ((_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style)) && m_MiddleDockHint)
{
Rectangle hintRect = new Rectangle(40, 40, 32, 32);
using (GraphicsPath mp = DisplayHelp.GetRoundedRectanglePath(hintRect, 1))
{
using (SolidBrush brush2 = CreateOverlayMouseOverBrush())
g.FillPath(brush2, mp);
}
}
}
}
finally
{
brush.Dispose();
pen.Dispose();
}
}
public GraphicsPath GetHintPath(eDockingHintSide hintSide)
{
// Create top hint path then rotate depending on desired side
GraphicsPath path = new GraphicsPath();
if (hintSide == eDockingHintSide.DockTab)
{
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
path.AddRectangle(new Rectangle(40, 40, 32, 32));
else
path.AddRectangle(new Rectangle(29, 29, 29, 29));
}
else
{
path.StartFigure();
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
{
//path.AddLine(26, 36, 36, 26);
//path.AddLine(36, 0, 76, 0);
//path.AddLine(76, 26, 86, 36);
path.AddLine(27, 35, 36, 26);
path.AddLine(36, 0, 76, 0);
path.AddLine(76, 26, 86, 35);
}
else
{
path.AddLine(23, 28, 28, 23);
path.AddLine(29, 23, 29, 0);
path.AddLine(57, 0, 57, 23);
path.AddLine(58, 23, 63, 28);
}
}
switch (hintSide)
{
case eDockingHintSide.Bottom:
{
using (Matrix matrix = new Matrix())
{
matrix.Rotate(180);
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
matrix.Translate(-path.GetBounds().Width * 2 + 6, -path.GetBounds().Height * 2 - 42);
else
matrix.Translate(-path.GetBounds().Width * 2 - 6, -path.GetBounds().Height * 2 - 30);
path.Transform(matrix);
}
break;
}
case eDockingHintSide.Left:
{
using (Matrix matrix = new Matrix())
{
matrix.Rotate(-90);
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
matrix.Translate(-53, 0);
else
matrix.Translate(-46, 0);
path.Transform(matrix);
matrix.Reset();
matrix.Translate(0, path.GetBounds().Height);
path.Transform(matrix);
}
break;
}
case eDockingHintSide.Right:
{
using (Matrix matrix = new Matrix())
{
matrix.Rotate(90);
path.Transform(matrix);
matrix.Reset();
if (_Style == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(_Style))
matrix.Translate(path.GetBounds().Width * 2 + 42, 0);
else
matrix.Translate(path.GetBounds().Width * 2 + 30, 0);
path.Transform(matrix);
}
break;
}
}
return path;
}
internal eMouseOverHintSide ExMouseMove(int x, int y)
{
if (this.Bounds.Contains(x, y))
{
Point p = this.PointToClient(new Point(x, y));
if (m_LeftHint != null && m_LeftHint.IsVisible(p))
{
this.MouseOverHintSide = eMouseOverHintSide.Left;
}
else if (m_RightHint != null && m_RightHint.IsVisible(p))
{
this.MouseOverHintSide = eMouseOverHintSide.Right;
}
else if (m_TopHint != null && m_TopHint.IsVisible(p))
{
this.MouseOverHintSide = eMouseOverHintSide.Top;
}
else if (m_BottomHint != null && m_BottomHint.IsVisible(p))
{
this.MouseOverHintSide = eMouseOverHintSide.Bottom;
}
else if (m_DockTabHint != null && m_DockTabHint.IsVisible(p) && ((m_DockingHintSide & eDockingHintSide.DockTab) == eDockingHintSide.DockTab))
{
this.MouseOverHintSide = eMouseOverHintSide.DockTab;
}
else
this.MouseOverHintSide = eMouseOverHintSide.None;
}
else
this.MouseOverHintSide = eMouseOverHintSide.None;
this.ProcessPendingRefresh();
return this.MouseOverHintSide;
}
private eMouseOverHintSide MouseOverHintSide
{
get { return m_MouseOverHintSide; }
set
{
if (m_MouseOverHintSide != value)
{
m_MouseOverHintSide = value;
m_PendingRefresh = true;
}
}
}
private void ProcessPendingRefresh()
{
if (m_PendingRefresh)
{
m_PendingRefresh = false;
this.Refresh();
}
}
public eDockingHintSide DockingHintSides
{
get { return m_DockingHintSide; }
set
{
if (m_DockingHintSide != value)
{
m_DockingHintSide = value;
UpdateControlRegion();
if (this.IsHandleCreated)
this.Refresh();
}
}
}
public bool MiddleDockHint
{
get { return m_MiddleDockHint; }
set { m_MiddleDockHint = value; }
}
#endregion
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
//
// DockingHint
//
// this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
// this.ClientSize = new System.Drawing.Size(24, 24);
this.ControlBox = false;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.MinimizeBox = false;
this.MaximizeBox = false;
this.ControlBox = false;
this.Name = "DockingHint";
this.Text = "";
this.ShowInTaskbar = false;
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.StartPosition = FormStartPosition.Manual;
}
#endregion
}
}