protected override void OnPaint(PaintEventArgs e)
{
if (Width < 16) return;
base.OnPaint(e);
Graphics g = e.Graphics;
g.FillRectangle(new SolidBrush(BackColor), 0, 0, Width, Height);
for (int i = 0; i < _renderList.Count; i++)
{
if (_renderList[i].Index == _selectedIndex)
g.FillRectangle(new SolidBrush(Color.FromArgb(64, 0, 122, 204)), 0, i * NodeHeight, Width - _scrollWidth, NodeHeight);
if (_renderList[i].Hovered)
g.FillRectangle(new SolidBrush(Color.FromArgb(64, 0, 122, 204)), 0, i * NodeHeight, Width - _scrollWidth, NodeHeight);
Color _nodeColor = _renderList[i].Node.TextColor;
if ((_nodeColor.R > 192 && _nodeColor.G > 192 && _nodeColor.B > 192) || _nodeColor.A < 192)
_nodeColor = Color.FromArgb(64, 64, 64);
int nodeOffset = 8 * _renderList[i].Depth;
g.DrawString(_renderList[i].Node.Text, Font, new SolidBrush(_nodeColor), new RectangleF(nodeOffset + 6, i * NodeHeight - 2, Width - _scrollWidth - nodeOffset, NodeHeight + 4), NodeAlign);
if (_renderList[i].Node.Nodes.Count > 0)
{
var nodeTexture = _renderList[i].Node.Collapsed ? ImageFolderClosed : ImageFolderOpened;
g.DrawTexture(nodeTexture, nodeOffset - 12, i * NodeHeight, 16, 16);
}
else
{
var image = ImageFile;
if (_renderList[i].Node.Image != null)
image = _renderList[i].Node.Image;
g.DrawTexture(image, nodeOffset - 12, i * NodeHeight, image.width, image.height);
}
}
//g.GroupEnd();
// Scroll.
if (_renderList.Count < _scrollItems)
{
Color _scrollColor = Color.FromArgb(222, 222, 230);
if (_scrollHover || _scroll) _scrollColor = Color.FromArgb(136, 136, 136);
g.FillRectangle(new SolidBrush(_scrollColor), Width - _scrollWidth + 2, _scrollY, _scrollWidth - 2, _scrollHeight);
}
g.DrawRectangle(new Pen(BorderColor), 0, 0, Width, Height);
}