140 lines
5.4 KiB
C#
140 lines
5.4 KiB
C#
////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Neoforce Controls //
|
|
// //
|
|
////////////////////////////////////////////////////////////////
|
|
// //
|
|
// File: GroupBox.cs //
|
|
// //
|
|
// Version: 0.7 //
|
|
// //
|
|
// Date: 11/09/2010 //
|
|
// //
|
|
// Author: Tom Shane //
|
|
// //
|
|
////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Copyright (c) by Tom Shane //
|
|
// //
|
|
////////////////////////////////////////////////////////////////
|
|
|
|
#region //// Using /////////////
|
|
|
|
using Microsoft.Xna.Framework;
|
|
////////////////////////////////////////////////////////////////////////////
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
#endregion
|
|
|
|
namespace TomShane.Neoforce.Controls
|
|
{
|
|
|
|
public enum GroupBoxType
|
|
{
|
|
Normal,
|
|
Flat
|
|
}
|
|
|
|
public class GroupBox : Container
|
|
{
|
|
|
|
#region //// Fields ////////////
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
private GroupBoxType type = GroupBoxType.Normal;
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
#endregion
|
|
|
|
#region //// Properties ////////
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
public virtual GroupBoxType Type
|
|
{
|
|
get { return type; }
|
|
set { type = value; Invalidate(); }
|
|
}
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
#endregion
|
|
|
|
#region //// Construstors //////
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
public GroupBox(Manager manager)
|
|
: base(manager)
|
|
{
|
|
CheckLayer(Skin, "Control");
|
|
CheckLayer(Skin, "Flat");
|
|
|
|
CanFocus = false;
|
|
Passive = true;
|
|
Width = 64;
|
|
Height = 64;
|
|
BackColor = Color.Transparent;
|
|
}
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
#endregion
|
|
|
|
#region //// Methods ///////////
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
public override void Init()
|
|
{
|
|
base.Init();
|
|
}
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
private void AdjustClientMargins()
|
|
{
|
|
SkinLayer layer = this.type == GroupBoxType.Normal ? this.Skin.Layers["Control"] : this.Skin.Layers["Flat"];
|
|
SpriteFont font = (layer.Text != null && layer.Text.Font != null) ? layer.Text.Font.Resource : null;
|
|
Vector2 size = font.MeasureString(this.Text);
|
|
var cm = this.ClientMargins;
|
|
cm.Top = string.IsNullOrWhiteSpace(this.Text) ? this.ClientTop : (int)size.Y;
|
|
this.ClientMargins = new Margins(cm.Left, cm.Top, cm.Right, cm.Bottom);
|
|
}
|
|
|
|
protected override void OnTextChanged(EventArgs e)
|
|
{
|
|
base.OnTextChanged(e);
|
|
AdjustClientMargins();
|
|
}
|
|
|
|
protected internal override void OnSkinChanged(EventArgs e)
|
|
{
|
|
base.OnSkinChanged(e);
|
|
AdjustClientMargins();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
protected override void DrawControl(Renderer renderer, Rectangle rect, GameTime gameTime)
|
|
{
|
|
SkinLayer layer = type == GroupBoxType.Normal ? Skin.Layers["Control"] : Skin.Layers["Flat"];
|
|
SpriteFont font = (layer.Text != null && layer.Text.Font != null) ? layer.Text.Font.Resource : null;
|
|
Color col = (layer.Text != null) ? layer.Text.Colors.Enabled : Color.White;
|
|
Point offset = new Point(layer.Text.OffsetX, layer.Text.OffsetY);
|
|
Vector2 size = font.MeasureString(Text);
|
|
size.Y = font.LineSpacing;
|
|
Rectangle r = new Rectangle(rect.Left, rect.Top + (int)(size.Y / 2), rect.Width, rect.Height - (int)(size.Y / 2));
|
|
|
|
renderer.DrawLayer(this, layer, r);
|
|
|
|
if (font != null && Text != null && Text != "")
|
|
{
|
|
Rectangle bg = new Rectangle(r.Left + offset.X, (r.Top - (int)(size.Y / 2)) + offset.Y, (int)size.X + layer.ContentMargins.Horizontal, (int)size.Y);
|
|
renderer.DrawLayer(Manager.Skin.Controls["Control"].Layers[0], bg, new Color(64, 64, 64), 0);
|
|
renderer.DrawString(this, layer, Text, new Rectangle(r.Left, r.Top - (int)(size.Y / 2), (int)(size.X), (int)size.Y), true, 0, 0, false);
|
|
}
|
|
}
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
}
|