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;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |