Cosmos/Users/Orvid/TestBed/ExitButton.cs
kudzu_cp a58ad95c10
2014-07-14 15:56:02 +00:00

151 lines
4.9 KiB
C#

using System;
using Orvid.Graphics;
using Forms = System.Windows.Forms;
namespace TestBed
{
internal class ExitButton
{
#region Events
public event ObjectClick Click;
public event ObjectClick MouseEnter;
public event ObjectClick MouseLeave;
public event ObjectClick MouseDown;
public event ObjectClick MouseUp;
#endregion
public int X;
public int Y;
public Vec2 Size;
private Vec2 iSize;
private Image i;
public Image parent;
public Forms.Form parForm;
public ObjectEvents evnts;
public BoundingBox bounds;
public ExitButton(Vec2 loc, Vec2 size, Image parent, Forms.Form parf)
{
if (size.X == 0 || size.Y == 0)
{
throw new Exception("No dimention of size can be zero!");
}
this.X = loc.X;
this.Y = loc.Y;
this.Size = size;
this.iSize = new Vec2(size.X - 1, size.Y - 1);
this.parent = parent;
this.parForm = parf;
this.bounds = new BoundingBox(this.X, this.X + Size.X, this.Y + Size.Y, this.Y);
Click = new ObjectClick(this.ExitButtonClicked);
MouseEnter = new ObjectClick(this.ExitButtonEnter);
MouseLeave = new ObjectClick(this.ExitButtonLeave);
MouseDown = new ObjectClick(this.ExitButtonMouseDown);
MouseUp = new ObjectClick(this.ExitButtonMouseUp);
evnts = new ObjectEvents(
new ObjectClick(Click),
new ObjectClick(MouseEnter),
new ObjectClick(MouseLeave),
new ObjectClick(MouseDown),
new ObjectClick(MouseUp),
new DrawMethod(Draw),
bounds);
i = new Image(size);
this.DrawDefault();
}
public void Draw()
{
parent.DrawImage(new Vec2(X, Y), i);
}
#region Event Methods
private void ExitButtonMouseUp(object sender, Forms.MouseEventArgs e)
{
if (bounds.IsInBounds(new Vec2(e.X, e.Y)))
{
this.DrawMouseOver();
}
else
{
this.DrawDefault();
}
}
private void ExitButtonMouseDown(object sender, Forms.MouseEventArgs e)
{
this.DrawMouseDown();
}
private void ExitButtonClicked(object sender, Forms.MouseEventArgs e)
{
parForm.Close();
}
private void ExitButtonEnter(object sender, Forms.MouseEventArgs e)
{
this.DrawMouseOver();
}
private void ExitButtonLeave(object sender, Forms.MouseEventArgs e)
{
this.DrawDefault();
}
#endregion
#region Draw Methods
public Pixel OverOutline = Colors.Green;
public Pixel OverFill = Colors.Beige;
public Pixel DownOutline = Colors.Green;
public Pixel DownFill = Colors.Blue;
public Pixel NormalOutline = Colors.Green;
public Pixel NormalFill = Colors.Red;
private void DrawMouseDown()
{
i.DrawRectangle(new Vec2(0, 0), new Vec2(iSize.X, Size.Y), DownFill);
i.DrawPolygonOutline(new Vec2[] {
new Vec2(0,0),
new Vec2(iSize.X,0),
new Vec2(iSize.X,iSize.Y),
new Vec2(0,iSize.Y) }, DownOutline);
i.DrawLine(new Vec2(0, 0), new Vec2(iSize.X, iSize.Y), DownOutline);
i.DrawLine(new Vec2(0, iSize.Y), new Vec2(iSize.X, 0), DownOutline);
this.Draw();
}
private void DrawMouseOver()
{
i.DrawRectangle(new Vec2(0, 0), new Vec2(iSize.X, Size.Y), OverFill);
i.DrawPolygonOutline(new Vec2[] {
new Vec2(0,0),
new Vec2(iSize.X,0),
new Vec2(iSize.X,iSize.Y),
new Vec2(0,iSize.Y) }, OverOutline);
i.DrawLine(new Vec2(0, 0), new Vec2(iSize.X, iSize.Y), OverOutline);
i.DrawLine(new Vec2(0, iSize.Y), new Vec2(iSize.X, 0), OverOutline);
this.Draw();
}
private void DrawDefault()
{
i.DrawRectangle(new Vec2(0, 0), new Vec2(iSize.X, iSize.Y), NormalFill);
i.DrawPolygonOutline(new Vec2[] {
new Vec2(0,0),
new Vec2(iSize.X,0),
new Vec2(iSize.X,iSize.Y),
new Vec2(0,iSize.Y) }, NormalOutline);
i.DrawLine(new Vec2(0, 0), new Vec2(iSize.X, iSize.Y), NormalOutline);
i.DrawLine(new Vec2(0, iSize.Y), new Vec2(iSize.X, 0), NormalOutline);
this.Draw();
}
#endregion
}
}