using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
///
/// Created by DoggyCollin
/// HF link: http://www.hackforums.net/member.php?action=profile&uid=1278211
///
internal static class FoxSettings
{
public static Pen BorderColor = new Pen(Color.FromArgb(49, 49, 49));
public static SolidBrush TextColor = new SolidBrush(Color.FromArgb(249, 249, 249));
public static SolidBrush TextColorDark = new SolidBrush(Color.FromArgb(66, 66, 66));
public static SolidBrush FillheaderColor = new SolidBrush(Color.FromArgb(237, 237, 237));
public static SolidBrush FillbodyColor = new SolidBrush(Color.FromArgb(250, 250, 250));
public static SolidBrush UpColor = new SolidBrush(Color.FromArgb(255, 136, 83)); // Orange(255, 136, 83), Green(116, 214, 36), Blue(90, 160, 220), Red(232, 67, 67)
public static SolidBrush DownColor = new SolidBrush(Color.FromArgb(UpColor.Color.R - 33, UpColor.Color.G - 33, UpColor.Color.B - 33));
public static Font TextFont = new Font("Verdana", 8.0F);
}
internal class FoxTheme : Control
{
///
/// Gets or sets the visibility of the icon copied from the parent control.
///
public bool ShowIcon { get { return _showIcon; } set { _showIcon = value; Invalidate(); } }
private bool _showIcon;
private Graphics G;
private Pen borderColor;
private SolidBrush textColor;
private SolidBrush fillheaderColor;
private SolidBrush fillbodyColor;
public FoxTheme()
{
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true);
borderColor = FoxSettings.BorderColor;
textColor = FoxSettings.TextColor;
fillheaderColor = FoxSettings.FillheaderColor;
fillbodyColor = FoxSettings.FillbodyColor;
//Set defaults
Font = FoxSettings.TextFont;
ForeColor = textColor.Color;
}
protected override void OnHandleCreated(EventArgs e)
{
Dock = DockStyle.Fill;
if (Parent is Form)
{
Form tempWith1 = (Form)Parent;
tempWith1.FormBorderStyle = 0;
tempWith1.TransparencyKey = Color.Fuchsia;
tempWith1.BackColor = fillheaderColor.Color;
}
base.OnHandleCreated(e);
}
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
if (new Rectangle(Parent.Location.X, Parent.Location.Y, Width, 22).IntersectsWith(new Rectangle(MousePosition.X, MousePosition.Y, 1, 1)))
{
Capture = false;
Message M = Message.Create(Parent.Handle, 161, new IntPtr(2), IntPtr.Zero);
DefWndProc(ref M);
}
base.OnMouseDown(e);
}
protected override void OnPaintBackground(PaintEventArgs pevent) { }
protected override void OnPaint(PaintEventArgs e)
{
var B = new Bitmap(Width, Height);
using (var G = Graphics.FromImage(B))
{
G.DrawPath(new Pen(fillheaderColor.Color), RoundedRectangle.Create(0, 0, Width, Height, 4));
G.FillPath(fillheaderColor, RoundedRectangle.Create(0, 0, Width, Height, 4));
G.DrawString(Text, Font, new SolidBrush(Color.FromArgb(66, 66, 66)), new Point(5, 5));
G.DrawPath(new Pen(fillbodyColor.Color), RoundedRectangle.Create(6, 22, Width - 13, Height - 28, 4));
G.FillPath(fillbodyColor, RoundedRectangle.Create(6, 22, Width - 13, Height - 28, 4));
G.DrawPath(new Pen(Color.LightGray), RoundedRectangle.Create(0, 0, Width - 1, Height - 1, 4));
G.FillRectangle(new SolidBrush(Color.Fuchsia), new Rectangle(0, 0, 2, 2));
G.FillRectangle(new SolidBrush(Color.Fuchsia), new Rectangle(Width - 2, 0, 2, 2));
G.FillRectangle(new SolidBrush(Color.Fuchsia), new Rectangle(Width - 2, Height - 2, 2, 2));
G.FillRectangle(new SolidBrush(Color.Fuchsia), new Rectangle(0, Height - 2, 2, 2));
B.SetPixel(1, 1, fillheaderColor.Color);
B.SetPixel(Width - 2, 1, fillheaderColor.Color);
B.SetPixel(Width - 2, Height - 2, fillheaderColor.Color);
B.SetPixel(1, Height - 2, fillheaderColor.Color);
e.Graphics.DrawImage(B, 0, 0);
}
B.Dispose();
}
}
internal class FoxButton : Control
{
private Graphics G;
private bool isMouseDown;
private Pen borderColor;
private SolidBrush textColor;
private SolidBrush fillColor;
private SolidBrush downColor;
private StringFormat stringformat;
private Font textFont;
public FoxButton()
{
borderColor = FoxSettings.BorderColor;
textColor = FoxSettings.TextColor;
fillColor = FoxSettings.UpColor;
downColor = FoxSettings.DownColor;
stringformat = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
textFont = FoxSettings.TextFont;
//Set defaults
Font = FoxSettings.TextFont;
ForeColor = textColor.Color;
}
protected override void OnMouseDown(MouseEventArgs e)
{
isMouseDown = true;
Invalidate();
}
protected override void OnMouseUp(MouseEventArgs e)
{
isMouseDown = false;
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
G = e.Graphics;
G.Clear(BackColor);
G.SmoothingMode = SmoothingMode.HighQuality;
SolidBrush currentBrush;
if (isMouseDown)
currentBrush = downColor;
else
currentBrush = fillColor;
LinearGradientBrush linGrBrush = GraphicsHelper.CreateGradient(Width, Height, currentBrush);
G.DrawPath(new Pen(currentBrush), RoundedRectangle.Create(0, 0, Width, Height, 4));
G.FillPath(linGrBrush, RoundedRectangle.Create(0, 0, Width, Height, 4));
G.DrawString(Text, textFont, textColor, new Point(Width / 2, Height / 2), stringformat);
}
}
internal class FoxSystemButton : Control
{
private Graphics G;
private bool isMouseDown;
private Pen borderColor;
private SolidBrush textColor;
private SolidBrush fillColor;
private SolidBrush downColor;
public SolidBrush upColor;
private StringFormat stringformat;
private Font textFont;
public enum BType
{
Close,
Minimize
}
public BType ButtonType { get; set; }
public FoxSystemButton()
{
borderColor = FoxSettings.BorderColor;
textColor = FoxSettings.TextColor;
fillColor = FoxSettings.FillheaderColor;
downColor = FoxSettings.DownColor;
upColor = FoxSettings.UpColor;
stringformat = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
textFont = FoxSettings.TextFont;
//Set defaults
Font = FoxSettings.TextFont;
ForeColor = textColor.Color;
ButtonType = BType.Close;
Size = new Size(14, 14);
}
protected override void OnMouseDown(MouseEventArgs e)
{
isMouseDown = true;
Invalidate();
}
protected override void OnMouseUp(MouseEventArgs e)
{
isMouseDown = false;
Invalidate();
var form = FindForm();
if (this.ClientRectangle.Contains(e.Location))
{
if (ButtonType == BType.Close)
form.Close();
else if (ButtonType == BType.Minimize)
form.WindowState = FormWindowState.Minimized;
}
}
protected override void OnPaint(PaintEventArgs e)
{
G = e.Graphics;
G.Clear(BackColor);
G.SmoothingMode = SmoothingMode.HighQuality;
SolidBrush currentBrush;
if (isMouseDown)
currentBrush = downColor;
else
currentBrush = upColor;
G.DrawRectangle(new Pen(fillColor.Color), new Rectangle(0, 0, 14, 14));
G.FillRectangle(fillColor, new Rectangle(0, 0, 14, 14));
if (ButtonType == BType.Close)
{
G.DrawLine(new Pen(currentBrush, 1.6f), 2, 2, 10, 10);
G.DrawLine(new Pen(currentBrush, 1.6f), 10, 2, 2, 10);
}
else if (ButtonType == BType.Minimize)
{
G.DrawLine(new Pen(currentBrush, 2f), 2, 10, 10, 10);
}
}
public static void DrawRoundedRectangle(Graphics g, Rectangle r, int d, Pen p)
{
System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
gp.AddArc(r.X, r.Y, d, d, 180, 90);
gp.AddArc(r.X + r.Width - d, r.Y, d, d, 270, 90);
gp.AddArc(r.X + r.Width - d, r.Y + r.Height - d, d, d, 0, 90);
gp.AddArc(r.X, r.Y + r.Height - d, d, d, 90, 90);
gp.AddLine(r.X, r.Y + r.Height - d, r.X, r.Y + d / 2);
g.DrawPath(p, gp);
}
}
internal class FoxProgressBar : Control
{
///
/// Value in percentage.
///
public float Value { get { return _value; } set { _value = value; Invalidate(); } }
private float _value;
///
/// Sets or gets the visibility setting for the percentage value.
///
public bool ShowPercentage { get; set; }
private Graphics G;
private Pen borderColor;
private SolidBrush textColor;
private SolidBrush fillColor;
private SolidBrush bodyColor;
private SolidBrush downColor;
private SolidBrush upColor;
private StringFormat stringformat;
private Font textFont;
public FoxProgressBar()
{
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
borderColor = FoxSettings.BorderColor;
textColor = FoxSettings.TextColor;
fillColor = FoxSettings.FillheaderColor;
bodyColor = FoxSettings.FillbodyColor;
downColor = FoxSettings.DownColor;
upColor = FoxSettings.UpColor;
stringformat = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
textFont = FoxSettings.TextFont;
ShowPercentage = true;
//Set defaults
Font = FoxSettings.TextFont;
ForeColor = textColor.Color;
}
protected override void OnPaint(PaintEventArgs e)
{
G = e.Graphics;
G.Clear(bodyColor.Color);
G.SmoothingMode = SmoothingMode.HighQuality;
float percent = ((float)Width / 100) * Value;
LinearGradientBrush linGrBrush = GraphicsHelper.CreateGradient(Width, Height, upColor);
G.FillPath(fillColor, RoundedRectangle.Create(0, 0, Width - 1, Height - 1, 4));
if ((int)percent <= 0)
G.FillPath(fillColor, RoundedRectangle.Create(0, 1, (int)percent, Height - 2, 4));
else
G.FillPath(linGrBrush, RoundedRectangle.Create(0, 1, (int)percent, Height - 2, 4));
G.DrawPath(new Pen(Color.LightGray), RoundedRectangle.Create(0, 0, Width - 1, Height - 1, 4));
var myColor = Value > 50 ? textColor.Color : Color.FromArgb(textColor.Color.ToArgb() ^ 0xffffff);
if (ShowPercentage)
G.DrawString(string.Format("{0}%", Value), textFont, new SolidBrush(myColor), new Point((Width + 2) / 2, (Height + 2) / 2), stringformat);
}
}
internal class FoxTabControl : TabControl
{
private Pen borderColor;
private SolidBrush textColor;
private SolidBrush fillColor;
private SolidBrush downColor;
private SolidBrush upColor;
private SolidBrush fillbodyColor;
private Font textFont;
public FoxTabControl()
{
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);
DoubleBuffered = true;
SizeMode = TabSizeMode.Fixed;
this.TabItemWidth = 120;
this.TabItemHeight = 30;
this.Alignment = TabAlignment.Left;
ItemSize = new Size(TabItemHeight, TabItemWidth);
borderColor = FoxSettings.BorderColor;
textColor = FoxSettings.TextColor;
fillColor = FoxSettings.FillheaderColor;
downColor = FoxSettings.DownColor;
upColor = FoxSettings.UpColor;
fillbodyColor = FoxSettings.FillbodyColor;
textFont = FoxSettings.TextFont;
//Set defaults
Font = FoxSettings.TextFont;
ForeColor = textColor.Color;
}
protected override void OnPaint(PaintEventArgs e)
{
Bitmap B = new Bitmap(Width, Height);
if (Alignment == TabAlignment.Top)
DrawTopTabControl(Graphics.FromImage(B));
else if (Alignment == TabAlignment.Right)
DrawRightTabControl(Graphics.FromImage(B));
else if (Alignment == TabAlignment.Bottom)
DrawBottomTabControl(Graphics.FromImage(B));
else if (Alignment == TabAlignment.Left)
DrawLeftTabControl(Graphics.FromImage(B));
e.Graphics.DrawImage((Image)B.Clone(), 0, 4);
B.Dispose();
}
private void DrawTopTabControl(Graphics G)
{
G.Clear(fillbodyColor.Color);
for (int i = 0; i <= TabCount - 1; i++)
{
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(textColor, new Rectangle(new Point(x2.Location.X, x2.Location.Y), new Size(GetTabRect(i).Size.Width, GetTabRect(i).Size.Height)));
if (i == SelectedIndex)
{
G.FillPath(upColor, RoundedRectangle.Create(new Rectangle(new Point(x2.Location.X, GetTabRect(i).Size.Height - 5), new Size(GetTabRect(i).Size.Width, 5)), 2));
G.DrawPath(new Pen(upColor.Color), RoundedRectangle.Create(new Rectangle(new Point(x2.Location.X, GetTabRect(i).Size.Height - 5), new Size(GetTabRect(i).Size.Width, 3)), 2));
}
G.DrawString(TabPages[i].Text, Font, FoxSettings.TextColorDark, new Rectangle(x2.Location.X, x2.Location.Y, x2.Width, x2.Height), new StringFormat
{
LineAlignment = StringAlignment.Center,
Alignment = StringAlignment.Center
});
}
G.Dispose();
}
private void DrawRightTabControl(Graphics G)
{
G.Clear(fillbodyColor.Color);
for (int i = 0; i <= TabCount - 1; i++)
{
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(textColor, new Rectangle(new Point(x2.Location.X, x2.Location.Y), new Size(GetTabRect(i).Size.Width, GetTabRect(i).Size.Height)));
if (i == SelectedIndex)
{
G.FillPath(upColor, RoundedRectangle.Create(new Rectangle(new Point(x2.Location.X, x2.Location.Y), new Size(5, GetTabRect(i).Size.Height)), 2));
G.DrawPath(new Pen(upColor.Color), RoundedRectangle.Create(new Rectangle(new Point(x2.Location.X, x2.Location.Y), new Size(3, GetTabRect(i).Size.Height)), 2));
}
G.DrawString(TabPages[i].Text, Font, new SolidBrush(Color.FromArgb(66, 66, 66)), new Rectangle(x2.Location.X + 10, x2.Location.Y, x2.Width, x2.Height), new StringFormat
{
LineAlignment = StringAlignment.Center,
Alignment = StringAlignment.Near
});
}
G.Dispose();
}
private void DrawBottomTabControl(Graphics G)
{
G.Clear(fillbodyColor.Color);
for (int i = 0; i <= TabCount - 1; i++)
{
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(textColor, new Rectangle(new Point(x2.Location.X, x2.Location.Y), new Size(GetTabRect(i).Size.Width, GetTabRect(i).Size.Height)));
if (i == SelectedIndex)
{
G.FillPath(upColor, RoundedRectangle.Create(new Rectangle(new Point(x2.Location.X, x2.Location.Y - 5), new Size(GetTabRect(i).Size.Width, 5)), 2));
G.DrawPath(new Pen(upColor.Color), RoundedRectangle.Create(new Rectangle(new Point(x2.Location.X, x2.Location.Y - 5), new Size(GetTabRect(i).Size.Width, 3)), 2));
}
G.DrawString(TabPages[i].Text, Font, new SolidBrush(Color.FromArgb(66, 66, 66)), new Rectangle(x2.Location.X, x2.Location.Y, x2.Width, x2.Height), new StringFormat
{
LineAlignment = StringAlignment.Center,
Alignment = StringAlignment.Center
});
}
G.Dispose();
}
private void DrawLeftTabControl(Graphics G)
{
G.Clear(fillbodyColor.Color);
for (int i = 0; i <= TabCount - 1; i++)
{
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(textColor, new Rectangle(new Point(x2.Location.X, x2.Location.Y), new Size(GetTabRect(i).Size.Width, GetTabRect(i).Size.Height)));
if (i == SelectedIndex)
{
G.FillPath(upColor, RoundedRectangle.Create(new Rectangle(new Point(GetTabRect(i).Size.Width - 5, x2.Location.Y), new Size(5, GetTabRect(i).Size.Height)), 2));
G.DrawPath(new Pen(upColor.Color), RoundedRectangle.Create(new Rectangle(new Point(GetTabRect(i).Size.Width - 5, x2.Location.Y), new Size(3, GetTabRect(i).Size.Height)), 2));
}
G.DrawString(TabPages[i].Text, Font, new SolidBrush(Color.FromArgb(66, 66, 66)), new Rectangle(x2.Location.X, x2.Location.Y, x2.Width - 20, x2.Height), new StringFormat
{
LineAlignment = StringAlignment.Center,
Alignment = StringAlignment.Far
});
}
G.Dispose();
}
private int tabItemWidth;
public int TabItemWidth { get { return tabItemWidth; } set { tabItemWidth = value; RefreshItemSize(); } }
private int tabItemHeight;
public int TabItemHeight { get { return tabItemHeight; } set { tabItemHeight = value; RefreshItemSize(); } }
public void RefreshItemSize()
{
if (Alignment == TabAlignment.Top || Alignment == TabAlignment.Bottom)
ItemSize = new Size(TabItemWidth, TabItemHeight);
else if (Alignment == TabAlignment.Left || Alignment == TabAlignment.Right)
ItemSize = new Size(TabItemHeight, TabItemWidth);
Invalidate();
}
public override Color BackColor
{
get
{
return fillbodyColor.Color;
}
set
{
base.BackColor = value;
}
}
public TabAlignment TabItemAlignment
{
get
{
return base.Alignment;
}
set
{
base.Alignment = value;
RefreshItemSize();
}
}
protected override void OnControlAdded(ControlEventArgs e)
{
e.Control.BackColor = fillbodyColor.Color;
e.Control.Invalidate();
}
}
internal class FoxCheckBox : Control
{
public bool Checked { get; set; }
public CheckStyleType CheckStyle { get; set; }
private Graphics G;
private Pen borderColor;
private SolidBrush textColor;
private SolidBrush fillColor;
private SolidBrush downColor;
private SolidBrush upColor;
private StringFormat stringformat;
private Font textFont;
public FoxCheckBox()
{
borderColor = new Pen(Color.LightGray);
textColor = FoxSettings.TextColorDark;
fillColor = FoxSettings.FillheaderColor;
downColor = FoxSettings.DownColor;
upColor = FoxSettings.UpColor;
stringformat = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
textFont = FoxSettings.TextFont;
//Set defaults
Font = FoxSettings.TextFont;
ForeColor = textColor.Color;
Checked = true;
CheckStyle = CheckStyleType.Square;
}
protected override void OnPaint(PaintEventArgs e)
{
G = e.Graphics;
switch (CheckStyle)
{
case CheckStyleType.Square:
G.DrawRectangle(borderColor, new Rectangle(0, 0, 12, 12));
G.DrawString(Text, textFont, textColor, 14, 0);
if (Checked)
G.FillRectangle(GraphicsHelper.CreateGradient(2, 9, upColor), new Rectangle(2, 2, 9, 9));
break;
case CheckStyleType.Round:
G.DrawEllipse(borderColor, new Rectangle(0, 0, 13, 13));
G.DrawString(Text, textFont, textColor, 14, 0);
if (Checked)
G.FillEllipse(GraphicsHelper.CreateGradient(2, 9, upColor), new Rectangle(2, 2, 9, 9));
break;
case CheckStyleType.Checkmark:
G.DrawRectangle(borderColor, new Rectangle(0, 0, 12, 12));
G.DrawString(Text, textFont, textColor, 14, 0);
if (Checked)
{
G.DrawString("\u221A", new Font("serif", 6, FontStyle.Bold), upColor, 3, 3);
//G.DrawLine(new Pen(downColor.Color, 2), 3, 5, 7, 9);
//G.DrawLine(new Pen(downColor.Color, 2), 6, 9, 9, 3);
}
break;
default:
break;
}
}
protected override void OnMouseClick(MouseEventArgs e)
{
Checked = !Checked;
Invalidate();
}
public enum CheckStyleType
{
Square = 0,
Round = 1,
Checkmark = 2
}
}
internal class FoxChartControl : Control
{
private Pen borderColor;
private SolidBrush textColor;
private SolidBrush fillheaderColor;
private SolidBrush fillbodyColor;
private Color colorStripes;
private Color colorValues;
private Color colorText;
public float[] Values { get; set; }
public float? ValueMin { get; set; }
public float? ValueMax { get; set; }
public float ValueStripes { get; set; }
public float SizeStripes { get; set; }
public float SizeValues { get; set; }
public Font FontText { get; set; }
public FoxChartControl()
{
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true);
borderColor = FoxSettings.BorderColor;
textColor = FoxSettings.TextColor;
fillheaderColor = FoxSettings.FillheaderColor;
fillbodyColor = FoxSettings.FillbodyColor;
//Set defaults
Font = FoxSettings.TextFont;
ForeColor = textColor.Color;
BackColor = fillbodyColor.Color;
Values = new float[] { };
ValueMax = null;
ValueMin = null;
ValueStripes = 10;
SizeStripes = 1;
SizeValues = 4;
colorStripes = Color.LightGray;
colorValues = FoxSettings.UpColor.Color;
colorText = Color.Black;
FontText = FoxSettings.TextFont;
}
protected override void OnPaint(PaintEventArgs e)
{
var G = e.Graphics;
float max = ValueMax ?? (Values.Count() > 0 ? Values.Max() : 0);
float min = ValueMin ?? (Values.Count() > 0 ? Values.Min() : 0);
float averagegeCount = (max - min) / ValueStripes;
float currentCount = max;
G.SmoothingMode = SmoothingMode.HighQuality;
float startWidthPosition = ValueMax == null
? GraphicsHelper.GetTextWidthInPixels(Values.Select(a => a.ToString()).OrderByDescending(a => a.Length).FirstOrDefault(), FontText)
: GraphicsHelper.GetTextWidthInPixels(ValueMax.ToString(), FontText);
float chartHeight = Height - 17;
float itemHeight = 10;
G.FillPath(fillheaderColor, RoundedRectangle.Create(0, 0, Width - 1, Height - 1, 4));
for (int i = 0; i <= ValueStripes; i++)
{
G.DrawLine(new Pen(ColorStripes, SizeStripes), startWidthPosition, itemHeight, Width, itemHeight);
G.DrawString((Math.Floor(currentCount)).ToString(), FontText, new SolidBrush(ColorText), 0, itemHeight - 7);
itemHeight += chartHeight / ValueStripes;
currentCount -= averagegeCount;
}
float lastItemHeight = (chartHeight - (chartHeight / (max - min) * (Values.FirstOrDefault() - min))) + 10;
float lastItemWidth = startWidthPosition;
float itemWidth = startWidthPosition;
foreach (var value in Values)
{
var valueMin = value - min;
var item = chartHeight - (chartHeight / (max - min) * valueMin);
item = item == chartHeight ? chartHeight + 10 : item + 10;
var currentBrush = FoxSettings.UpColor;
G.DrawLine(new Pen(currentBrush.Color, SizeValues), lastItemWidth, lastItemHeight, itemWidth, item);
G.FillEllipse(currentBrush, itemWidth - (SizeValues / 2), item - (SizeValues / 2), SizeValues, SizeValues);
lastItemHeight = item;
lastItemWidth = itemWidth;
itemWidth += Width / Values.Count();
}
}
public Color ColorStripes
{
get
{
return this.colorStripes;
}
set
{
this.colorStripes = value;
}
}
public Color ColorValues
{
get
{
return this.colorValues;
}
set
{
this.colorValues = value;
}
}
public Color ColorText
{
get
{
return this.colorText;
}
set
{
this.colorText = value;
}
}
}
internal class FoxLabel : Control
{
private SolidBrush textColor;
private Font textFont;
public FoxLabel()
{
textColor = FoxSettings.TextColorDark;
textFont = FoxSettings.TextFont;
//Set defaults
Font = FoxSettings.TextFont;
ForeColor = textColor.Color;
}
protected override void OnPaint(PaintEventArgs e)
{
var G = e.Graphics;
G.DrawString(Text, textFont, textColor, 0, 0);
}
}
public abstract class RoundedRectangle
{
public enum RectangleCorners
{
None = 0, TopLeft = 1, TopRight = 2, BottomLeft = 4, BottomRight = 8,
All = TopLeft | TopRight | BottomLeft | BottomRight
}
public static GraphicsPath Create(int x, int y, int width, int height,
int radius, RectangleCorners corners)
{
int xw = x + width;
int yh = y + height;
int xwr = xw - radius;
int yhr = yh - radius;
int xr = x + radius;
int yr = y + radius;
int r2 = radius * 2;
int xwr2 = xw - r2 - 1;
int yhr2 = yh - r2 - 1;
GraphicsPath p = new GraphicsPath();
p.StartFigure();
//Top Left Corner
if ((RectangleCorners.TopLeft & corners) == RectangleCorners.TopLeft)
{
p.AddArc(x, y, r2, r2, 180, 90);
}
else
{
p.AddLine(x, yr, x, y);
p.AddLine(x, y, xr, y);
}
//Top Edge
p.AddLine(xr, y, xwr, y);
//Top Right Corner
if ((RectangleCorners.TopRight & corners) == RectangleCorners.TopRight)
{
p.AddArc(xwr2, y, r2, r2, 270, 90);
}
else
{
p.AddLine(xwr, y, xw, y);
p.AddLine(xw, y, xw, yr);
}
//Right Edge
p.AddLine(xw, yr, xw, yhr);
//Bottom Right Corner
if ((RectangleCorners.BottomRight & corners) == RectangleCorners.BottomRight)
{
p.AddArc(xwr2, yhr2, r2, r2, 0, 90);
}
else
{
p.AddLine(xw, yhr, xw, yh);
p.AddLine(xw, yh, xwr, yh);
}
//Bottom Edge
p.AddLine(xwr, yh, xr, yh);
//Bottom Left Corner
if ((RectangleCorners.BottomLeft & corners) == RectangleCorners.BottomLeft)
{
p.AddArc(x, yhr2, r2, r2, 90, 90);
}
else
{
p.AddLine(xr, yh, x, yh);
p.AddLine(x, yh, x, yhr);
}
//Left Edge
p.AddLine(x, yhr, x, yr);
p.CloseFigure();
return p;
}
public static GraphicsPath Create(Rectangle rect, int radius, RectangleCorners c)
{ return Create(rect.X, rect.Y, rect.Width, rect.Height, radius, c); }
public static GraphicsPath Create(int x, int y, int width, int height, int radius)
{ return Create(x, y, width, height, radius, RectangleCorners.All); }
public static GraphicsPath Create(Rectangle rect, int radius)
{ return Create(rect.X, rect.Y, rect.Width, rect.Height, radius); }
public static GraphicsPath Create(int x, int y, int width, int height)
{ return Create(x, y, width, height, 5); }
public static GraphicsPath Create(Rectangle rect)
{ return Create(rect.X, rect.Y, rect.Width, rect.Height); }
}
public static class GraphicsHelper
{
public static float GetTextWidthInPixels(string text, Font font)
{
var size = TextRenderer.MeasureText(text, font);
return size.Width;
}
public static LinearGradientBrush CreateGradient(float width, float height, SolidBrush brush)
{
var linGrBrush = new LinearGradientBrush(
new RectangleF(width, height, width, height),
Color.FromArgb(255, brush.Color.R - 33, brush.Color.G - 33, brush.Color.B - 33),
brush.Color, 90F);
float[] relativeIntensities = { 0.0f, 0.5f, 1.0f };
float[] relativePositions = { 0.0f, 0.2f, 1.0f };
Blend blend = new Blend();
blend.Factors = relativeIntensities;
blend.Positions = relativePositions;
linGrBrush.Blend = blend;
return linGrBrush;
}
}
// Created by DoggyCollin