mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 04:18:43 +00:00
151 lines
4.7 KiB
C#
151 lines
4.7 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
|
|
|
|
}
|
|
|
|
}
|