mirror of
https://github.com/claunia/cuetools.net.git
synced 2025-12-16 18:14:25 +00:00
162 lines
5.5 KiB
C#
162 lines
5.5 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Windows.Forms;
|
|
using System.Collections.Generic;
|
|
|
|
namespace ProgressODoom {
|
|
/// <summary></summary>
|
|
[ToolboxBitmapAttribute(typeof(ProgressODoom.MiddleGlossPainter), "Icons.MiddleGlossPainter.ico")]
|
|
public class MiddleGlossPainter : ChainedGlossPainter {
|
|
private GlossStyle style = GlossStyle.Both;
|
|
private int highAlpha = 240;
|
|
private int lowAlpha = 0;
|
|
private int fadewidth = 4;
|
|
private Brush highBrush;
|
|
private Brush lowBrush;
|
|
private Brush bothBrush;
|
|
private Rectangle box;
|
|
private Color color = Color.White;
|
|
private Color topColor;
|
|
private Color botColor;
|
|
|
|
/// <summary></summary>
|
|
[Category("Appearance"), Description("Gets or sets the style for this progress gloss"), Browsable(true)]
|
|
public GlossStyle Style {
|
|
get { return this.style; }
|
|
set {
|
|
this.style = value;
|
|
this.box = new Rectangle(0, 0, 1, 1);
|
|
FireChange();
|
|
}
|
|
}
|
|
|
|
/// <summary></summary>
|
|
[Category("Blending"), Description("Gets or sets the high alpha value"), Browsable(true)]
|
|
public int AlphaHigh {
|
|
get { return this.highAlpha; }
|
|
set {
|
|
if (value < 0 || value > 255) {
|
|
throw new ArgumentException("Alpha values must be between 0 and 255.");
|
|
}
|
|
this.highAlpha = value;
|
|
this.box = new Rectangle(0, 0, 1, 1);
|
|
FireChange();
|
|
}
|
|
}
|
|
|
|
/// <summary></summary>
|
|
[Category("Blending"), Description("Gets or sets the low alpha value"), Browsable(true)]
|
|
public int AlphaLow {
|
|
get { return this.lowAlpha; }
|
|
set {
|
|
if (value < 0 || value > 255) {
|
|
throw new ArgumentException("Alpha values must be between 0 and 255.");
|
|
}
|
|
this.lowAlpha = value;
|
|
this.box = new Rectangle(0, 0, 1, 1);
|
|
FireChange();
|
|
}
|
|
}
|
|
/// <summary></summary>
|
|
[Category("Blending"), Description("Gets or sets the number of pixels to blend over"), Browsable(true)]
|
|
public int TaperHeight {
|
|
get { return this.fadewidth; }
|
|
set {
|
|
this.fadewidth = value;
|
|
this.box = new Rectangle(0, 0, 1, 1);
|
|
FireChange();
|
|
}
|
|
}
|
|
|
|
/// <summary></summary>
|
|
[Category("Appearance"), Description("Gets or sets color to gloss"), Browsable(true)]
|
|
public Color Color {
|
|
get { return this.color; }
|
|
set {
|
|
this.color = value;
|
|
this.topColor = Color.FromArgb(highAlpha, this.color.R, this.color.G, this.color.B);
|
|
this.botColor = Color.FromArgb(lowAlpha, this.color.R, this.color.G, this.color.B);
|
|
box = new Rectangle(0, 0, 1, 1);
|
|
FireChange();
|
|
}
|
|
}
|
|
|
|
protected override void PaintThisGloss(Rectangle box, Graphics g) {
|
|
if (!this.box.Equals(box)) {
|
|
this.box = box;
|
|
ResetBrushes(box);
|
|
}
|
|
|
|
int midpoint = box.X + (int)((float)box.Height / 2f);
|
|
Rectangle topBox = new Rectangle(box.X, midpoint - fadewidth, box.Width - 1, fadewidth);
|
|
Rectangle botBox = new Rectangle(box.X, midpoint, box.Width - 1, fadewidth);
|
|
Rectangle fullBox = new Rectangle(box.X, midpoint - fadewidth, box.Width - 1, fadewidth * 2);
|
|
|
|
switch (style) {
|
|
case GlossStyle.Bottom:
|
|
g.FillRectangle(lowBrush, botBox);
|
|
//g.DrawRectangle(Pens.Fuchsia, botBox);
|
|
break;
|
|
case GlossStyle.Top:
|
|
g.FillRectangle(highBrush, topBox);
|
|
//g.DrawRectangle(Pens.Fuchsia, topBox);
|
|
break;
|
|
case GlossStyle.Both:
|
|
//g.FillRectangle(highBrush, topBox);
|
|
//g.FillRectangle(lowBrush, botBox);
|
|
g.FillRectangle(bothBrush, fullBox);
|
|
break;
|
|
}
|
|
//g.DrawRectangle(Pens.Purple, fullBox);
|
|
//g.DrawRectangle(new Pen(new SolidBrush(Color.FromArgb(64, 255, 255, 0))), topBox);
|
|
//g.DrawRectangle(new Pen(new SolidBrush(Color.FromArgb(64, 0, 255, 0))), botBox);
|
|
}
|
|
|
|
protected override void ResizeThis(Rectangle box) {
|
|
if (!this.box.Equals(box)) {
|
|
this.box = box;
|
|
ResetBrushes(box);
|
|
}
|
|
}
|
|
|
|
private void ResetBrushes(Rectangle box) {
|
|
int midpoint = box.X + (int)((float)box.Height / 2f);
|
|
Rectangle topBox = new Rectangle(box.X, midpoint - fadewidth, box.Width - 1, fadewidth);
|
|
Rectangle botBox = new Rectangle(box.X, midpoint, box.Width - 1, fadewidth);
|
|
Rectangle fullBox = new Rectangle(box.X, midpoint - fadewidth, box.Width - 1, fadewidth * 2);
|
|
|
|
//int midpoint = box.X + (int)((float)box.Height / 2f);
|
|
Point top = new Point(box.X, fullBox.Top);
|
|
Point topmid = new Point(box.X, topBox.Bottom);
|
|
Point botmid = new Point(box.X, botBox.Top);
|
|
Point bot = new Point(box.X, botBox.Bottom);
|
|
Color high = topColor;
|
|
Color low = botColor;
|
|
//Rectangle fullBox = new Rectangle(box.X, midpoint - fadewidth, box.Width - 1, fadewidth * 2);
|
|
switch (style) {
|
|
case GlossStyle.Top:
|
|
highBrush = new LinearGradientBrush(top, topmid, low, high);
|
|
break;
|
|
case GlossStyle.Bottom:
|
|
lowBrush = new LinearGradientBrush(botmid, bot, high, low);
|
|
break;
|
|
case GlossStyle.Both:
|
|
//highBrush = new LinearGradientBrush(top, topmid, low, high);
|
|
//lowBrush = new LinearGradientBrush(botmid, bot, high, low);
|
|
bothBrush = new LinearGradientBrush(fullBox, low, high, LinearGradientMode.Vertical);
|
|
//((LinearGradientBrush)bothBrush).SetSigmaBellShape(0.5f, 0.5f);
|
|
((LinearGradientBrush)bothBrush).SetBlendTriangularShape(0.5f);
|
|
break;
|
|
}
|
|
}
|
|
|
|
protected override void Dispose(bool disposing) {
|
|
base.Dispose(disposing);
|
|
if (highBrush != null) { highBrush.Dispose(); }
|
|
if (lowBrush != null) { lowBrush.Dispose(); }
|
|
if (bothBrush != null) { bothBrush.Dispose(); }
|
|
}
|
|
}
|
|
} |