177 lines
5.0 KiB
C#
177 lines
5.0 KiB
C#
using System.ComponentModel;
|
|
|
|
namespace AudioWallpaper {
|
|
public partial class PanelEx : Control {
|
|
private float _iBorderThickness = 1f;
|
|
private float _iOpacity = 1f;
|
|
private Brush _brushBg = null;
|
|
private Pen _penFg = null;
|
|
|
|
public PanelEx() {
|
|
this.SetStyle(ControlStyles.SupportsTransparentBackColor |
|
|
ControlStyles.Opaque, true);
|
|
this.BackColor = Color.Transparent;
|
|
BackgroundBrush = Brushes.Transparent;
|
|
ForegroundPen = Pens.Black;
|
|
}
|
|
|
|
#region Propertys
|
|
#region HideParent
|
|
[Browsable(false)]
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
public override string Text {
|
|
get { return base.Text; }
|
|
set { base.Text = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
public override Image BackgroundImage {
|
|
get { return base.BackgroundImage; }
|
|
set { base.BackgroundImage = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
public override ImageLayout BackgroundImageLayout {
|
|
get {
|
|
return base.BackgroundImageLayout;
|
|
}
|
|
set {
|
|
base.BackgroundImageLayout = value;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
public override Color BackColor {
|
|
get {
|
|
return base.BackColor;
|
|
}
|
|
set {
|
|
base.BackColor = value;
|
|
ResetBgBrush();
|
|
}
|
|
}
|
|
|
|
//[EditorAttribute(typeof(BrushTypeEditor), typeof(System.Drawing.Design.UITypeEditor))]
|
|
//public double Background
|
|
//{
|
|
// get;
|
|
// set;
|
|
//}
|
|
|
|
public override Color ForeColor {
|
|
get {
|
|
return base.ForeColor;
|
|
}
|
|
set {
|
|
base.ForeColor = value;
|
|
ResetFgPen();
|
|
}
|
|
}
|
|
|
|
public float BorderThickness {
|
|
get { return _iBorderThickness; }
|
|
set {
|
|
if (value < 0) {
|
|
throw new Exception("Out off range");
|
|
}
|
|
_iBorderThickness = value;
|
|
ResetFgPen();
|
|
ResetDrawRect();
|
|
}
|
|
}
|
|
|
|
public virtual float RotateAngle {
|
|
get;
|
|
set;
|
|
}
|
|
|
|
|
|
public float Opacity {
|
|
get { return _iOpacity; }
|
|
set {
|
|
if (value > 1 || value < 0) {
|
|
throw new Exception("Out of range,the Value be in [0,1]");
|
|
} else {
|
|
_iOpacity = value;
|
|
ResetBrushes();
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override CreateParams CreateParams {
|
|
get {
|
|
CreateParams cp = base.CreateParams;
|
|
cp.ExStyle = 0x20;
|
|
return cp;
|
|
}
|
|
}
|
|
|
|
protected virtual Brush BackgroundBrush {
|
|
get { return _brushBg; }
|
|
set { _brushBg = value; }
|
|
}
|
|
|
|
protected virtual Pen ForegroundPen {
|
|
get { return _penFg; }
|
|
set { _penFg = value; }
|
|
}
|
|
|
|
protected virtual RectangleF DrawRect {
|
|
get;
|
|
set;
|
|
}
|
|
#endregion
|
|
|
|
#region Methods
|
|
protected override void OnPaint(PaintEventArgs e) {
|
|
base.OnPaint(e);
|
|
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
|
|
}
|
|
|
|
protected override void OnSizeChanged(EventArgs e) {
|
|
base.OnSizeChanged(e);
|
|
ResetDrawRect();
|
|
}
|
|
protected override void OnPaddingChanged(EventArgs e) {
|
|
base.OnPaddingChanged(e);
|
|
ResetDrawRect();
|
|
}
|
|
|
|
protected void ResetBrushes() {
|
|
ResetBgBrush();
|
|
ResetFgPen();
|
|
}
|
|
|
|
protected void ResetBgBrush() {
|
|
BackgroundBrush = new SolidBrush(GetOpacityColor(BackColor, Opacity));
|
|
}
|
|
|
|
protected void ResetFgPen() {
|
|
ForegroundPen = new Pen(GetOpacityColor(ForeColor, Opacity), BorderThickness);
|
|
}
|
|
|
|
protected Color GetOpacityColor(Color baseColor, float op) {
|
|
return Color.FromArgb(Convert.ToInt32(op * baseColor.A), baseColor);
|
|
}
|
|
|
|
private void ResetDrawRect() {
|
|
float dbwidth = 2 * BorderThickness;
|
|
float halfwidth = BorderThickness / 2;
|
|
int paddingWhith = Padding.Left + Padding.Right;
|
|
int paddingHeight = Padding.Top + Padding.Bottom;
|
|
if (dbwidth > Width - paddingWhith || dbwidth > Height - paddingHeight) {
|
|
DrawRect = this.Bounds;
|
|
} else {
|
|
DrawRect = new RectangleF(Padding.Left + halfwidth,
|
|
Padding.Top + halfwidth,
|
|
Width - BorderThickness - paddingWhith,
|
|
Height - BorderThickness - paddingHeight);
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
}
|