188 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Text;
 | |
| using System.Drawing;
 | |
| using System.Xml;
 | |
| 
 | |
| #if AdvTree
 | |
| using DevComponents.Tree;
 | |
| namespace DevComponents.Tree.TextMarkup
 | |
| #elif DOTNETBAR
 | |
| namespace DevComponents.DotNetBar.TextMarkup
 | |
| #elif SUPERGRID
 | |
| namespace DevComponents.SuperGrid.TextMarkup
 | |
| #elif LAYOUT
 | |
| namespace DevComponents.DotNetBar.Layout.TextMarkup
 | |
| #endif
 | |
| {
 | |
|     internal class FontElement : FontChangeElement
 | |
|     {
 | |
|         #region Private Variables
 | |
|         private Color m_ForeColor = Color.Empty;
 | |
|         private Color m_OldForeColor = Color.Empty;
 | |
|         private int m_Size = 0;
 | |
|         private bool m_RelativeSize = false;
 | |
|         private string m_Face = "";
 | |
|         private string m_SystemColorName = "";
 | |
|         #endregion
 | |
| 
 | |
|         #region Internal Implementation
 | |
|         protected override void SetFont(MarkupDrawContext d)
 | |
|         {
 | |
|             Font font = d.CurrentFont;
 | |
|             try
 | |
|             {
 | |
|                 if (m_Face != "" || m_Size != 0 && m_RelativeSize || m_Size>4 && !m_RelativeSize)
 | |
|                 {
 | |
|                     if (m_Face != "")
 | |
|                         d.CurrentFont = new Font(m_Face, ((m_RelativeSize || m_Size == 0)?font.SizeInPoints + m_Size:m_Size), font.Style);
 | |
|                     else
 | |
|                         d.CurrentFont = new Font(font.FontFamily, ((m_RelativeSize || m_Size == 0)? font.SizeInPoints + m_Size : m_Size), font.Style);
 | |
|                 }
 | |
|                 else
 | |
|                     font = null;
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 font = null;
 | |
|             }
 | |
| 
 | |
|             if (font != null)
 | |
|                 m_OldFont = font;
 | |
| 
 | |
|             if (!d.IgnoreFormattingColors)
 | |
|             {
 | |
|                 if (!m_ForeColor.IsEmpty)
 | |
|                 {
 | |
|                     m_OldForeColor = d.CurrentForeColor;
 | |
|                     d.CurrentForeColor = m_ForeColor;
 | |
|                 }
 | |
|                 else if (m_SystemColorName != "")
 | |
|                 {
 | |
| #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 (d == null) return;
 | |
|             if (!m_OldForeColor.IsEmpty)
 | |
|                 d.CurrentForeColor = m_OldForeColor;
 | |
|             m_OldForeColor = Color.Empty;
 | |
|         }
 | |
| 
 | |
|         public Color ForeColor
 | |
|         {
 | |
|             get { return m_ForeColor; }
 | |
|             set { m_ForeColor = value; }
 | |
|         }
 | |
| 
 | |
|         public int Size
 | |
|         {
 | |
|             get { return m_Size; }
 | |
|             set { m_Size = value; }
 | |
|         }
 | |
| 
 | |
|         public string Face
 | |
|         {
 | |
|             get { return m_Face; }
 | |
|             set { m_Face = value; }
 | |
|         }
 | |
| 
 | |
|         private Color GetColorFromName(string name)
 | |
|         {
 | |
|             string s = name.ToLower();
 | |
|             m_SystemColorName = "";
 | |
|             if (s == "syscaptiontextextra")
 | |
|             {
 | |
|                 m_SystemColorName = s;
 | |
|                 return Color.Empty;
 | |
|             }
 | |
| 
 | |
|             return Color.FromName(name);
 | |
|         }
 | |
| 
 | |
|         public override void ReadAttributes(XmlTextReader reader)
 | |
|         {
 | |
|             m_RelativeSize = 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)
 | |
|                                 m_ForeColor = ColorHelpers.GetColor(s.Substring(1));
 | |
|                         }
 | |
|                         else
 | |
|                         {
 | |
|                             m_ForeColor = GetColorFromName(s);
 | |
|                         }
 | |
|                     }
 | |
|                     catch
 | |
|                     {
 | |
|                         m_ForeColor = Color.Empty;
 | |
|                     }
 | |
|                 }
 | |
|                 else if (reader.Name.ToLower() == "size")
 | |
|                 {
 | |
|                     string s = reader.Value;
 | |
|                     if (s.StartsWith("+"))
 | |
|                     {
 | |
|                         try
 | |
|                         {
 | |
|                             m_Size = Int32.Parse(s.Substring(1));
 | |
|                             m_RelativeSize = true;
 | |
|                         }
 | |
|                         catch
 | |
|                         {
 | |
|                             m_Size = 0;
 | |
|                         }
 | |
|                     }
 | |
|                     else
 | |
|                     {
 | |
|                         if (s.StartsWith("-"))
 | |
|                             m_RelativeSize = true;
 | |
|                         try
 | |
|                         {
 | |
|                             m_Size = Int32.Parse(s);
 | |
|                         }
 | |
|                         catch
 | |
|                         {
 | |
|                             m_Size = 0;
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|                 else if (reader.Name.ToLower() == "face")
 | |
|                 {
 | |
|                     m_Face = reader.Value;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         #endregion
 | |
|     }
 | |
| }
 |