187 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			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
 | |
|     }
 | |
| }
 |