Better comments for launcher widgets.

This commit is contained in:
UnknownShadow200 2016-09-12 15:44:48 +10:00
parent f6dbfc6062
commit 4c8e5078e0
7 changed files with 69 additions and 26 deletions

View File

@ -22,16 +22,16 @@ namespace ClassicalSharp.Gui {
/// <summary> Invoked when this widget is clicked on. Can be null. </summary> /// <summary> Invoked when this widget is clicked on. Can be null. </summary>
public ClickHandler OnClick; public ClickHandler OnClick;
/// <summary> Horizontal coordinate of top left corner in window space. </summary> /// <summary> Horizontal coordinate of top left corner in pixels. </summary>
public int X; public int X;
/// <summary> Vertical coordinate of top left corner in window space. </summary> /// <summary> Vertical coordinate of top left corner in pixels. </summary>
public int Y; public int Y;
/// <summary> Horizontal length of widget's bounds in window space. </summary> /// <summary> Horizontal length of widget's bounds in pixels. </summary>
public int Width; public int Width;
/// <summary> Vertical length of widget's bounds in window space. </summary> /// <summary> Vertical length of widget's bounds in pixels. </summary>
public int Height; public int Height;
/// <summary> Specifies the horizontal reference point for when the widget is resized. </summary> /// <summary> Specifies the horizontal reference point for when the widget is resized. </summary>
@ -40,25 +40,25 @@ namespace ClassicalSharp.Gui {
/// <summary> Specifies the vertical reference point for when the widget is resized. </summary> /// <summary> Specifies the vertical reference point for when the widget is resized. </summary>
public Anchor VerticalAnchor; public Anchor VerticalAnchor;
/// <summary> Horizontal offset from the reference point in window space. </summary> /// <summary> Horizontal offset from the reference point in pixels. </summary>
public int XOffset = 0; public int XOffset = 0;
/// <summary> Vertical offset from the reference point in window space. </summary> /// <summary> Vertical offset from the reference point in pixels. </summary>
public int YOffset = 0; public int YOffset = 0;
/// <summary> Width and height of widget in window space. </summary> /// <summary> Width and height of widget in pixels. </summary>
public Size Size { get { return new Size( Width, Height ); } } public Size Size { get { return new Size( Width, Height ); } }
/// <summary> Coordinate of top left corner of widget's bounds in window space. </summary> /// <summary> Coordinate of top left corner of widget's bounds in pixels. </summary>
public Point TopLeft { get { return new Point( X, Y ); } } public Point TopLeft { get { return new Point( X, Y ); } }
/// <summary> Coordinate of bottom right corner of widget's bounds in window space. </summary> /// <summary> Coordinate of bottom right corner of widget's bounds in pixels. </summary>
public Point BottomRight { get { return new Point( X + Width, Y + Height ); } } public Point BottomRight { get { return new Point( X + Width, Y + Height ); } }
/// <summary> Specifies the boundaries of the widget in window space. </summary> /// <summary> Specifies the boundaries of the widget in pixels. </summary>
public Rectangle Bounds { get { return new Rectangle( X, Y, Width, Height ); } } public Rectangle Bounds { get { return new Rectangle( X, Y, Width, Height ); } }
/// <summary> Moves the widget to the specified window space coordinates. </summary> /// <summary> Moves the widget to the specified pixel coordinates. </summary>
public virtual void MoveTo( int newX, int newY ) { public virtual void MoveTo( int newX, int newY ) {
X = newX; Y = newY; X = newX; Y = newY;
} }

View File

@ -122,7 +122,8 @@ namespace Launcher.Gui.Widgets {
public void SetDrawData( IDrawer2D drawer, Font font, Font titleFont, public void SetDrawData( IDrawer2D drawer, Font font, Font titleFont,
Anchor horAnchor, Anchor verAnchor, int x, int y ) { Anchor horAnchor, Anchor verAnchor, int x, int y ) {
CalculateOffset( x, y, horAnchor, verAnchor ); SetAnchors( horAnchor, verAnchor ).SetOffsets( x, y )
.CalculatePosition();
view.SetDrawData( drawer, font, titleFont ); view.SetDrawData( drawer, font, titleFont );
} }

View File

@ -19,7 +19,8 @@ namespace Launcher.Gui.Widgets {
} }
public void SetDrawData( IDrawer2D drawer, Anchor horAnchor, Anchor verAnchor, int x, int y ) { public void SetDrawData( IDrawer2D drawer, Anchor horAnchor, Anchor verAnchor, int x, int y ) {
CalculateOffset( x, y, horAnchor, verAnchor ); SetAnchors( horAnchor, verAnchor ).SetOffsets( x, y )
.CalculatePosition();
} }
public override void Redraw( IDrawer2D drawer ) { public override void Redraw( IDrawer2D drawer ) {

View File

@ -19,7 +19,8 @@ namespace Launcher.Gui.Widgets {
public void SetDrawData( IDrawer2D drawer, string text, Font font, Anchor horAnchor, public void SetDrawData( IDrawer2D drawer, string text, Font font, Anchor horAnchor,
Anchor verAnchor, int width, int height, int x, int y ) { Anchor verAnchor, int width, int height, int x, int y ) {
Width = width; Height = height; Width = width; Height = height;
CalculateOffset( x, y, horAnchor, verAnchor ); SetAnchors( horAnchor, verAnchor ).SetOffsets( x, y )
.CalculatePosition();
this.font = font; this.font = font;
Text = text; Text = text;

View File

@ -43,7 +43,8 @@ namespace Launcher.Gui.Widgets {
Anchor horAnchor, Anchor verAnchor, int width, int height, int x, int y ) { Anchor horAnchor, Anchor verAnchor, int width, int height, int x, int y ) {
ButtonWidth = width; ButtonHeight = height; ButtonWidth = width; ButtonHeight = height;
Width = width; Height = height; Width = width; Height = height;
CalculateOffset( x, y, horAnchor, verAnchor ); SetAnchors( horAnchor, verAnchor ).SetOffsets( x, y )
.CalculatePosition();
Text = text; Text = text;
if( Password ) text = new String( '*', text.Length ); if( Password ) text = new String( '*', text.Length );

View File

@ -19,7 +19,8 @@ namespace Launcher.Gui.Widgets {
Size size = drawer.MeasureSize( ref args ); Size size = drawer.MeasureSize( ref args );
Width = size.Width; Height = size.Height; Width = size.Width; Height = size.Height;
CalculateOffset( x, y, horAnchor, verAnchor ); SetAnchors( horAnchor, verAnchor ).SetOffsets( x, y )
.CalculatePosition();
Text = text; Text = text;
this.font = font; this.font = font;
} }

View File

@ -4,28 +4,66 @@ using ClassicalSharp;
namespace Launcher.Gui.Widgets { namespace Launcher.Gui.Widgets {
/// <summary> Represents a graphical element/control. </summary>
public abstract class LauncherWidget { public abstract class LauncherWidget {
public int X, Y, Width, Height; public int X, Y, Width, Height;
public LauncherWindow Window; public LauncherWindow Window;
public Action<int, int> OnClick; public Action<int, int> OnClick;
/// <summary> The text associated with this widget. </summary>
public string Text; public string Text;
/// <summary> Specifies the horizontal reference point for when the widget is resized. </summary>
public Anchor HorizontalAnchor;
/// <summary> Specifies the vertical reference point for when the widget is resized. </summary>
public Anchor VerticalAnchor;
/// <summary> Horizontal offset from the reference point in pixels. </summary>
public int XOffset = 0;
/// <summary> Vertical offset from the reference point in pixels. </summary>
public int YOffset = 0;
public LauncherWidget( LauncherWindow window ) { public LauncherWidget( LauncherWindow window ) {
Window = window; Window = window;
} }
protected void CalculateOffset( int x, int y, Anchor horAnchor, Anchor verAnchor ) { /// <summary> Redraws the contents of this widget. </summary>
if( horAnchor == Anchor.LeftOrTop ) X = x; public abstract void Redraw( IDrawer2D drawer );
else if( horAnchor == Anchor.Centre ) X = x + Window.Width / 2 - Width / 2;
else if( horAnchor == Anchor.BottomOrRight ) X = x + Window.Width - Width;
if( verAnchor == Anchor.LeftOrTop ) Y = y; /// <summary> Sets the reference points for when this widget is resized. </summary>
else if( verAnchor == Anchor.Centre ) Y = y + Window.Height / 2 - Height / 2; public LauncherWidget SetAnchors( Anchor horAnchor, Anchor verAnchor ) {
else if( verAnchor == Anchor.BottomOrRight ) Y = y + Window.Height - Height; HorizontalAnchor = horAnchor;
VerticalAnchor = verAnchor;
return this;
} }
public abstract void Redraw( IDrawer2D drawer ); /// <summary> Sets the offsets from the reference points (anchors) in pixels. </summary>
public LauncherWidget SetOffsets( int xOffset, int yOffset ) {
XOffset = xOffset;
YOffset = yOffset;
return this;
}
/// <summary> Calculates the position of this widget in the window,
/// based on its anchor points and offset from the anchor points. </summary>
public LauncherWidget CalculatePosition() {
X = CalcPos( HorizontalAnchor, XOffset, Width, Window.Width );
Y = CalcPos( VerticalAnchor, YOffset, Height, Window.Height );
return this;
}
static int CalcPos( Anchor anchor, int offset, int size, int axisLen ) {
if( anchor == Anchor.LeftOrTop )
return offset;
if( anchor == Anchor.Centre )
return offset + axisLen / 2 - size / 2;
if( anchor == Anchor.BottomOrRight )
return offset + axisLen - size;
return 0;
}
} }
} }