102 lines
4.2 KiB
C#
102 lines
4.2 KiB
C#
|
using System.Drawing;
|
|||
|
using System.Drawing.Drawing2D;
|
|||
|
using System.Windows.Forms;
|
|||
|
using WeifenLuo.WinFormsUI.Docking;
|
|||
|
|
|||
|
namespace WeifenLuo.WinFormsUI.ThemeVS2012
|
|||
|
{
|
|||
|
internal class VS2012PaneIndicatorFactory : DockPanelExtender.IPaneIndicatorFactory
|
|||
|
{
|
|||
|
public DockPanel.IPaneIndicator CreatePaneIndicator(ThemeBase theme)
|
|||
|
{
|
|||
|
return new VS2012PaneIndicator(theme);
|
|||
|
}
|
|||
|
|
|||
|
private class VS2012PaneIndicator : PictureBox, DockPanel.IPaneIndicator
|
|||
|
{
|
|||
|
private Bitmap _bitmapPaneDiamond;
|
|||
|
private Bitmap _bitmapPaneDiamondLeft;
|
|||
|
private Bitmap _bitmapPaneDiamondRight;
|
|||
|
private Bitmap _bitmapPaneDiamondTop;
|
|||
|
private Bitmap _bitmapPaneDiamondBottom;
|
|||
|
private Bitmap _bitmapPaneDiamondFill;
|
|||
|
private Bitmap _bitmapPaneDiamondHotSpot;
|
|||
|
private Bitmap _bitmapPaneDiamondHotSpotIndex;
|
|||
|
|
|||
|
private static DockPanel.HotSpotIndex[] _hotSpots = new[]
|
|||
|
{
|
|||
|
new DockPanel.HotSpotIndex(1, 0, DockStyle.Top),
|
|||
|
new DockPanel.HotSpotIndex(0, 1, DockStyle.Left),
|
|||
|
new DockPanel.HotSpotIndex(1, 1, DockStyle.Fill),
|
|||
|
new DockPanel.HotSpotIndex(2, 1, DockStyle.Right),
|
|||
|
new DockPanel.HotSpotIndex(1, 2, DockStyle.Bottom)
|
|||
|
};
|
|||
|
|
|||
|
private GraphicsPath _displayingGraphicsPath;
|
|||
|
|
|||
|
public VS2012PaneIndicator(ThemeBase theme)
|
|||
|
{
|
|||
|
_bitmapPaneDiamond = theme.ImageService.Dockindicator_PaneDiamond;
|
|||
|
_bitmapPaneDiamondLeft = theme.ImageService.Dockindicator_PaneDiamond_Fill;
|
|||
|
_bitmapPaneDiamondRight = theme.ImageService.Dockindicator_PaneDiamond_Fill;
|
|||
|
_bitmapPaneDiamondTop = theme.ImageService.Dockindicator_PaneDiamond_Fill;
|
|||
|
_bitmapPaneDiamondBottom = theme.ImageService.Dockindicator_PaneDiamond_Fill;
|
|||
|
_bitmapPaneDiamondFill = theme.ImageService.Dockindicator_PaneDiamond_Fill;
|
|||
|
_bitmapPaneDiamondHotSpot = theme.ImageService.Dockindicator_PaneDiamond_Hotspot;
|
|||
|
_bitmapPaneDiamondHotSpotIndex = theme.ImageService.DockIndicator_PaneDiamond_HotspotIndex;
|
|||
|
_displayingGraphicsPath = DrawHelper.CalculateGraphicsPathFromBitmap(_bitmapPaneDiamond);
|
|||
|
|
|||
|
SizeMode = PictureBoxSizeMode.AutoSize;
|
|||
|
Image = _bitmapPaneDiamond;
|
|||
|
Region = new Region(DisplayingGraphicsPath);
|
|||
|
}
|
|||
|
|
|||
|
public GraphicsPath DisplayingGraphicsPath
|
|||
|
{
|
|||
|
get { return _displayingGraphicsPath; }
|
|||
|
}
|
|||
|
|
|||
|
public DockStyle HitTest(Point pt)
|
|||
|
{
|
|||
|
if (!Visible)
|
|||
|
return DockStyle.None;
|
|||
|
|
|||
|
pt = PointToClient(pt);
|
|||
|
if (!ClientRectangle.Contains(pt))
|
|||
|
return DockStyle.None;
|
|||
|
|
|||
|
for (int i = _hotSpots.GetLowerBound(0); i <= _hotSpots.GetUpperBound(0); i++)
|
|||
|
{
|
|||
|
if (_bitmapPaneDiamondHotSpot.GetPixel(pt.X, pt.Y) == _bitmapPaneDiamondHotSpotIndex.GetPixel(_hotSpots[i].X, _hotSpots[i].Y))
|
|||
|
return _hotSpots[i].DockStyle;
|
|||
|
}
|
|||
|
|
|||
|
return DockStyle.None;
|
|||
|
}
|
|||
|
|
|||
|
private DockStyle m_status = DockStyle.None;
|
|||
|
|
|||
|
public DockStyle Status
|
|||
|
{
|
|||
|
get { return m_status; }
|
|||
|
set
|
|||
|
{
|
|||
|
m_status = value;
|
|||
|
if (m_status == DockStyle.None)
|
|||
|
Image = _bitmapPaneDiamond;
|
|||
|
else if (m_status == DockStyle.Left)
|
|||
|
Image = _bitmapPaneDiamondLeft;
|
|||
|
else if (m_status == DockStyle.Right)
|
|||
|
Image = _bitmapPaneDiamondRight;
|
|||
|
else if (m_status == DockStyle.Top)
|
|||
|
Image = _bitmapPaneDiamondTop;
|
|||
|
else if (m_status == DockStyle.Bottom)
|
|||
|
Image = _bitmapPaneDiamondBottom;
|
|||
|
else if (m_status == DockStyle.Fill)
|
|||
|
Image = _bitmapPaneDiamondFill;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|