205 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			205 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Text;
 | |
| using DevComponents.DotNetBar.Controls;
 | |
| using System.Drawing;
 | |
| using System.Windows.Forms;
 | |
| using System.Drawing.Drawing2D;
 | |
| 
 | |
| namespace DevComponents.DotNetBar.Rendering
 | |
| {
 | |
|     internal class OfficeTabFormStripPainter : TabFormStripPainter, IOffice2007Painter
 | |
|     {
 | |
|         #region IOffice2007Painter
 | |
|         private Office2007ColorTable _ColorTable = null;
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Gets or sets color table used by renderer.
 | |
|         /// </summary>
 | |
|         public Office2007ColorTable ColorTable
 | |
|         {
 | |
|             get { return _ColorTable; }
 | |
|             set { _ColorTable = value; }
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         public override void Paint(TabFormStripPainterArgs renderingInfo)
 | |
|         {
 | |
|             TabFormStripControl strip = renderingInfo.TabFormStrip;
 | |
|             Graphics g = renderingInfo.Graphics;
 | |
|             Rectangle bounds = strip.ClientRectangle;
 | |
|             bool isFormActive = true;
 | |
|             Form form = strip.FindForm();
 | |
|             if (form != null && (form != System.Windows.Forms.Form.ActiveForm && form.MdiParent == null ||
 | |
|                     form.MdiParent != null && form.MdiParent.ActiveMdiChild != form))
 | |
|                 isFormActive = false;
 | |
|             
 | |
|             //if (ct.BackgroundStyle != null)
 | |
|             //{
 | |
|             //    ElementStyleDisplayInfo di = new ElementStyleDisplayInfo(ct.BackgroundStyle, g, bounds);
 | |
|             //    ElementStyleDisplay.PaintBackground(di);
 | |
|             //}
 | |
|             TabFormControl tabControl = strip.Parent as TabFormControl;
 | |
|             TabFormColorTable formColorTable = ColorTable.TabForm;
 | |
|             if (tabControl != null && tabControl.ColorTable != null)
 | |
|                 formColorTable = tabControl.ColorTable;
 | |
| 
 | |
|             TabFormStateColorTable stateColorTable = isFormActive ? formColorTable.Active : formColorTable.Inactive;
 | |
|             if (stateColorTable.CaptionBackColors.Length > 0)
 | |
|             {
 | |
|                 Rectangle cb = strip.ClientRectangle;
 | |
|                 cb.Inflate(1, 1);
 | |
|                 using (
 | |
|                     Brush brush = DisplayHelp.CreateBrush(cb, stateColorTable.CaptionBackColors,
 | |
|                         stateColorTable.CaptionBackColorsGradientAngle, stateColorTable.CaptionBackColorsPositions))
 | |
|                     g.FillRectangle(brush, cb);
 | |
|             }
 | |
| 
 | |
|             if (strip.CaptionVisible)
 | |
|             {
 | |
|                 if (strip.CaptionBounds.IsEmpty || strip.SystemCaptionItemBounds.IsEmpty)
 | |
|                     SetCaptionItemBounds(strip, renderingInfo);
 | |
|                 Color captionTextColor = stateColorTable.CaptionText;
 | |
|                 eTextFormat textFormat = formColorTable.CaptionTextFormat;
 | |
| 
 | |
|                 Font font = SystemFonts.DefaultFont;
 | |
|                 bool disposeFont = true;
 | |
|                 if (strip.CaptionFont != null)
 | |
|                 {
 | |
|                     font.Dispose();
 | |
|                     font = strip.CaptionFont;
 | |
|                     disposeFont = false;
 | |
|                 }
 | |
|                 string text = strip.TitleText;
 | |
|                 if (string.IsNullOrEmpty(text) && form != null) text = form.Text;
 | |
|                 bool isTitleTextMarkup = strip.TitleTextMarkupBody != null;
 | |
|                 Rectangle captionRect = strip.CaptionBounds;
 | |
|                 const int CAPTION_TEXT_PADDING = 12;
 | |
|                 captionRect.X += CAPTION_TEXT_PADDING;
 | |
|                 captionRect.Width -= CAPTION_TEXT_PADDING;
 | |
| 
 | |
|                 if (StyleManager.Style == eStyle.OfficeMobile2014)
 | |
|                 {
 | |
|                     captionRect.Y -= 2;
 | |
|                     captionRect.Height -= 2;
 | |
|                     // Center text in center of window instead of center of available space
 | |
|                     if (!strip.SystemCaptionItemBounds.IsEmpty && captionRect.Width > strip.SystemCaptionItemBounds.Width)
 | |
|                     {
 | |
|                         captionRect.X += strip.SystemCaptionItemBounds.Width / 2 + 18;
 | |
|                         captionRect.Width -= strip.SystemCaptionItemBounds.Width / 2 + 18;
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 if (!isTitleTextMarkup)
 | |
|                     TextDrawing.DrawString(g, text, font, captionTextColor, captionRect, textFormat);
 | |
|                 else
 | |
|                 {
 | |
|                     TextMarkup.MarkupDrawContext d = new TextMarkup.MarkupDrawContext(g, font, captionTextColor, strip.RightToLeft == System.Windows.Forms.RightToLeft.Yes, captionRect, false);
 | |
|                     d.AllowMultiLine = false;
 | |
|                     d.IgnoreFormattingColors = !isFormActive;
 | |
|                     TextMarkup.BodyElement body = strip.TitleTextMarkupBody;
 | |
|                     if (strip.TitleTextMarkupLastArrangeBounds != captionRect)
 | |
|                     {
 | |
|                         body.Measure(captionRect.Size, d);
 | |
|                         body.Arrange(captionRect, d);
 | |
|                         strip.TitleTextMarkupLastArrangeBounds = captionRect;
 | |
|                         Rectangle mr = body.Bounds;
 | |
|                         if (mr.Width < captionRect.Width)
 | |
|                             mr.Offset((captionRect.Width - mr.Width) / 2, 0);
 | |
|                         if (mr.Height < captionRect.Height)
 | |
|                             mr.Offset(0, (captionRect.Height - mr.Height) / 2);
 | |
|                         body.Bounds = mr;
 | |
|                     }
 | |
|                     Region oldClip = g.Clip;
 | |
|                     g.SetClip(captionRect, CombineMode.Intersect);
 | |
|                     body.Render(d);
 | |
|                     g.Clip = oldClip;
 | |
|                     if (oldClip != null) oldClip.Dispose();
 | |
|                 }
 | |
| 
 | |
|                 if (disposeFont) font.Dispose();
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|         private void SetCaptionItemBounds(TabFormStripControl strip, TabFormStripPainterArgs renderingInfo)
 | |
|         {
 | |
|             if (!strip.CaptionVisible)
 | |
|                 return;
 | |
|             bool rightToLeft = (strip.RightToLeft == System.Windows.Forms.RightToLeft.Yes);
 | |
| 
 | |
|             System.Windows.Forms.Form form = strip.FindForm();
 | |
| 
 | |
|             // Get right most X position of the Quick Access Toolbar
 | |
|             int right = 0, sysLeft = 0;
 | |
|             for (int i = strip.CaptionContainerItem.SubItems.Count - 1; i >= 0; i--)
 | |
|             {
 | |
|                 BaseItem item = strip.CaptionContainerItem.SubItems[i];
 | |
|                 if (!item.Visible || !item.Displayed)
 | |
|                     continue;
 | |
|                 if (item.ItemAlignment == eItemAlignment.Near && item.Visible && i > 0)
 | |
|                 {
 | |
|                     if (rightToLeft)
 | |
|                         right = item.DisplayRectangle.X;
 | |
|                     else
 | |
|                         right = item.DisplayRectangle.Right;
 | |
|                     break;
 | |
|                 }
 | |
|                 else if (item.ItemAlignment == eItemAlignment.Far && item.Visible)
 | |
|                 {
 | |
|                     if (rightToLeft)
 | |
|                         sysLeft = item.DisplayRectangle.Right;
 | |
|                     else
 | |
|                         sysLeft = item.DisplayRectangle.X;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if (strip.CaptionContainerItem is CaptionItemContainer && ((CaptionItemContainer)strip.CaptionContainerItem).MoreItems != null)
 | |
|             {
 | |
|                 if (rightToLeft)
 | |
|                     right = ((CaptionItemContainer)strip.CaptionContainerItem).MoreItems.DisplayRectangle.X;
 | |
|                 else
 | |
|                     right = ((CaptionItemContainer)strip.CaptionContainerItem).MoreItems.DisplayRectangle.Right;
 | |
|             }
 | |
| 
 | |
|             Rectangle r = new Rectangle(right, 2, strip.CaptionContainerItem.WidthInternal - right - (strip.CaptionContainerItem.WidthInternal - sysLeft), strip.GetTotalCaptionHeight());
 | |
|             strip.CaptionBounds = r;
 | |
| 
 | |
|             if (sysLeft > 0)
 | |
|             {
 | |
|                 if (rightToLeft)
 | |
|                     strip.SystemCaptionItemBounds = new Rectangle(r.X, r.Y, sysLeft, r.Height);
 | |
|                 else
 | |
|                     strip.SystemCaptionItemBounds = new Rectangle(sysLeft, r.Y, strip.CaptionContainerItem.WidthInternal - sysLeft, r.Height);
 | |
|             }
 | |
| 
 | |
|             //if (right == 0 || r.Height <= 0 || r.Width <= 0)
 | |
|             //    return;
 | |
| 
 | |
|             //BaseItem startButton = strip.GetApplicationButton();
 | |
|             //if (startButton != null)
 | |
|             //{
 | |
|             //    int startIndex = strip.QuickToolbarItems.IndexOf(startButton);
 | |
|             //    if (strip.QuickToolbarItems.Count - 1 > startIndex)
 | |
|             //    {
 | |
|             //        BaseItem firstItem = strip.QuickToolbarItems[startIndex + 1];
 | |
|             //        if (rightToLeft)
 | |
|             //        {
 | |
|             //            r.Width -= r.Right - firstItem.DisplayRectangle.Right;
 | |
|             //        }
 | |
|             //        else
 | |
|             //        {
 | |
|             //            r.Width -= firstItem.DisplayRectangle.X - r.X;
 | |
|             //            r.X = firstItem.DisplayRectangle.X;
 | |
|             //        }
 | |
|             //    }
 | |
|             //}
 | |
| 
 | |
|             //r.Height = ((CaptionItemContainer)strip.CaptionContainerItem).MaxItemHeight + 6;
 | |
|             //r.X = 0;
 | |
|             //r.Width = right;
 | |
|             //strip.QuickToolbarBounds = r;
 | |
|         }
 | |
|     }
 | |
| }
 |