using System; using System.Drawing; namespace ClassicalSharp { /// Represents an individual 2D gui component. public abstract class Widget : GuiElement { public Widget( Game game ) : base( game ) { HorizontalAnchor = Anchor.LeftOrTop; VerticalAnchor = Anchor.LeftOrTop; } /// Whether this widget is currently being moused over. public bool Active; /// Whether this widget is prevented from being interacted with. public bool Disabled; /// Invoked when this widget is clicked on. Can be left null. public Action OnClick; /// Horizontal coordinate of top left corner in window space. public int X; /// Vertical coordinate of top left corner in window space. public int Y; /// Horizontal length of widget's bounds in window space. public int Width; /// Vertical length of widget's bounds in window space. public int Height; /// Specifies the horizontal reference point for when the widget is resized. public Anchor HorizontalAnchor; /// Specifies the vertical reference point for when the widget is resized. public Anchor VerticalAnchor; /// Width and height of widget in window space. public Size Size { get { return new Size( Width, Height ); } } /// Coordinate of top left corner of widget's bounds in window space. public Point TopLeft { get { return new Point( X, Y ); } } /// Coordinate of bottom right corner of widget's bounds in window space. public Point BottomRight { get { return new Point( X + Width, Y + Height ); } } /// Specifies the boundaries of the widget in window space. public Rectangle Bounds { get { return new Rectangle( X, Y, Width, Height ); } } /// Moves the widget to the specified window space coordinates. public virtual void MoveTo( int newX, int newY ) { X = newX; Y = newY; } public override void OnResize( int oldWidth, int oldHeight, int width, int height ) { int deltaX = CalcDelta( width, oldWidth, HorizontalAnchor ); int deltaY = CalcDelta( height, oldHeight, VerticalAnchor ); MoveTo( X + deltaX, Y + deltaY ); } } }