mirror of
https://git.alee14.me/shiftos-archive/ShiftOS_TheReturn.git
synced 2025-01-22 18:02:16 +00:00
113 lines
3.1 KiB
C#
113 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.Xna.Framework;
|
|
using ShiftOS.Frontend.GraphicsSubsystem;
|
|
|
|
namespace ShiftOS.Frontend.GUI
|
|
{
|
|
public class TextControl : Control
|
|
{
|
|
private string _text = "Text Control";
|
|
private TextAlign _textAlign = TextAlign.TopLeft;
|
|
private Font _font = new Font("Tahoma", 9f);
|
|
|
|
protected override void OnLayout(GameTime gameTime)
|
|
{
|
|
if (AutoSize)
|
|
{
|
|
using (var bmp = new Bitmap(1, 1))
|
|
{
|
|
using(var gfx = Graphics.FromImage(bmp))
|
|
{
|
|
var measure = gfx.MeasureString(_text, _font);
|
|
Width = (int)measure.Width;
|
|
Height = (int)measure.Height;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public string Text
|
|
{
|
|
get { return _text; }
|
|
set { _text = value; }
|
|
}
|
|
|
|
public Font Font
|
|
{
|
|
get
|
|
{
|
|
return _font;
|
|
}
|
|
set
|
|
{
|
|
_font = value;
|
|
}
|
|
}
|
|
|
|
public TextAlign TextAlign
|
|
{
|
|
get { return _textAlign; }
|
|
set { _textAlign = value; }
|
|
}
|
|
|
|
protected override void OnPaint(GraphicsContext gfx)
|
|
{
|
|
var sMeasure = GraphicsContext.MeasureString(_text, _font, Width);
|
|
PointF loc = new PointF(2, 2);
|
|
float centerH = (Width - sMeasure.X) / 2;
|
|
float centerV = (Height - sMeasure.Y) / 2;
|
|
switch (_textAlign)
|
|
{
|
|
case TextAlign.TopCenter:
|
|
loc.X = centerH;
|
|
break;
|
|
case TextAlign.TopRight:
|
|
loc.X = Width - sMeasure.X;
|
|
break;
|
|
case TextAlign.MiddleLeft:
|
|
loc.Y = centerV;
|
|
break;
|
|
case TextAlign.MiddleCenter:
|
|
loc.Y = centerV;
|
|
loc.X = centerH;
|
|
break;
|
|
case TextAlign.MiddleRight:
|
|
loc.Y = centerV;
|
|
loc.X = (Width - sMeasure.Y);
|
|
break;
|
|
case TextAlign.BottomLeft:
|
|
loc.Y = (Height - sMeasure.Y);
|
|
break;
|
|
case TextAlign.BottomCenter:
|
|
loc.Y = (Height - sMeasure.Y);
|
|
loc.X = centerH;
|
|
break;
|
|
case TextAlign.BottomRight:
|
|
loc.Y = (Height - sMeasure.Y);
|
|
loc.X = (Width - sMeasure.X);
|
|
break;
|
|
|
|
}
|
|
|
|
gfx.DrawString(_text, 0, 0, Engine.SkinEngine.LoadedSkin.ControlTextColor.ToMonoColor(), _font, this.Width);
|
|
}
|
|
}
|
|
|
|
public enum TextAlign
|
|
{
|
|
TopLeft,
|
|
TopCenter,
|
|
TopRight,
|
|
MiddleLeft,
|
|
MiddleCenter,
|
|
MiddleRight,
|
|
BottomLeft,
|
|
BottomCenter,
|
|
BottomRight
|
|
}
|
|
}
|