2016-10-30 11:20:49 +11:00

83 lines
2.3 KiB
C#

// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT
using System;
using System.Drawing;
namespace ClassicalSharp.Gui.Widgets {
public class TextWidget : Widget {
public TextWidget( Game game, Font font ) : base( game ) {
this.font = font;
}
public static TextWidget Create( Game game, int x, int y, string text, Anchor horizontal, Anchor vertical, Font font ) {
TextWidget w = new TextWidget( game, font );
w.Init();
w.HorizontalAnchor = horizontal; w.VerticalAnchor = vertical;
w.XOffset = x; w.YOffset = y;
w.SetText( text );
return w;
}
public TextWidget SetLocation( Anchor horAnchor, Anchor verAnchor, int xOffset, int yOffset ) {
HorizontalAnchor = horAnchor; VerticalAnchor = verAnchor;
XOffset = xOffset; YOffset = yOffset;
CalculatePosition();
return this;
}
protected Texture texture;
protected int defaultHeight;
protected internal Font font;
public bool ReducePadding;
public FastColour Colour = FastColour.White;
public bool IsValid { get { return texture.IsValid; } }
public override void Init() {
DrawTextArgs args = new DrawTextArgs( "I", font, true );
int height = game.Drawer2D.MeasureChatSize( ref args ).Height;
SetHeight( height );
}
protected void SetHeight( int height ) {
if( ReducePadding )
game.Drawer2D.ReducePadding( ref height, Utils.Floor( font.Size ) );
defaultHeight = height;
Height = height;
}
public void SetText( string text ) {
gfx.DeleteTexture( ref texture );
if( String.IsNullOrEmpty( text ) ) {
texture = new Texture();
Width = 0; Height = defaultHeight;
} else {
DrawTextArgs args = new DrawTextArgs( text, font, true );
texture = game.Drawer2D.MakeChatTextTexture( ref args, 0, 0 );
if( ReducePadding )
game.Drawer2D.ReducePadding( ref texture, Utils.Floor( font.Size ) );
Width = texture.Width; Height = texture.Height;
CalculatePosition();
texture.X1 = X; texture.Y1 = Y;
}
}
public override void Render( double delta ) {
if( texture.IsValid )
texture.Render( gfx, Colour );
}
public override void Dispose() {
gfx.DeleteTexture( ref texture );
}
public override void CalculatePosition() {
int oldX = X, oldY = Y;
base.CalculatePosition();
texture.X1 += X - oldX;
texture.Y1 += Y - oldY;
}
}
}