mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-10-11 15:17:38 -04:00
82 lines
2.1 KiB
C#
82 lines
2.1 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, string text, Font font) {
|
|
TextWidget w = new TextWidget(game, font);
|
|
w.Init();
|
|
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;
|
|
}
|
|
}
|
|
} |