using System; using System.Drawing; using Gwen.ControlInternal; namespace Gwen.Control { /// /// Static text label. /// public class Label : Base { private readonly Text m_Text; private Pos m_Align; private Padding m_TextPadding; private bool m_AutoSizeToContents; /// /// Text alignment. /// public Pos Alignment { get { return m_Align; } set { m_Align = value; Invalidate(); } } /// /// Text. /// public String Text { get { return m_Text.String; } set { SetText(value); } } /// /// Font. /// public Font Font { get { return m_Text.Font; } set { m_Text.Font = value; if (m_AutoSizeToContents) SizeToContents(); Invalidate(); } } /// /// Text color. /// public Color TextColor { get { return m_Text.TextColor; } set { m_Text.TextColor = value; } } /// /// Override text color (used by tooltips). /// public Color TextColorOverride { get { return m_Text.TextColorOverride; } set { m_Text.TextColorOverride = value; } } /// /// Text override - used to display different string. /// public String TextOverride { get { return m_Text.TextOverride; } set { m_Text.TextOverride = value; } } /// /// Width of the text (in pixels). /// public int TextWidth { get { return m_Text.Width; } } /// /// Height of the text (in pixels). /// public int TextHeight { get { return m_Text.Height; } } public int TextX { get { return m_Text.X; } } public int TextY { get { return m_Text.Y; } } /// /// Text length (in characters). /// public int TextLength { get { return m_Text.Length; } } public int TextRight { get { return m_Text.Right; } } public virtual void MakeColorNormal() { TextColor = Skin.Colors.Label.Default; } public virtual void MakeColorBright() { TextColor = Skin.Colors.Label.Bright; } public virtual void MakeColorDark() { TextColor = Skin.Colors.Label.Dark; } public virtual void MakeColorHighlight() { TextColor = Skin.Colors.Label.Highlight; } /// /// Determines if the control should autosize to its text. /// public bool AutoSizeToContents { get { return m_AutoSizeToContents; } set { m_AutoSizeToContents = value; Invalidate(); InvalidateParent(); } } /// /// Text padding. /// public Padding TextPadding { get { return m_TextPadding; } set { m_TextPadding = value; Invalidate(); InvalidateParent(); } } /// /// Initializes a new instance of the class. /// /// Parent control. public Label(Base parent) : base(parent) { m_Text = new Text(this); //m_Text.Font = Skin.DefaultFont; MouseInputEnabled = false; SetSize(100, 10); Alignment = Pos.Left | Pos.Top; m_AutoSizeToContents = false; } /// /// Returns index of the character closest to specified point (in canvas coordinates). /// /// /// /// protected int GetClosestCharacter(int x, int y) { return m_Text.GetClosestCharacter(m_Text.CanvasPosToLocal(new Point(x, y))); } /// /// Sets the position of the internal text control. /// /// /// protected void SetTextPosition(int x, int y) { m_Text.SetPosition(x, y); } /// /// Handler for text changed event. /// protected virtual void OnTextChanged() {} /// /// Lays out the control's interior according to alignment, padding, dock etc. /// /// Skin to use. protected override void Layout(Skin.Base skin) { base.Layout(skin); Pos align = m_Align; if (m_AutoSizeToContents) SizeToContents(); int x = m_TextPadding.Left + Padding.Left; int y = m_TextPadding.Top + Padding.Top; if (0 != (align & Pos.Right)) x = Width - m_Text.Width - m_TextPadding.Right - Padding.Right; if (0 != (align & Pos.CenterH)) x = (int)((m_TextPadding.Left + Padding.Left) + ((Width - m_Text.Width - m_TextPadding.Left - Padding.Left - m_TextPadding.Right - Padding.Right) * 0.5f)); if (0 != (align & Pos.CenterV)) y = (int)((m_TextPadding.Top + Padding.Top) + ((Height - m_Text.Height) * 0.5f) - m_TextPadding.Bottom - Padding.Bottom); if (0 != (align & Pos.Bottom)) y = Height - m_Text.Height - m_TextPadding.Bottom - Padding.Bottom; m_Text.SetPosition(x, y); } /// /// Sets the label text. /// /// Text to set. /// Determines whether to invoke "text changed" event. public virtual void SetText(String str, bool doEvents = true) { if (Text == str) return; m_Text.String = str; if (m_AutoSizeToContents) SizeToContents(); Invalidate(); InvalidateParent(); if (doEvents) OnTextChanged(); } public virtual void SizeToContents() { m_Text.SetPosition(m_TextPadding.Left + Padding.Left, m_TextPadding.Top + Padding.Top); m_Text.SizeToContents(); SetSize(m_Text.Width + Padding.Left + Padding.Right + m_TextPadding.Left + m_TextPadding.Right, m_Text.Height + Padding.Top + Padding.Bottom + m_TextPadding.Top + m_TextPadding.Bottom); InvalidateParent(); } /// /// Gets the coordinates of specified character. /// /// Character index. /// Character coordinates (local). public virtual Point GetCharacterPosition(int index) { Point p = m_Text.GetCharacterPosition(index); return new Point(p.X + m_Text.X, p.Y + m_Text.Y); } /// /// Renders the control using specified skin. /// /// Skin to use. protected override void Render(Skin.Base skin) { } } }