187 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			187 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Text;
 | 
						|
using System.Drawing;
 | 
						|
using System.Drawing.Drawing2D;
 | 
						|
using DevComponents.DotNetBar.Rendering;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
    internal class Office2007ItemContainerPainter : ItemContainerPainter, IOffice2007Painter
 | 
						|
    {
 | 
						|
        #region IOffice2007Painter
 | 
						|
        private Office2007ColorTable m_ColorTable = null; //new Office2007ColorTable();
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets color table used by renderer.
 | 
						|
        /// </summary>
 | 
						|
        public Office2007ColorTable ColorTable
 | 
						|
        {
 | 
						|
            get { return m_ColorTable; }
 | 
						|
            set { m_ColorTable = value; }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region PaintBackground
 | 
						|
        public override void PaintBackground(ItemContainerRendererEventArgs e)
 | 
						|
        {
 | 
						|
            if (!BarFunctions.IsOffice2007Style(e.ItemContainer.EffectiveStyle))
 | 
						|
                return;
 | 
						|
 | 
						|
            ItemContainer container = e.ItemContainer;
 | 
						|
            Office2007ItemGroupColorTable gt = m_ColorTable.ItemGroup;
 | 
						|
 | 
						|
            if (container.SubItems.Count == 0 && (container.WidthInternal <= 0 || container.HeightInternal <= 0) || gt == null)
 | 
						|
                return;
 | 
						|
 | 
						|
            Rectangle bounds = container.DisplayRectangle;
 | 
						|
 | 
						|
            if (!container.BeginGroup || container.IsOnMenu && !(container.Parent is ItemContainer))
 | 
						|
            {
 | 
						|
                if (container.BackgroundStyle.Class == ElementStyleClassKeys.Office2007StatusBarBackground2Key && e.ItemPaintArgs != null &&
 | 
						|
                e.ItemPaintArgs.ContainerControl is Bar && ((Bar)e.ItemPaintArgs.ContainerControl).BarType == eBarType.StatusBar)
 | 
						|
                {                    
 | 
						|
                    bounds.Y = 1;
 | 
						|
                    if (!m_ColorTable.Bar.StatusBarTopBorderLight.IsEmpty) bounds.Y++;
 | 
						|
                    bounds.Height = e.ItemPaintArgs.ContainerControl.Height - 1;
 | 
						|
                    if (container.Parent.SubItems.IndexOf(container) == container.Parent.SubItems.Count - 1)
 | 
						|
                    {
 | 
						|
                        if (e.ItemPaintArgs.RightToLeft)
 | 
						|
                        {
 | 
						|
                            bounds.Width += bounds.X;
 | 
						|
                            bounds.X = 0;
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            bounds.Width += e.ItemPaintArgs.ContainerControl.Width - bounds.Right;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                Region oldClip = e.Graphics.Clip;
 | 
						|
                e.Graphics.SetClip(bounds);
 | 
						|
                ElementStyleDisplay.Paint(new ElementStyleDisplayInfo(container.BackgroundStyle, e.Graphics, bounds));
 | 
						|
                e.Graphics.Clip = oldClip;
 | 
						|
                if (oldClip != null) oldClip.Dispose();
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            bounds.Width -= container.BackgroundStyle.MarginHorizontal;
 | 
						|
            bounds.Height -= container.BackgroundStyle.MarginVertical;
 | 
						|
            bounds.X += container.BackgroundStyle.MarginLeft;
 | 
						|
            bounds.Y += container.BackgroundStyle.MarginTop;
 | 
						|
            //bounds.Width--;
 | 
						|
            //bounds.Height--;
 | 
						|
 | 
						|
            Graphics g = e.Graphics;
 | 
						|
            int cornerSize = 2;
 | 
						|
 | 
						|
            
 | 
						|
            //GraphicsPath path = DisplayHelp.GetRoundedRectanglePath(bounds, 2);
 | 
						|
 | 
						|
            //using (SolidBrush brush = new SolidBrush(ColorScheme.GetColor("FEFFFF")))
 | 
						|
            //    g.FillPath(brush, path);
 | 
						|
 | 
						|
            // Draw border
 | 
						|
            if (gt.OuterBorder != null && !gt.OuterBorder.IsEmpty)
 | 
						|
                DisplayHelp.DrawRoundGradientRectangle(g, bounds, gt.OuterBorder, 1, cornerSize);
 | 
						|
 | 
						|
            if (gt.InnerBorder != null && !gt.InnerBorder.IsEmpty)
 | 
						|
            {
 | 
						|
                bounds.Inflate(-1, -1);
 | 
						|
                DisplayHelp.DrawRoundGradientRectangle(g, bounds, gt.InnerBorder, 1, cornerSize);
 | 
						|
            }
 | 
						|
 | 
						|
            float topPart = .4f;
 | 
						|
 | 
						|
            Rectangle r = bounds;
 | 
						|
            r.Inflate(-1, -1);
 | 
						|
 | 
						|
            SmoothingMode sm = g.SmoothingMode;
 | 
						|
            g.SmoothingMode = SmoothingMode.Default;
 | 
						|
            if(gt.TopBackground!=null && !gt.TopBackground.IsEmpty)
 | 
						|
                DisplayHelp.FillRectangle(g, r, gt.TopBackground);
 | 
						|
            int topHeight = (int)(r.Height * topPart);
 | 
						|
            r.Height -= topHeight;
 | 
						|
            r.Y += topHeight;
 | 
						|
 | 
						|
            if (gt.BottomBackground != null && !gt.BottomBackground.IsEmpty)
 | 
						|
                DisplayHelp.FillRectangle(g, r, gt.BottomBackground);
 | 
						|
            g.SmoothingMode = sm;
 | 
						|
            bool isVertical = container.LayoutOrientation == eOrientation.Vertical;
 | 
						|
            using (Pen penLight = new Pen(gt.ItemGroupDividerLight, 1))
 | 
						|
            {
 | 
						|
                using (Pen penDark = new Pen(gt.ItemGroupDividerDark))
 | 
						|
                {
 | 
						|
                    int c = container.SubItems.Count - 1;
 | 
						|
                    for (int i = 0; i <= c; i++)
 | 
						|
                    {
 | 
						|
                        BaseItem item = container.SubItems[i];
 | 
						|
                        if (!item.Visible || item.DisplayRectangle.Right == container.DisplayRectangle.Right || i == c)
 | 
						|
                            continue;
 | 
						|
                        if (isVertical)
 | 
						|
                        {
 | 
						|
                            g.DrawLine(penDark, container.DisplayRectangle.X + 1, item.DisplayRectangle.Bottom - 1, container.DisplayRectangle.Right - 1, item.DisplayRectangle.Bottom - 1);
 | 
						|
                            g.DrawLine(penLight, container.DisplayRectangle.X + 1, item.DisplayRectangle.Bottom, container.DisplayRectangle.Right, item.DisplayRectangle.Bottom);
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            g.DrawLine(penDark, item.DisplayRectangle.Right - 1, item.DisplayRectangle.Y + 1, item.DisplayRectangle.Right - 1, item.DisplayRectangle.Bottom - 2);
 | 
						|
                            g.DrawLine(penLight, item.DisplayRectangle.Right, item.DisplayRectangle.Y + 1, item.DisplayRectangle.Right, item.DisplayRectangle.Bottom - 2);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            //path.Dispose();
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Paint Separator
 | 
						|
        public override void PaintItemSeparator(ItemContainerSeparatorRendererEventArgs e)
 | 
						|
        {
 | 
						|
            if (e.Item is ItemContainer)
 | 
						|
                return;
 | 
						|
 | 
						|
            Graphics g = e.Graphics;
 | 
						|
            BaseItem item = e.Item;
 | 
						|
            Size imageSize = Size.Empty;
 | 
						|
            if (item is ImageItem)
 | 
						|
                imageSize = ((ImageItem)item).ImageSize;
 | 
						|
 | 
						|
            ItemContainer container = e.ItemContainer;
 | 
						|
            Color color1 = m_ColorTable.LegacyColors.ItemSeparator;
 | 
						|
            Color color2 = m_ColorTable.LegacyColors.ItemSeparatorShade;
 | 
						|
 | 
						|
            Point start = Point.Empty, end = Point.Empty;
 | 
						|
            Point start2 = Point.Empty, end2 = Point.Empty;
 | 
						|
 | 
						|
            if (container.LayoutOrientation == eOrientation.Horizontal)
 | 
						|
            {
 | 
						|
                start = new Point(item.DisplayRectangle.X - 2, item.DisplayRectangle.Y + 3);
 | 
						|
                end = new Point(start.X, item.DisplayRectangle.Bottom - 4);
 | 
						|
                start2 = new Point(start.X + 1, start.Y);
 | 
						|
                end2 = new Point(end.X + 1, end.Y);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                if (item.IsOnMenu)
 | 
						|
                {
 | 
						|
                    start = new Point(item.DisplayRectangle.X + imageSize.Width, item.DisplayRectangle.Y - 2);
 | 
						|
                    end = new Point(item.DisplayRectangle.Right-1, start.Y);
 | 
						|
                    start2 = new Point(start.X, start.Y + 1);
 | 
						|
                    end2 = new Point(end.X, end.Y + 1);
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    start = new Point(item.DisplayRectangle.X + 3, item.DisplayRectangle.Y - 2);
 | 
						|
                    end = new Point(item.DisplayRectangle.Right - 4, start.Y);
 | 
						|
                    start2 = new Point(start.X, start.Y + 1);
 | 
						|
                    end2 = new Point(end.X, end.Y + 1);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            DisplayHelp.DrawLine(g, start, end, color1, 1);
 | 
						|
            DisplayHelp.DrawLine(g, start2, end2, color2, 1);
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 |