mirror of
https://github.com/claunia/cuetools.net.git
synced 2025-12-16 18:14:25 +00:00
153 lines
5.2 KiB
C#
153 lines
5.2 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using System.Collections.Generic;
|
|
|
|
namespace ProgressODoom {
|
|
/// <summary></summary>
|
|
[ToolboxBitmapAttribute(typeof(ProgressODoom.MetalProgressPainter), "Icons.MetalProgressPainter.ico")]
|
|
public class MetalProgressPainter : AbstractProgressPainter, IProgressPainter, IDisposable {
|
|
private Color progColor = Color.FromArgb(201, 202, 201);
|
|
private Color bkColor = Color.FromArgb(240, 240, 240);
|
|
|
|
#region Default Colors
|
|
private Color backColor = Color.FromArgb(176, 177, 176);
|
|
private Color borderColor = Color.FromArgb(69, 68, 69);
|
|
private Color backtopColor = Color.FromArgb(160, 157, 160);
|
|
private Color barColor12 = Color.FromArgb(193, 194, 193);
|
|
private Color barColor3 = Color.FromArgb(201, 202, 201);
|
|
private Color barColor8 = Color.FromArgb(226, 226, 226);
|
|
private Color barBorderTopColor = Color.FromArgb(250, 250, 250);
|
|
private Color barBorderBottomColor = Color.FromArgb(176, 173, 176);
|
|
#endregion
|
|
|
|
#region Pens & Brushes
|
|
private Pen border;
|
|
private Pen backtop;
|
|
private Brush back;
|
|
|
|
private Pen bar12;
|
|
private Pen bar8;
|
|
|
|
private Pen barBorderTop;
|
|
private Pen barBorderBottom;
|
|
|
|
private Brush prog;
|
|
#endregion
|
|
|
|
/// <summary></summary>
|
|
public MetalProgressPainter() {
|
|
progColor = barColor3;
|
|
back = new SolidBrush(bkColor); //backColor);
|
|
|
|
border = new Pen(new SolidBrush(borderColor), 1f);
|
|
backtop = new Pen(new SolidBrush(backtopColor), 1f);
|
|
|
|
bar12 = new Pen(new SolidBrush(barColor12), 1f);
|
|
bar8 = new Pen(new SolidBrush(barColor8), 1f);
|
|
|
|
barBorderTop = new Pen(new SolidBrush(barBorderTopColor), 1f);
|
|
barBorderBottom = new Pen(new SolidBrush(barBorderBottomColor), 1f);
|
|
|
|
prog = new System.Drawing.Drawing2D.LinearGradientBrush(new Point(0, 0), new Point(0, 20), barColor12, barColor8);
|
|
}
|
|
|
|
/// <summary></summary>
|
|
[Category("Appearance"), Description("Gets or sets the base progress color"), Browsable(true)]
|
|
public Color Color {
|
|
get { return progColor; }
|
|
set {
|
|
progColor = value;
|
|
FireChange();
|
|
}
|
|
}
|
|
|
|
[Category("Appearance"), Description("Gets or sets the color that the highlights are blended with"), Browsable(true)]
|
|
public Color Highlight {
|
|
get { return backColor; }
|
|
set {
|
|
backColor = value;
|
|
FireChange();
|
|
}
|
|
}
|
|
|
|
/// <summary></summary>
|
|
/// <param name="box"></param>
|
|
/// <param name="g"></param>
|
|
protected override void PaintThisProgress(Rectangle box, Graphics g) {
|
|
try {
|
|
box.Width -= 1;
|
|
box.Height -= 1;
|
|
} catch {}
|
|
float x = box.X;
|
|
float y = box.Y;
|
|
float w = box.Right;
|
|
float h = box.Bottom;
|
|
if (w < 2) { return; }
|
|
|
|
RebuildBrushes(box.Bottom - 1);
|
|
|
|
//g.FillRectangle(prog, x + 1, y + 1, w - 2, h - 1);
|
|
//
|
|
//g.DrawRectangle(barBorderBottom, box.X, box.Y, box.Right, box.Height - 1);
|
|
//g.DrawLine(barBorderTop, box.X, box.Y, box.Width + 2, box.Y);
|
|
//g.DrawLine(barBorderTop, box.X, box.Y, box.X, box.Height + 2);
|
|
|
|
g.FillRectangle(prog, box);
|
|
|
|
g.DrawLine(barBorderTop, x, y, w, y); // top
|
|
g.DrawLine(barBorderTop, x, y, x, h); // left
|
|
g.DrawLine(barBorderBottom, x, h, w, h); // bottom
|
|
g.DrawLine(barBorderBottom, w, h, w, y); // right
|
|
|
|
//g.DrawRectangle(border, x + 2, y + 2, w - 3, h - 4);
|
|
|
|
if (gloss != null) {
|
|
gloss.PaintGloss(box, g);
|
|
}
|
|
}
|
|
|
|
/// <summary></summary>
|
|
protected override void ResizeThis(Rectangle box) {
|
|
//RebuildBrushes();
|
|
}
|
|
|
|
private void RebuildBrushes(int height) {
|
|
Color top = Cross(barColor3, progColor, barColor12);
|
|
Color bottom = Cross(barColor3, progColor, barColor8);
|
|
bar12 = new Pen(new SolidBrush(top), 1f);
|
|
bar8 = new Pen(new SolidBrush(bottom), 1f);
|
|
barBorderTop = new Pen(new SolidBrush(Cross(barColor3, progColor, barBorderTopColor)), 1f);
|
|
barBorderBottom = new Pen(new SolidBrush(Cross(barColor3, progColor, barBorderBottomColor)), 1f);
|
|
int h = height;
|
|
//if (h == 0) { h = 20; }
|
|
prog = new System.Drawing.Drawing2D.LinearGradientBrush(new Point(0, 1), new Point(0, h + 2), top, bottom);
|
|
|
|
backtop = new Pen(new SolidBrush(Cross(backColor, bkColor, backtopColor)), 1f);
|
|
back = new SolidBrush(bkColor);
|
|
}
|
|
|
|
private Color Cross(Color colorX, Color colorY, Color colorX2) {
|
|
int r = (int)(((float)colorY.R * (float)colorX2.R) / (float)colorX.R);
|
|
int g = (int)(((float)colorY.G * (float)colorX2.G) / (float)colorX.G);
|
|
int b = (int)(((float)colorY.B * (float)colorX2.B) / (float)colorX.B);
|
|
if (r > 255) { r = 255; } else if (r < 0) { r = 0; }
|
|
if (g > 255) { g = 255; } else if (g < 0) { g = 0; }
|
|
if (b > 255) { b = 255; } else if (b < 0) { b = 0; }
|
|
return Color.FromArgb(r, g, b);
|
|
}
|
|
|
|
/// <summary></summary>
|
|
protected override void DisposeThis(bool disposing) {
|
|
if (border != null) { border.Dispose(); }
|
|
if (backtop != null) { backtop.Dispose(); }
|
|
if (back != null) { back.Dispose(); }
|
|
if (bar12 != null) { bar12.Dispose(); }
|
|
if (bar8 != null) { bar8.Dispose(); }
|
|
if (barBorderTop != null) { barBorderTop.Dispose(); }
|
|
if (barBorderBottom != null) { barBorderBottom.Dispose(); }
|
|
if (prog != null) { prog.Dispose(); }
|
|
}
|
|
}
|
|
} |