SDK/MrAG/Gui/Slider.cs

100 lines
3.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace MrAG {
public partial class Gui {
public class Slider : Base {
public Color BorderColor = Color.Gray;
public Color BackColor = Color.DarkGray;
public Color SliderColor = Color.Blue;
public Color LineColor = Color.Red;
public int BorderSize;
public int Padding = 4;
public int LineSize = 2;
public int SliderSize = 6;
public Action OnValueChange;
private int _value;
public int Value{
get {
return this._value;
}
set{
int oldval = this._value;
if (value > this.MaxValue)
this._value = this.MaxValue;
else if (value < 0)
this._value = 0;
else
this._value = value;
if (oldval != this._value && this.OnValueChange != null)
this.OnValueChange.Invoke();
}
}
private int _maxvalue = 100;
public int MaxValue {
get {
return this._maxvalue;
}
set{
if (value < 0)
return;
this._maxvalue = value;
if (this._value > this._maxvalue)
this._value = this._maxvalue;
}
}
public override void Update() {
if (!this.IsActive() || !this.HasFocus)
return;
int x = MrAG.Gui.CurMouseState.X - (this.X + this.BorderSize + this.Padding - (this.SliderSize / 2));
this.Value = (int)Math.Round((((double)x / (double)(this.Width - (this.BorderSize * 2) - (this.Padding * 2))) * this.MaxValue));
if (this.Value < 0)
this.Value = 0;
if (this.Value > this.MaxValue)
this.Value = this.MaxValue;
base.Update();
}
public override void DoScrollUp() {
this.Value++;
base.DoScrollUp();
}
public override void DoScrollDown() {
this.Value--;
base.DoScrollDown();
}
public override void Draw() {
MrAG.Draw.Box(this.X + this.BorderSize, this.Y + this.BorderSize, this.Width - (this.BorderSize * 2), this.Height - (this.BorderSize * 2), this.BackColor);
MrAG.Draw.OutlinedBox(this.X, this.Y, this.Width, this.Height, this.BorderSize, this.BorderColor);
MrAG.Draw.Box(this.X + this.BorderSize + this.Padding, this.Y + (this.Height / 2) - (this.LineSize / 2), this.Width - (this.BorderSize * 2) - (this.Padding * 2), this.LineSize, this.LineColor);
MrAG.Draw.Box(this.X + this.BorderSize + this.Padding + (int)(((double)this.Value / (double)this.MaxValue) * (this.Width - (this.BorderSize * 2) - (this.Padding * 2))) - (this.SliderSize / 2), this.Y + (this.Height / 2) - (this.SliderSize / 2), this.SliderSize, this.SliderSize, this.SliderColor);
base.Draw();
}
}
}
}