187 lines
5.5 KiB
C#

using System;
using System.Drawing;
using System.Xml;
#if AdvTree
using DevComponents.Tree;
namespace DevComponents.Tree.TextMarkup
#elif DOTNETBAR
namespace DevComponents.DotNetBar.TextMarkup
#elif SUPERGRID
using DevComponents.DotNetBar.SuperGrid;
namespace DevComponents.SuperGrid.TextMarkup
#endif
{
internal class FontElement : FontChangeElement
{
#region Private Variables
private Color _MForeColor = Color.Empty;
private Color _MOldForeColor = Color.Empty;
private int _MSize;
private bool _MRelativeSize;
private string _MFace = "";
private string _MSystemColorName = "";
#endregion
#region Internal Implementation
protected override void SetFont(MarkupDrawContext d)
{
Font font = d.CurrentFont;
try
{
if (_MFace != "" || _MSize != 0 && _MRelativeSize || _MSize>4 && !_MRelativeSize)
{
if (_MFace != "")
d.CurrentFont = new Font(_MFace, ((_MRelativeSize || _MSize == 0)?font.SizeInPoints + _MSize:_MSize), font.Style);
else
d.CurrentFont = new Font(font.FontFamily, ((_MRelativeSize || _MSize == 0)? font.SizeInPoints + _MSize : _MSize), font.Style);
}
else
font = null;
}
catch
{
font = null;
}
if (font != null)
m_OldFont = font;
if (!d.IgnoreFormattingColors)
{
if (!_MForeColor.IsEmpty)
{
_MOldForeColor = d.CurrentForeColor;
d.CurrentForeColor = _MForeColor;
}
else if (_MSystemColorName != "")
{
#if DOTNETBAR
if (Rendering.GlobalManager.Renderer is Rendering.Office2007Renderer)
{
m_OldForeColor = d.CurrentForeColor;
d.CurrentForeColor = ((Rendering.Office2007Renderer)Rendering.GlobalManager.Renderer).ColorTable.Form.Active.CaptionTextExtra;
}
#endif
}
}
}
public override void RenderEnd(MarkupDrawContext d)
{
RestoreForeColor(d);
base.RenderEnd(d);
}
public override void MeasureEnd(Size availableSize, MarkupDrawContext d)
{
RestoreForeColor(d);
base.MeasureEnd(availableSize, d);
}
protected virtual void RestoreForeColor(MarkupDrawContext d)
{
if (!_MOldForeColor.IsEmpty)
d.CurrentForeColor = _MOldForeColor;
_MOldForeColor = Color.Empty;
}
public Color ForeColor
{
get { return _MForeColor; }
set { _MForeColor = value; }
}
public int Size
{
get { return _MSize; }
set { _MSize = value; }
}
public string Face
{
get { return _MFace; }
set { _MFace = value; }
}
private Color GetColorFromName(string name)
{
string s = name.ToLower();
_MSystemColorName = "";
if (s == "syscaptiontextextra")
{
_MSystemColorName = s;
return Color.Empty;
}
return Color.FromName(name);
}
public override void ReadAttributes(XmlTextReader reader)
{
_MRelativeSize = false;
for (int i = 0; i < reader.AttributeCount; i++)
{
reader.MoveToAttribute(i);
if (reader.Name.ToLower() == "color")
{
try
{
string s = reader.Value;
if (s.StartsWith("#"))
{
if (s.Length == 7)
_MForeColor = ColorHelpers.GetColor(s.Substring(1));
}
else
{
_MForeColor = GetColorFromName(s);
}
}
catch
{
_MForeColor = Color.Empty;
}
}
else if (reader.Name.ToLower() == "size")
{
string s = reader.Value;
if (s.StartsWith("+"))
{
try
{
_MSize = Int32.Parse(s.Substring(1));
_MRelativeSize = true;
}
catch
{
_MSize = 0;
}
}
else
{
if (s.StartsWith("-"))
_MRelativeSize = true;
try
{
_MSize = Int32.Parse(s);
}
catch
{
_MSize = 0;
}
}
}
else if (reader.Name.ToLower() == "face")
{
_MFace = reader.Value;
}
}
}
#endregion
}
}