forked from baldurk/renderdoc
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInertButtonBase.cs
More file actions
115 lines (98 loc) · 3.09 KB
/
InertButtonBase.cs
File metadata and controls
115 lines (98 loc) · 3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Imaging;
namespace WeifenLuo.WinFormsUI.Docking
{
internal abstract class InertButtonBase : Control
{
protected InertButtonBase()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
BackColor = Color.Transparent;
}
public abstract Bitmap Image
{
get;
}
private bool m_isMouseOver = false;
protected bool IsMouseOver
{
get { return m_isMouseOver; }
private set
{
if (m_isMouseOver == value)
return;
m_isMouseOver = value;
Invalidate();
}
}
protected override Size DefaultSize
{
get { return Resources.DockPane_Close.Size; }
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
bool over = ClientRectangle.Contains(e.X, e.Y);
if (IsMouseOver != over)
IsMouseOver = over;
}
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
if (!IsMouseOver)
IsMouseOver = true;
}
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
if (IsMouseOver)
IsMouseOver = false;
}
protected override void OnPaint(PaintEventArgs e)
{
if (IsMouseOver && Enabled)
{
using (Pen pen = new Pen(ForeColor))
{
e.Graphics.DrawRectangle(pen, Rectangle.Inflate(ClientRectangle, -1, -1));
}
}
using (ImageAttributes imageAttributes = new ImageAttributes())
{
ColorMap[] colorMap = new ColorMap[2];
colorMap[0] = new ColorMap();
colorMap[0].OldColor = Color.FromArgb(0, 0, 0);
colorMap[0].NewColor = ForeColor;
colorMap[1] = new ColorMap();
colorMap[1].OldColor = Image.GetPixel(0, 0);
colorMap[1].NewColor = Color.Transparent;
imageAttributes.SetRemapTable(colorMap);
e.Graphics.DrawImage(
Image,
new Rectangle(0, 0, Image.Width, Image.Height),
0, 0,
Image.Width,
Image.Height,
GraphicsUnit.Pixel,
imageAttributes);
}
base.OnPaint(e);
}
public void RefreshChanges()
{
if (IsDisposed)
return;
bool mouseOver = ClientRectangle.Contains(PointToClient(Control.MousePosition));
if (mouseOver != IsMouseOver)
IsMouseOver = mouseOver;
OnRefreshChanges();
}
protected virtual void OnRefreshChanges()
{
}
}
}