mirror of https://github.com/quasar/Quasar.git
141 lines
6.7 KiB
C#
141 lines
6.7 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Windows.Forms;
|
|
|
|
// thanks to Mavamaarten~ for coding this
|
|
|
|
namespace xServer.Controls
|
|
{
|
|
internal class DotNetBarTabControl : TabControl
|
|
{
|
|
public DotNetBarTabControl()
|
|
{
|
|
SetStyle(
|
|
ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw | ControlStyles.UserPaint |
|
|
ControlStyles.DoubleBuffer, true);
|
|
SizeMode = TabSizeMode.Fixed;
|
|
ItemSize = new Size(44, 136);
|
|
Alignment = TabAlignment.Left;
|
|
SelectedIndex = 0;
|
|
}
|
|
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
Bitmap b = new Bitmap(Width, Height);
|
|
Graphics g = Graphics.FromImage(b);
|
|
if (!DesignMode)
|
|
SelectedTab.BackColor = SystemColors.Control;
|
|
g.Clear(SystemColors.Control);
|
|
g.FillRectangle(new SolidBrush(Color.FromArgb(246, 248, 252)),
|
|
new Rectangle(0, 0, ItemSize.Height + 4, Height));
|
|
g.DrawLine(new Pen(Color.FromArgb(170, 187, 204)), new Point(ItemSize.Height + 3, 0),
|
|
new Point(ItemSize.Height + 3, 999));
|
|
g.DrawLine(new Pen(Color.FromArgb(170, 187, 204)), new Point(0, Size.Height - 1),
|
|
new Point(Width + 3, Size.Height - 1));
|
|
for (int i = 0; i <= TabCount - 1; i++)
|
|
{
|
|
if (i == SelectedIndex)
|
|
{
|
|
Rectangle x2 = new Rectangle(new Point(GetTabRect(i).Location.X - 2, GetTabRect(i).Location.Y - 2),
|
|
new Size(GetTabRect(i).Width + 3, GetTabRect(i).Height - 1));
|
|
ColorBlend myBlend = new ColorBlend();
|
|
myBlend.Colors = new Color[] { Color.FromArgb(232, 232, 240), Color.FromArgb(232, 232, 240), Color.FromArgb(232, 232, 240) };
|
|
myBlend.Positions = new float[] { 0f, 0.5f, 1f };
|
|
LinearGradientBrush lgBrush = new LinearGradientBrush(x2, Color.Black, Color.Black, 90f);
|
|
lgBrush.InterpolationColors = myBlend;
|
|
g.FillRectangle(lgBrush, x2);
|
|
g.DrawRectangle(new Pen(Color.FromArgb(170, 187, 204)), x2);
|
|
|
|
g.SmoothingMode = SmoothingMode.HighQuality;
|
|
Point[] p =
|
|
{
|
|
new Point(ItemSize.Height - 3, GetTabRect(i).Location.Y + 20),
|
|
new Point(ItemSize.Height + 4, GetTabRect(i).Location.Y + 14),
|
|
new Point(ItemSize.Height + 4, GetTabRect(i).Location.Y + 27)
|
|
};
|
|
g.FillPolygon(SystemBrushes.Control, p);
|
|
g.DrawPolygon(new Pen(Color.FromArgb(170, 187, 204)), p);
|
|
|
|
if (ImageList != null)
|
|
{
|
|
try
|
|
{
|
|
g.DrawImage(ImageList.Images[TabPages[i].ImageIndex],
|
|
new Point(x2.Location.X + 8, x2.Location.Y + 6));
|
|
g.DrawString(" " + TabPages[i].Text, Font, Brushes.Black, x2, new StringFormat
|
|
{
|
|
LineAlignment = StringAlignment.Center,
|
|
Alignment = StringAlignment.Center
|
|
});
|
|
}
|
|
catch (Exception)
|
|
{
|
|
g.DrawString(TabPages[i].Text, new Font(Font.FontFamily, Font.Size, FontStyle.Bold),
|
|
Brushes.Black, x2, new StringFormat
|
|
{
|
|
LineAlignment = StringAlignment.Center,
|
|
Alignment = StringAlignment.Center
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
g.DrawString(TabPages[i].Text, new Font(Font.FontFamily, Font.Size, FontStyle.Bold),
|
|
Brushes.Black, x2, new StringFormat
|
|
{
|
|
LineAlignment = StringAlignment.Center,
|
|
Alignment = StringAlignment.Center
|
|
});
|
|
}
|
|
|
|
g.DrawLine(new Pen(Color.FromArgb(200, 200, 250)), new Point(x2.Location.X - 1, x2.Location.Y - 1),
|
|
new Point(x2.Location.X, x2.Location.Y));
|
|
g.DrawLine(new Pen(Color.FromArgb(200, 200, 250)), new Point(x2.Location.X - 1, x2.Bottom - 1),
|
|
new Point(x2.Location.X, x2.Bottom));
|
|
}
|
|
else
|
|
{
|
|
Rectangle x2 = new Rectangle(new Point(GetTabRect(i).Location.X - 2, GetTabRect(i).Location.Y - 2),
|
|
new Size(GetTabRect(i).Width + 3, GetTabRect(i).Height - 1));
|
|
g.FillRectangle(new SolidBrush(Color.FromArgb(246, 248, 252)), x2);
|
|
g.DrawLine(new Pen(Color.FromArgb(170, 187, 204)), new Point(x2.Right, x2.Top),
|
|
new Point(x2.Right, x2.Bottom));
|
|
if (ImageList != null)
|
|
{
|
|
try
|
|
{
|
|
g.DrawImage(ImageList.Images[TabPages[i].ImageIndex],
|
|
new Point(x2.Location.X + 8, x2.Location.Y + 6));
|
|
g.DrawString(" " + TabPages[i].Text, Font, Brushes.DimGray, x2, new StringFormat
|
|
{
|
|
LineAlignment = StringAlignment.Center,
|
|
Alignment = StringAlignment.Center
|
|
});
|
|
}
|
|
catch (Exception)
|
|
{
|
|
g.DrawString(TabPages[i].Text, Font, Brushes.DimGray, x2, new StringFormat
|
|
{
|
|
LineAlignment = StringAlignment.Center,
|
|
Alignment = StringAlignment.Center
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
g.DrawString(TabPages[i].Text, Font, Brushes.DimGray, x2, new StringFormat
|
|
{
|
|
LineAlignment = StringAlignment.Center,
|
|
Alignment = StringAlignment.Center
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
e.Graphics.DrawImage(b, new Point(0, 0));
|
|
g.Dispose();
|
|
b.Dispose();
|
|
}
|
|
}
|
|
} |