828 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			828 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System.Drawing;
 | 
						|
using System.Drawing.Drawing2D;
 | 
						|
using System.Drawing.Imaging;
 | 
						|
using System.Drawing.Text;
 | 
						|
using System.Windows.Forms;
 | 
						|
using DevComponents.DotNetBar.Rendering;
 | 
						|
using DevComponents.DotNetBar.Ribbon;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Summary description for Office2003ButtonItemPainter.
 | 
						|
	/// </summary>
 | 
						|
	internal class Office2003ButtonItemPainter:ButtonItemPainter
 | 
						|
    {
 | 
						|
        protected virtual Color GetTextColor(ButtonItem button, ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            return ButtonItemPainterHelper.GetTextColor(button, pa);
 | 
						|
        }
 | 
						|
        protected virtual Rectangle GetDisplayRectangle(ButtonItem button)
 | 
						|
        {
 | 
						|
            return button.DisplayRectangle;
 | 
						|
        }
 | 
						|
		public override void PaintButton(ButtonItem button, ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
			bool isOnMenu=IsOnMenu(button, pa);
 | 
						|
            if(isOnMenu && button.Parent is ItemContainer)
 | 
						|
                isOnMenu=false;
 | 
						|
			bool bIsOnMenuBar=pa.IsOnMenuBar;
 | 
						|
			bool bThemed=button.IsThemed;
 | 
						|
            Graphics g = pa.Graphics;
 | 
						|
 | 
						|
            Region oldClip = g.Clip as Region;
 | 
						|
            Rectangle itemRect = GetDisplayRectangle(button);
 | 
						|
 | 
						|
            try
 | 
						|
            {
 | 
						|
                g.SetClip(itemRect, CombineMode.Intersect);
 | 
						|
 | 
						|
                if (!pa.IsOnMenu && !bIsOnMenuBar && bThemed)
 | 
						|
                {
 | 
						|
                    if (pa.ContainerControl is ButtonX)
 | 
						|
                        ThemedButtonXPainter.PaintButton(button, pa);
 | 
						|
                    else
 | 
						|
                        ThemedButtonItemPainter.PaintButton(button, pa);
 | 
						|
                    return;
 | 
						|
                }
 | 
						|
 | 
						|
                Color textColor = GetTextColor(button, pa);
 | 
						|
                CompositeImage image = button.GetImage(textColor);
 | 
						|
                Rectangle imageRect = GetImageRectangle(button, pa, image);
 | 
						|
 | 
						|
                PaintButtonBackground(button, pa, image);
 | 
						|
 | 
						|
                Rectangle customizeCheckRect = GetCustomizeMenuCheckRectangle(button, pa);
 | 
						|
                Rectangle checkRect = GetCheckRectangle(button, pa, image);
 | 
						|
                Rectangle mouseOverRect = GetMouseOverRectangle(button, pa, image);
 | 
						|
 | 
						|
                bool mouseOver = button.IsMouseOver;
 | 
						|
                if (button.Expanded && !isOnMenu)
 | 
						|
                    mouseOver = false;
 | 
						|
                if (isOnMenu && button.Expanded && pa.ContainerControl != null && pa.ContainerControl.Parent != null)
 | 
						|
                {
 | 
						|
                    if (!pa.ContainerControl.Parent.Bounds.Contains(System.Windows.Forms.Control.MousePosition))
 | 
						|
                        mouseOver = true;
 | 
						|
                }
 | 
						|
 | 
						|
                if (button.HotTrackingStyle != eHotTrackingStyle.None)
 | 
						|
                {
 | 
						|
                    if (mouseOver || button.IsMouseDown && !button.DesignMode)
 | 
						|
                        PaintButtonMouseOver(button, pa, image, mouseOverRect);
 | 
						|
                }
 | 
						|
 | 
						|
                if (isOnMenu && button.IsOnCustomizeMenu && button.Visible && !button.SystemItem)
 | 
						|
                    PaintCustomizeCheck(button, pa, customizeCheckRect);
 | 
						|
 | 
						|
                if (button.Checked && !button.IsOnCustomizeMenu && (button.GetEnabled(pa.ContainerControl) || isOnMenu))
 | 
						|
                    PaintButtonCheck(button, pa, image, checkRect);
 | 
						|
 | 
						|
                if ((image != null || !string.IsNullOrEmpty(button.SymbolRealized)) && button.ButtonStyle != eButtonStyle.TextOnlyAlways)
 | 
						|
                    PaintButtonImage(button, pa, image, imageRect);
 | 
						|
 | 
						|
                if (!(button is ApplicationButton) || button.EffectiveStyle == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(button.EffectiveStyle))
 | 
						|
                    PaintButtonText(button, pa, textColor, image);
 | 
						|
 | 
						|
                PaintExpandButton(button, pa);
 | 
						|
 | 
						|
                if (button.Focused && button.DesignMode)
 | 
						|
                {
 | 
						|
                    Rectangle r = itemRect;
 | 
						|
                    r.Inflate(-1, -1);
 | 
						|
                    DesignTime.DrawDesignTimeSelection(g, r, pa.Colors.ItemDesignTimeBorder);
 | 
						|
                }
 | 
						|
 | 
						|
                if (image != null)
 | 
						|
                    image.Dispose();
 | 
						|
            }
 | 
						|
            finally
 | 
						|
            {
 | 
						|
                if (oldClip != null)
 | 
						|
                {
 | 
						|
                    g.Clip = oldClip;
 | 
						|
                    oldClip.Dispose();
 | 
						|
                }
 | 
						|
                else
 | 
						|
                    g.ResetClip();
 | 
						|
            }
 | 
						|
		}
 | 
						|
 | 
						|
        protected virtual bool IsOnMenu(ButtonItem button, ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            bool isOnMenu = pa.IsOnMenu;
 | 
						|
            if (isOnMenu && button.Parent is ItemContainer)
 | 
						|
                isOnMenu = false;
 | 
						|
            return isOnMenu;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
		public override void PaintButtonImage(ButtonItem button, ItemPaintArgs pa, CompositeImage image, Rectangle imagebounds)
 | 
						|
		{
 | 
						|
            bool isOnMenu = IsOnMenu(button, pa);
 | 
						|
            if (imagebounds.Width <= 0 || imagebounds.Height <= 0) return;
 | 
						|
 | 
						|
            if (!string.IsNullOrEmpty(button.SymbolRealized))
 | 
						|
            {
 | 
						|
                Font font = Symbols.GetFont(button.SymbolSize, button.SymbolSet);
 | 
						|
                Color symbolColor = (button.SymbolColor.IsEmpty || !button.Enabled ? GetTextColor(button, pa) : button.SymbolColor);
 | 
						|
                if (isOnMenu)
 | 
						|
                    TextDrawing.DrawStringLegacy(pa.Graphics, button.SymbolRealized, font, symbolColor, new Rectangle(imagebounds.X + imagebounds.Width / 2, imagebounds.Y, 0, 0), eTextFormat.Default | eTextFormat.HorizontalCenter);
 | 
						|
                else
 | 
						|
                    TextDrawing.DrawStringLegacy(pa.Graphics, button.SymbolRealized, font, symbolColor, new Rectangle(imagebounds.X, imagebounds.Y - ((button.ImagePosition == eImagePosition.Bottom || Dpi.Factor.Width>1 || !pa.IsBackstageTab) ? 0 : 2), 0, 0), eTextFormat.Default);
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            if (button.EnableImageAnimation && button.CanAnimateImage)
 | 
						|
            {
 | 
						|
                if (!button.CurrentlyAnimatingImage)
 | 
						|
                    button.StartImageAnimation(image.Image);
 | 
						|
                ImageAnimator.UpdateFrames();
 | 
						|
            }
 | 
						|
            if (isOnMenu)
 | 
						|
            {
 | 
						|
                image.DrawImage(pa.Graphics, imagebounds);
 | 
						|
            }
 | 
						|
            else if (!button.IsMouseOver && button.HotTrackingStyle == eHotTrackingStyle.Color)
 | 
						|
            {
 | 
						|
                // Draw gray-scale image for this hover style...
 | 
						|
                float[][] array = new float[5][];
 | 
						|
                array[0] = new float[5] { 0.2125f, 0.2125f, 0.2125f, 0, 0 };
 | 
						|
                array[1] = new float[5] { 0.5f, 0.5f, 0.5f, 0, 0 };
 | 
						|
                array[2] = new float[5] { 0.0361f, 0.0361f, 0.0361f, 0, 0 };
 | 
						|
                array[3] = new float[5] { 0, 0, 0, 1, 0 };
 | 
						|
                array[4] = new float[5] { 0.2f, 0.2f, 0.2f, 0, 1 };
 | 
						|
                ColorMatrix grayMatrix = new ColorMatrix(array);
 | 
						|
                ImageAttributes att = new ImageAttributes();
 | 
						|
                att.SetColorMatrix(grayMatrix);
 | 
						|
                image.DrawImage(pa.Graphics, imagebounds, 0, 0, image.ActualWidth, image.ActualHeight, GraphicsUnit.Pixel, att);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                image.DrawImage(pa.Graphics, imagebounds);
 | 
						|
            }
 | 
						|
		}
 | 
						|
 | 
						|
        public override Rectangle GetImageRectangle(ButtonItem button, ItemPaintArgs pa, CompositeImage image)
 | 
						|
        {
 | 
						|
            Rectangle imageRect = Rectangle.Empty;
 | 
						|
            bool isOnMenu = IsOnMenu(button, pa);
 | 
						|
 | 
						|
            // Calculate image position
 | 
						|
            if (image != null || !string.IsNullOrEmpty(button.SymbolRealized))
 | 
						|
            {
 | 
						|
                Size imageSize = button.ImageSize;
 | 
						|
 | 
						|
                Rectangle displayRect = GetDisplayRectangle(button);
 | 
						|
                if (pa.RightToLeft && isOnMenu)
 | 
						|
                {
 | 
						|
                    imageRect = new Rectangle(displayRect.Right - (button.ImageDrawRect.X + imageSize.Width + 2), button.ImageDrawRect.Y + displayRect.Y, imageSize.Width, imageSize.Height);
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    if (!isOnMenu && (button.ImagePosition == eImagePosition.Top || button.ImagePosition == eImagePosition.Bottom))
 | 
						|
                        imageRect = new Rectangle(button.ImageDrawRect.X, button.ImageDrawRect.Y, displayRect.Width, button.ImageDrawRect.Height);
 | 
						|
                    else
 | 
						|
                        imageRect = new Rectangle(button.ImageDrawRect.X, button.ImageDrawRect.Y, button.ImageDrawRect.Width, button.ImageDrawRect.Height);
 | 
						|
                    imageRect.Offset(displayRect.Left, displayRect.Top);
 | 
						|
                    if ((button.EffectiveStyle == eDotNetBarStyle.Windows7 || button.EffectiveStyle == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(button.EffectiveStyle)) && (button is ApplicationButton || button is DevComponents.DotNetBar.Metro.MetroAppButton))
 | 
						|
                        imageRect.Offset(14, (imageRect.Height - imageSize.Height) / 2);
 | 
						|
                    else
 | 
						|
                        imageRect.Offset((imageRect.Width - imageSize.Width) / 2, (imageRect.Height - imageSize.Height) / 2);
 | 
						|
 | 
						|
                    imageRect.Width = imageSize.Width;
 | 
						|
                    imageRect.Height = imageSize.Height;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return imageRect;
 | 
						|
        }
 | 
						|
 | 
						|
        public override Rectangle GetCheckRectangle(ButtonItem button, ItemPaintArgs pa, CompositeImage image)
 | 
						|
        {
 | 
						|
            Rectangle r = Rectangle.Empty;
 | 
						|
            bool isOnMenu = IsOnMenu(button, pa);
 | 
						|
 | 
						|
            Rectangle displayRect = GetDisplayRectangle(button);
 | 
						|
            if (isOnMenu)
 | 
						|
            {
 | 
						|
                //r=new Rectangle(button.DisplayRectangle.X+1,button.DisplayRectangle.Y,button.ImageDrawRect.Width-2,button.DisplayRectangle.Height);
 | 
						|
                //r.Inflate(-1,-1);
 | 
						|
                // This modification fixes the bug of the checkbox appearing on the wrong side of the button item in RightToLeft mode, thanks Brian!
 | 
						|
                if (pa.RightToLeft)
 | 
						|
                {
 | 
						|
                    r = new Rectangle(displayRect.Right - button.ImageDrawRect.Width + 1, displayRect.Y, button.ImageDrawRect.Width - 2, displayRect.Height);
 | 
						|
                    r.Inflate(-1, -1);
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    // LTR also adjusted by one pixel from original alignment to give more logical position.
 | 
						|
                    // TODO: Find out if MS Office 2007 positions like this or like the original. Original might be right.
 | 
						|
                    r = new Rectangle(displayRect.X, displayRect.Y, button.ImageDrawRect.Width - 2, displayRect.Height);
 | 
						|
                    r.Inflate(-1, -1);
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else if (button.HotTrackingStyle == eHotTrackingStyle.Image && image != null)
 | 
						|
            {
 | 
						|
                r = GetImageRectangle(button, pa, image);
 | 
						|
                r.Inflate(2, 2);
 | 
						|
            }
 | 
						|
            else
 | 
						|
                r = displayRect;
 | 
						|
 | 
						|
            return r;
 | 
						|
        }
 | 
						|
 | 
						|
        public override Rectangle GetCustomizeMenuCheckRectangle(ButtonItem button, ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            bool isOnMenu = IsOnMenu(button, pa);
 | 
						|
            Rectangle r = Rectangle.Empty;
 | 
						|
            if (isOnMenu && button.IsOnCustomizeMenu && button.Visible && !button.SystemItem)
 | 
						|
            {
 | 
						|
                Rectangle displayRect = GetDisplayRectangle(button);
 | 
						|
                r = new Rectangle(displayRect.Left, displayRect.Top, displayRect.Height, displayRect.Height);
 | 
						|
                r.Inflate(-1, -1);
 | 
						|
                //System.Diagnostics.Trace.WriteLine("r="+r.ToString()+"  "+button.Text+"  "+button.ImageDrawRect.ToString()+"   "+button.DisplayRectangle.ToString());
 | 
						|
            }
 | 
						|
 | 
						|
            return r;
 | 
						|
        }
 | 
						|
 | 
						|
		public override void PaintCustomizeCheck(ButtonItem button, ItemPaintArgs pa, Rectangle r)
 | 
						|
		{
 | 
						|
			Color clr=pa.Colors.ItemCheckedBackground;
 | 
						|
			Graphics g=pa.Graphics;
 | 
						|
 | 
						|
			if(button.IsMouseOver && !pa.Colors.ItemHotBackground2.IsEmpty)
 | 
						|
			{
 | 
						|
				using(LinearGradientBrush gradient=BarFunctions.CreateLinearGradientBrush(r,pa.Colors.ItemHotBackground,pa.Colors.ItemHotBackground2,pa.Colors.ItemHotBackgroundGradientAngle))
 | 
						|
				{
 | 
						|
					g.FillRectangle(gradient,r);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				if(button.IsMouseOver)
 | 
						|
					clr=pa.Colors.ItemHotBackground;
 | 
						|
 | 
						|
				if(!pa.Colors.ItemCheckedBackground2.IsEmpty && !button.IsMouseOver)
 | 
						|
				{
 | 
						|
					using(LinearGradientBrush gradient=BarFunctions.CreateLinearGradientBrush(r,pa.Colors.ItemCheckedBackground,pa.Colors.ItemCheckedBackground2,pa.Colors.ItemCheckedBackgroundGradientAngle))
 | 
						|
						g.FillRectangle(gradient,r);
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					using(SolidBrush brush=new SolidBrush(clr))
 | 
						|
						g.FillRectangle(brush,r);
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			Pen objPen=new Pen(pa.Colors.ItemCheckedBorder,Dpi.Width1);
 | 
						|
			DisplayHelp.DrawRectangle(g,objPen,r);
 | 
						|
 | 
						|
			objPen.Dispose();
 | 
						|
			objPen=new Pen(pa.Colors.ItemCheckedText);
 | 
						|
			// Draw checker...
 | 
						|
			Point[] pt=new Point[3];
 | 
						|
            pt[0].X = r.Left + (r.Width - Dpi.Width5) / 2 - Dpi.Width1;
 | 
						|
            pt[0].Y = r.Top + (r.Height - Dpi.Height6) / 2 + Dpi.Height3;
 | 
						|
            pt[1].X = pt[0].X + Dpi.Width2;
 | 
						|
            pt[1].Y = pt[0].Y + Dpi.Height2;
 | 
						|
            pt[2].X = pt[1].X + Dpi.Width4;
 | 
						|
            pt[2].Y = pt[1].Y - Dpi.Height4;
 | 
						|
			g.DrawLines(objPen,pt);
 | 
						|
			pt[0].X++;
 | 
						|
			pt[1].X++;
 | 
						|
			pt[2].X++;
 | 
						|
			g.DrawLines(objPen,pt);
 | 
						|
			objPen.Dispose();
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Paints state of the button, either hot, pressed or checked
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="button"></param>
 | 
						|
		/// <param name="pa"></param>
 | 
						|
		/// <param name="image"></param>
 | 
						|
		public override void PaintButtonMouseOver(ButtonItem button, ItemPaintArgs pa, CompositeImage image, Rectangle r)
 | 
						|
		{
 | 
						|
			bool isMouseDown=button.IsMouseDown;
 | 
						|
            bool isOnMenu = IsOnMenu(button, pa);
 | 
						|
			Graphics g=pa.Graphics;
 | 
						|
 | 
						|
			Brush brush=null;
 | 
						|
			Pen pen=null;
 | 
						|
 | 
						|
			if(isMouseDown && !isOnMenu)
 | 
						|
			{
 | 
						|
				if(pa.Colors.ItemPressedBackground2.IsEmpty)
 | 
						|
					brush=new SolidBrush(pa.Colors.ItemPressedBackground);
 | 
						|
				else
 | 
						|
					brush=BarFunctions.CreateLinearGradientBrush(r,pa.Colors.ItemPressedBackground,pa.Colors.ItemPressedBackground2,pa.Colors.ItemPressedBackgroundGradientAngle);
 | 
						|
				pen=new Pen(pa.Colors.ItemPressedBorder,1);
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				if(IsItemEnabled(button, pa))
 | 
						|
				{
 | 
						|
					if(!pa.Colors.ItemHotBackground2.IsEmpty)
 | 
						|
						brush=BarFunctions.CreateLinearGradientBrush(r,pa.Colors.ItemHotBackground,pa.Colors.ItemHotBackground2,pa.Colors.ItemHotBackgroundGradientAngle);
 | 
						|
					else
 | 
						|
						brush=new SolidBrush(pa.Colors.ItemHotBackground);
 | 
						|
                    pen = new Pen(pa.Colors.ItemHotBorder, 1);
 | 
						|
				}
 | 
						|
                else if(isOnMenu)
 | 
						|
				    pen=new Pen(pa.Colors.ItemHotBorder,1);
 | 
						|
			}
 | 
						|
 | 
						|
			if(brush!=null)
 | 
						|
			{
 | 
						|
                //Rectangle rf=r;
 | 
						|
                //rf.Width--;
 | 
						|
                //rf.Height--;
 | 
						|
				g.FillRectangle(brush,r);
 | 
						|
			}
 | 
						|
			if(pen!=null)
 | 
						|
				DisplayHelp.DrawRectangle(g,pen,r);
 | 
						|
 | 
						|
			if(brush!=null)
 | 
						|
				brush.Dispose();
 | 
						|
			if(pen!=null)
 | 
						|
				pen.Dispose();
 | 
						|
		}
 | 
						|
 | 
						|
        protected virtual void PaintButtonCheckBackground(ButtonItem button, ItemPaintArgs pa, Rectangle r)
 | 
						|
        {
 | 
						|
            Graphics g = pa.Graphics;
 | 
						|
            bool isOnMenu = IsOnMenu(button, pa);
 | 
						|
            if (!button.IsMouseOver || isOnMenu)
 | 
						|
            {
 | 
						|
                DisplayHelp.FillRectangle(g, r, pa.Colors.ItemCheckedBackground, pa.Colors.ItemCheckedBackground2, pa.Colors.ItemCheckedBackgroundGradientAngle);
 | 
						|
                DisplayHelp.DrawRectangle(g, pa.Colors.ItemCheckedBorder, r);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
		public override void PaintButtonCheck(ButtonItem button, ItemPaintArgs pa, CompositeImage image, Rectangle r)
 | 
						|
		{
 | 
						|
			if(r.IsEmpty)
 | 
						|
				return;
 | 
						|
            bool isOnMenu = IsOnMenu(button, pa);
 | 
						|
			Graphics g=pa.Graphics;
 | 
						|
 | 
						|
            PaintButtonCheckBackground(button, pa, r);
 | 
						|
 | 
						|
			if((image==null && string.IsNullOrEmpty(button.SymbolRealized) || button.ButtonStyle==eButtonStyle.TextOnlyAlways) && isOnMenu)
 | 
						|
			{
 | 
						|
				// Draw checker...
 | 
						|
                using (Pen pen = new Pen((IsItemEnabled(button, pa) ? pa.Colors.ItemCheckedText : pa.Colors.ItemDisabledText), Dpi.Width1))
 | 
						|
                {
 | 
						|
                    Point[] pt = new Point[3];
 | 
						|
                    pt[0].X = r.Left + (r.Width - Dpi.Width5) / 2 - Dpi.Width1;
 | 
						|
                    pt[0].Y = r.Top + (r.Height - Dpi.Height6) / 2 + Dpi.Height3;
 | 
						|
                    pt[1].X = pt[0].X + Dpi.Width2;
 | 
						|
                    pt[1].Y = pt[0].Y + Dpi.Height2;
 | 
						|
                    pt[2].X = pt[1].X + Dpi.Width4;
 | 
						|
                    pt[2].Y = pt[1].Y - Dpi.Height4;
 | 
						|
                    g.DrawLines(pen, pt);
 | 
						|
                    pt[0].X += Dpi.Width1;
 | 
						|
                    //pt[0].Y
 | 
						|
                    pt[1].X += Dpi.Width1;
 | 
						|
                    //pt[1].Y;
 | 
						|
                    pt[2].X += Dpi.Width1;
 | 
						|
                    //pt[2].Y;
 | 
						|
                    g.DrawLines(pen, pt);
 | 
						|
                }
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		public override Rectangle GetMouseOverRectangle(ButtonItem button, ItemPaintArgs pa, CompositeImage image)
 | 
						|
		{
 | 
						|
            Rectangle r = GetDisplayRectangle(button); 
 | 
						|
 | 
						|
			if(button.HotTrackingStyle==eHotTrackingStyle.None || button.HotTrackingStyle==eHotTrackingStyle.Color)
 | 
						|
				return Rectangle.Empty;
 | 
						|
 | 
						|
			if(button.HotTrackingStyle==eHotTrackingStyle.Image && image!=null)
 | 
						|
			{
 | 
						|
				r=GetImageRectangle(button,pa,image);
 | 
						|
				r.Inflate(2,2);
 | 
						|
				return r;
 | 
						|
			}
 | 
						|
 | 
						|
            bool isOnMenu = IsOnMenu(button, pa);
 | 
						|
			if(isOnMenu)
 | 
						|
			{
 | 
						|
				r.X++;
 | 
						|
				r.Width-=2;
 | 
						|
			}
 | 
						|
 | 
						|
			return r;
 | 
						|
		}
 | 
						|
 | 
						|
		public override eTextFormat GetStringFormat(ButtonItem button, ItemPaintArgs pa, CompositeImage image)
 | 
						|
		{
 | 
						|
			eTextFormat stringFormat=pa.ButtonStringFormat;
 | 
						|
            bool isOnMenu = IsOnMenu(button, pa);
 | 
						|
			if(!isOnMenu)
 | 
						|
			{
 | 
						|
				if(pa.ContainerControl is RibbonStrip && (image==null && string.IsNullOrEmpty(button.SymbolRealized) || button.ImagePosition==eImagePosition.Top || button.ImagePosition==eImagePosition.Bottom)
 | 
						|
                    || button._FixedSizeCenterText)
 | 
						|
					stringFormat |= eTextFormat.HorizontalCenter;
 | 
						|
                else if (pa.ContainerControl is ButtonX)
 | 
						|
                {
 | 
						|
                    ButtonX buttonX = pa.ContainerControl as ButtonX;
 | 
						|
                    if(buttonX.TextAlignment== eButtonTextAlignment.Center)
 | 
						|
                        stringFormat |= eTextFormat.HorizontalCenter;
 | 
						|
                    else if(buttonX.TextAlignment== eButtonTextAlignment.Left)
 | 
						|
                        stringFormat |= eTextFormat.Left;
 | 
						|
                    else if (buttonX.TextAlignment == eButtonTextAlignment.Right && (image == null && string.IsNullOrEmpty(button.SymbolRealized) || button.ImagePosition == eImagePosition.Top || button.ImagePosition == eImagePosition.Bottom))
 | 
						|
                        stringFormat |= eTextFormat.Right;
 | 
						|
                    if (!buttonX.UseMnemonic)
 | 
						|
                        stringFormat |= eTextFormat.NoPrefix;
 | 
						|
                }
 | 
						|
                else if (pa.IsOnMenuBar || (pa.ContainerControl is Bar || pa.ContainerControl is ButtonX || button.Orientation == eOrientation.Vertical) && image == null && string.IsNullOrEmpty(button.SymbolRealized) || button.ImagePosition == eImagePosition.Top || button.ImagePosition == eImagePosition.Bottom)
 | 
						|
                    stringFormat |= eTextFormat.HorizontalCenter;
 | 
						|
 | 
						|
                //if (pa.ContainerControl is RibbonBar) // VerticalCenter in this configuration was causing the bottom pixels to be cut off so remove it for all cases when images are on top or bottom
 | 
						|
                {
 | 
						|
                    if (button.ImagePosition == eImagePosition.Top || button.ImagePosition == eImagePosition.Bottom)
 | 
						|
                    {
 | 
						|
                        if (image != null || !string.IsNullOrEmpty(button.SymbolRealized))
 | 
						|
                            stringFormat |= eTextFormat.WordBreak;
 | 
						|
                        stringFormat = stringFormat & ~(stringFormat & eTextFormat.VerticalCenter) | eTextFormat.Top;
 | 
						|
                    }
 | 
						|
 | 
						|
                }
 | 
						|
			}
 | 
						|
            if (pa.RightToLeft) stringFormat |= eTextFormat.RightToLeft;
 | 
						|
            
 | 
						|
			return stringFormat;
 | 
						|
		}
 | 
						|
 | 
						|
        protected virtual bool IsTextCentered(ButtonItem button, ItemPaintArgs pa, CompositeImage image)
 | 
						|
        {
 | 
						|
            bool isOnMenu = IsOnMenu(button, pa);
 | 
						|
            if (!isOnMenu)
 | 
						|
            {
 | 
						|
                System.Windows.Forms.Control cc = pa.ContainerControl;
 | 
						|
                if (cc is RibbonStrip && (image == null && string.IsNullOrEmpty(button.SymbolRealized) || button.ImagePosition == eImagePosition.Top || button.ImagePosition == eImagePosition.Bottom) || button.Name.StartsWith("sysgallery") || button._FixedSizeCenterText)
 | 
						|
                    return true;
 | 
						|
                else if (cc is ButtonX)
 | 
						|
                {
 | 
						|
                    ButtonX buttonX = cc as ButtonX;
 | 
						|
                    if (buttonX.TextAlignment == eButtonTextAlignment.Center)
 | 
						|
                        return true;
 | 
						|
                }
 | 
						|
                else if (pa.IsOnMenuBar || cc is Bar && image == null && string.IsNullOrEmpty(button.SymbolRealized) || (button.ImagePosition == eImagePosition.Top || button.ImagePosition == eImagePosition.Bottom))
 | 
						|
                    return true;
 | 
						|
            }
 | 
						|
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual Rectangle GetTextRectangle(ButtonItem button, ItemPaintArgs pa, eTextFormat stringFormat, CompositeImage image)
 | 
						|
        {
 | 
						|
            Graphics g = pa.Graphics;
 | 
						|
            bool isOnMenu = IsOnMenu(button, pa);
 | 
						|
            bool isOnMenuBar = pa.IsOnMenuBar;
 | 
						|
            Rectangle itemRect = GetDisplayRectangle(button);
 | 
						|
            Rectangle textRect = button.TextDrawRect;
 | 
						|
            Rectangle imageRect = button.ImageDrawRect;
 | 
						|
            
 | 
						|
            bool rightToLeft = pa.RightToLeft;
 | 
						|
 | 
						|
            // Draw menu item text
 | 
						|
            if (isOnMenu || button.ButtonStyle != eButtonStyle.Default || image == null && string.IsNullOrEmpty(button.SymbolRealized) || (!isOnMenu && (button.ImagePosition == eImagePosition.Top || button.ImagePosition == eImagePosition.Bottom)))
 | 
						|
            {
 | 
						|
                if (isOnMenu)
 | 
						|
                {
 | 
						|
                    if (rightToLeft)
 | 
						|
                    {
 | 
						|
                        //rect = new Rectangle(26, button.TextDrawRect.Y, itemRect.Width - button.ImageDrawRect.Width - 28, button.TextDrawRect.Height);
 | 
						|
                        // This seems to give a better alignment match with the corresponding LTR alignment
 | 
						|
                        if(button.IsOnCustomizeMenu)
 | 
						|
                            textRect = new Rectangle(itemRect.Height, textRect.Y, itemRect.Width - imageRect.Width - 11 - itemRect.Height, textRect.Height);
 | 
						|
                        else
 | 
						|
                            textRect = new Rectangle(17, textRect.Y, itemRect.Width - imageRect.Width - 28, textRect.Height);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                        textRect = new Rectangle(textRect.X, textRect.Y, itemRect.Width - imageRect.Right - 26, textRect.Height);
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    //rect = button.TextDrawRect;
 | 
						|
                    if (button.ImagePosition == eImagePosition.Top || button.ImagePosition == eImagePosition.Bottom)
 | 
						|
                    {
 | 
						|
                        if (button.Orientation != eOrientation.Vertical)
 | 
						|
                        {
 | 
						|
                            textRect = new Rectangle(1, textRect.Y + 2, itemRect.Width - 2, textRect.Height);
 | 
						|
                            if (button.SplitButton || pa.ContainerControl is RibbonBar) textRect.Y += 2;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                if (image == null && string.IsNullOrEmpty(button.SymbolRealized) && (stringFormat & eTextFormat.HorizontalCenter) != eTextFormat.HorizontalCenter &&
 | 
						|
                    !isOnMenu && !isOnMenuBar && textRect.X == 0 && !pa.RightToLeft)
 | 
						|
                    textRect.X = 3;
 | 
						|
 | 
						|
                textRect.Offset(itemRect.Left, itemRect.Top);
 | 
						|
 | 
						|
                if (button.Orientation == eOrientation.Vertical && !isOnMenu)
 | 
						|
                {
 | 
						|
                    if (textRect.Bottom > itemRect.Bottom)
 | 
						|
                        textRect.Height = itemRect.Bottom - textRect.Y;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    if (textRect.Right > itemRect.Right)
 | 
						|
                        textRect.Width = itemRect.Right - textRect.Left;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return textRect;
 | 
						|
        }
 | 
						|
 | 
						|
		public override void PaintButtonText(ButtonItem button, ItemPaintArgs pa, Color textColor, CompositeImage image)
 | 
						|
		{
 | 
						|
            if (!button.RenderText) return;
 | 
						|
			Graphics g=pa.Graphics;
 | 
						|
			eTextFormat stringFormat=GetStringFormat(button,pa,image);
 | 
						|
            bool isOnMenu = IsOnMenu(button, pa);
 | 
						|
			bool isOnMenuBar=pa.IsOnMenuBar;
 | 
						|
 | 
						|
            Rectangle itemRect = GetDisplayRectangle(button);
 | 
						|
			Rectangle rect=GetTextRectangle(button, pa, stringFormat, image);
 | 
						|
			
 | 
						|
			Font font=button.GetFont(pa, false);
 | 
						|
            bool rightToLeft = pa.RightToLeft;
 | 
						|
 | 
						|
            //if (isOnMenu && rightToLeft || (stringFormat & eTextFormat.Left) == eTextFormat.Left)
 | 
						|
            //    stringFormat |=eTextFormat.Right;
 | 
						|
 | 
						|
			// Draw menu item text
 | 
						|
            if (isOnMenu || button.ButtonStyle != eButtonStyle.Default || image == null && string.IsNullOrEmpty(button.SymbolRealized) || (!isOnMenu && (button.ImagePosition == eImagePosition.Top || button.ImagePosition == eImagePosition.Bottom)))
 | 
						|
			{
 | 
						|
				if(button.Orientation==eOrientation.Vertical && !isOnMenu)
 | 
						|
				{
 | 
						|
					g.RotateTransform(90);
 | 
						|
                    if (button.TextMarkupBody == null)
 | 
						|
                    {
 | 
						|
                        TextDrawing.DrawStringLegacy(g, GetDrawText(button.Text), font, textColor, new Rectangle(rect.Top, -rect.Right, rect.Height, rect.Width), stringFormat);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        TextMarkup.MarkupDrawContext d = new TextMarkup.MarkupDrawContext(g, font, textColor, rightToLeft);
 | 
						|
                        d.HotKeyPrefixVisible = !((stringFormat & eTextFormat.HidePrefix) == eTextFormat.HidePrefix);
 | 
						|
                        button.TextMarkupBody.Bounds = new Rectangle(rect.Top, -rect.Right, button.TextMarkupBody.Bounds.Width, button.TextMarkupBody.Bounds.Height);
 | 
						|
                        button.TextMarkupBody.Render(d);
 | 
						|
                    }
 | 
						|
 | 
						|
					g.ResetTransform();
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
                    if (button.TextMarkupBody == null)
 | 
						|
                    {
 | 
						|
						#if FRAMEWORK20
 | 
						|
                        if (pa.GlassEnabled && (button.Parent is CaptionItemContainer || button.Parent is RibbonTabItemContainer && (button.EffectiveStyle == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(button.EffectiveStyle))) && !(pa.ContainerControl is QatToolbar))
 | 
						|
                        {
 | 
						|
                            if (!pa.CachedPaint)
 | 
						|
                                Office2007RibbonControlPainter.PaintTextOnGlass(g, button.Text, font, rect, TextDrawing.GetTextFormat(stringFormat), textColor, true, !button.IsMouseOver && !ColorFunctions.IsEqual(textColor, Color.White), 7);
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
						#endif
 | 
						|
                            TextDrawing.DrawString(g, GetDrawText(button.Text), font, textColor, rect, stringFormat);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        TextMarkup.MarkupDrawContext d = new TextMarkup.MarkupDrawContext(g, font, textColor, rightToLeft);
 | 
						|
                        d.HotKeyPrefixVisible = !((stringFormat & eTextFormat.HidePrefix) == eTextFormat.HidePrefix);
 | 
						|
                        d.ContextObject = button;
 | 
						|
                        Rectangle mr = new Rectangle((rightToLeft && isOnMenu?rect.X+rect.Width-button.TextMarkupBody.Bounds.Width:rect.X), rect.Y + (rect.Height - button.TextMarkupBody.Bounds.Height) / 2 /*- (isOnMenu ? -1 : -1)*/+1, button.TextMarkupBody.Bounds.Width, button.TextMarkupBody.Bounds.Height);
 | 
						|
                        if (pa.ContainerControl is RibbonBar && (button.ImagePosition == eImagePosition.Top || button.ImagePosition == eImagePosition.Bottom))
 | 
						|
                            mr = new Rectangle(rect.X + (rect.Width - button.TextMarkupBody.Bounds.Width) / 2, rect.Y, button.TextMarkupBody.Bounds.Width, button.TextMarkupBody.Bounds.Height);
 | 
						|
                        else if (IsTextCentered(button, pa, image))
 | 
						|
                            mr.Offset((rect.Width - mr.Width) / 2, 0);
 | 
						|
                        if (button._FixedSizeCenterText) mr.Y--;
 | 
						|
                        button.TextMarkupBody.Bounds = mr;
 | 
						|
                        button.TextMarkupBody.Render(d);
 | 
						|
                    }
 | 
						|
 | 
						|
					if(!button.DesignMode && button.Focused && !isOnMenu && !isOnMenuBar && !(pa.ContainerControl is ButtonX && !((ButtonX)pa.ContainerControl).FocusCuesEnabled))
 | 
						|
					{
 | 
						|
						Rectangle r=itemRect;
 | 
						|
                        r.Inflate(-2, -2);
 | 
						|
						ControlPaint.DrawFocusRectangle(g,r);
 | 
						|
					}
 | 
						|
				}					
 | 
						|
			}
 | 
						|
			
 | 
						|
			// Draw Shortcut text if needed
 | 
						|
			if( button.DrawShortcutText!="" && isOnMenu && !button.IsOnCustomizeDialog)
 | 
						|
			{
 | 
						|
                stringFormat |= eTextFormat.HidePrefix;
 | 
						|
                
 | 
						|
                //if(rightToLeft)
 | 
						|
                //    stringFormat = stringFormat & ~(stringFormat & eTextFormat.Right) | eTextFormat.Left;
 | 
						|
                //else
 | 
						|
                    stringFormat|=eTextFormat.Right;
 | 
						|
 | 
						|
				TextDrawing.DrawString(g, button.DrawShortcutText, font, textColor, rect, stringFormat);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        protected virtual Rectangle GetTotalSubItemsRect(ButtonItem button)
 | 
						|
        {
 | 
						|
            return button.GetTotalSubItemsRect();
 | 
						|
        }
 | 
						|
 | 
						|
		public override void PaintExpandButton(ButtonItem button, ItemPaintArgs pa)
 | 
						|
		{
 | 
						|
			Graphics g=pa.Graphics;
 | 
						|
            bool isOnMenu = IsOnMenu(button, pa);
 | 
						|
            Rectangle itemRect = GetDisplayRectangle(button);
 | 
						|
			bool mouseOver=button.IsMouseOver;
 | 
						|
 | 
						|
            Color textColor = this.GetTextColor(button, pa);
 | 
						|
            using (SolidBrush textBrush = new SolidBrush(textColor))
 | 
						|
            {
 | 
						|
                // If it has subitems draw the triangle to indicate that
 | 
						|
                if ((button.SubItems.Count > 0 || button.PopupType == ePopupType.Container) && button.ShowSubItems)
 | 
						|
                {
 | 
						|
                    if (isOnMenu)
 | 
						|
                    {
 | 
						|
                        Point[] p = new Point[3];
 | 
						|
                        if (pa.RightToLeft)
 | 
						|
                        {
 | 
						|
                            p[0].X = itemRect.Left + 8;
 | 
						|
                            p[0].Y = itemRect.Top + (itemRect.Height - 8) / 2;
 | 
						|
                            p[1].X = p[0].X;
 | 
						|
                            p[1].Y = p[0].Y + 8;
 | 
						|
                            p[2].X = p[0].X - 4;
 | 
						|
                            p[2].Y = p[0].Y + 4;
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            p[0].X = itemRect.Left + itemRect.Width - 12;
 | 
						|
                            p[0].Y = itemRect.Top + (itemRect.Height - 8) / 2;
 | 
						|
                            p[1].X = p[0].X;
 | 
						|
                            p[1].Y = p[0].Y + 8;
 | 
						|
                            p[2].X = p[0].X + 4;
 | 
						|
                            p[2].Y = p[0].Y + 4;
 | 
						|
                        }
 | 
						|
 | 
						|
                        g.FillPolygon(textBrush, p);
 | 
						|
                    }
 | 
						|
                    else if (!button.SubItemsRect.IsEmpty)
 | 
						|
                    {
 | 
						|
                        if (IsItemEnabled(button, pa) && ((mouseOver || button.Checked) && !button.Expanded && button.HotTrackingStyle != eHotTrackingStyle.None && button.HotTrackingStyle != eHotTrackingStyle.Image) && !button.AutoExpandOnClick)
 | 
						|
                        {
 | 
						|
                            Rectangle r = GetTotalSubItemsRect(button); // button.SubItemsRect;
 | 
						|
                            r.Offset(itemRect.Location);
 | 
						|
                            using (Pen mypen = new Pen(mouseOver?pa.Colors.ItemHotBorder:pa.Colors.ItemCheckedBorder))
 | 
						|
                                DisplayHelp.DrawRectangle(g, mypen, r);
 | 
						|
                        }
 | 
						|
                        PaintButtonExpandIndicator(button, pa);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
		}
 | 
						|
 | 
						|
        protected virtual void PaintMenuItemSide(ButtonItem button, ItemPaintArgs pa, Rectangle sideRect)
 | 
						|
        {
 | 
						|
            Graphics g = pa.Graphics;
 | 
						|
            Region oldClip = g.Clip.Clone() as Region;
 | 
						|
            g.SetClip(sideRect);
 | 
						|
 | 
						|
            sideRect.Inflate(0, 1);
 | 
						|
 | 
						|
            // Draw side bar
 | 
						|
            if (button.MenuVisibility == eMenuVisibility.VisibleIfRecentlyUsed && !button.RecentlyUsed)
 | 
						|
            {
 | 
						|
                DisplayHelp.FillRectangle(g, sideRect, pa.Colors.MenuUnusedSide, pa.Colors.MenuUnusedSide2, pa.Colors.MenuUnusedSideGradientAngle);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                DisplayHelp.FillRectangle(g, sideRect, pa.Colors.MenuSide, pa.Colors.MenuSide2, pa.Colors.MenuSideGradientAngle);
 | 
						|
            }
 | 
						|
 | 
						|
            if (oldClip != null)
 | 
						|
                g.Clip = oldClip;
 | 
						|
            else
 | 
						|
                g.ResetClip();
 | 
						|
        }
 | 
						|
 | 
						|
        public override void PaintButtonBackground(ButtonItem button, ItemPaintArgs pa, CompositeImage image)
 | 
						|
        {
 | 
						|
            Graphics g = pa.Graphics;
 | 
						|
            bool isOnMenu = IsOnMenu(button, pa);
 | 
						|
 | 
						|
            Rectangle displayRect = GetDisplayRectangle(button);
 | 
						|
            if (isOnMenu)
 | 
						|
            {
 | 
						|
                Rectangle sideRect = new Rectangle(displayRect.Left, displayRect.Top, button.ImageDrawRect.Right, displayRect.Height);
 | 
						|
                if (pa.RightToLeft)
 | 
						|
                {
 | 
						|
                    sideRect = new Rectangle(displayRect.Right - button.ImageDrawRect.Right, displayRect.Top, button.ImageDrawRect.Right, displayRect.Height);
 | 
						|
                }
 | 
						|
 | 
						|
                PaintMenuItemSide(button, pa, sideRect);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                // Draw button background
 | 
						|
                if (!pa.Colors.ItemBackground.IsEmpty)
 | 
						|
                {
 | 
						|
                    if (pa.Colors.ItemBackground2.IsEmpty)
 | 
						|
                    {
 | 
						|
                        using (SolidBrush mybrush = new SolidBrush(pa.Colors.ItemBackground))
 | 
						|
                            g.FillRectangle(mybrush, displayRect);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        using (LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(displayRect, pa.Colors.ItemBackground, pa.Colors.ItemBackground2, pa.Colors.ItemBackgroundGradientAngle))
 | 
						|
                            g.FillRectangle(gradient, displayRect);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else if (!IsItemEnabled(button, pa) && !pa.Colors.ItemDisabledBackground.IsEmpty)
 | 
						|
                {
 | 
						|
                    using (SolidBrush mybrush = new SolidBrush(pa.Colors.ItemDisabledBackground))
 | 
						|
                        g.FillRectangle(mybrush, displayRect);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            Rectangle itemRect = displayRect;
 | 
						|
            if (IsItemEnabled(button, pa) || button.DesignMode)
 | 
						|
            {
 | 
						|
                if (button.Expanded && !isOnMenu)
 | 
						|
                {
 | 
						|
                    // DotNet Style
 | 
						|
                    if (pa.Colors.ItemExpandedBackground2.IsEmpty)
 | 
						|
                    {
 | 
						|
                        Rectangle rBack = displayRect;
 | 
						|
                        if (!pa.Colors.ItemExpandedShadow.IsEmpty)
 | 
						|
                            rBack.Width -= 2;
 | 
						|
                        using (SolidBrush mybrush = new SolidBrush(pa.Colors.ItemExpandedBackground))
 | 
						|
                            g.FillRectangle(mybrush, rBack);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(new Rectangle(itemRect.Left, itemRect.Top, itemRect.Width - 2, itemRect.Height), pa.Colors.ItemExpandedBackground, pa.Colors.ItemExpandedBackground2, pa.Colors.ItemExpandedBackgroundGradientAngle);
 | 
						|
                        Rectangle rBack = new Rectangle(itemRect.Left, itemRect.Top, itemRect.Width, itemRect.Height);
 | 
						|
                        if (!pa.Colors.ItemExpandedShadow.IsEmpty)
 | 
						|
                            rBack.Width -= 2;
 | 
						|
                        g.FillRectangle(gradient, rBack);
 | 
						|
                        gradient.Dispose();
 | 
						|
                    }
 | 
						|
                    Point[] p;
 | 
						|
                    if (button.Orientation == eOrientation.Horizontal && button.PopupSide == ePopupSide.Default)
 | 
						|
                        p = new Point[4];
 | 
						|
                    else
 | 
						|
                        p = new Point[5];
 | 
						|
                    p[0].X = itemRect.Left;
 | 
						|
                    p[0].Y = itemRect.Top + itemRect.Height - 1;
 | 
						|
                    p[1].X = itemRect.Left;
 | 
						|
                    p[1].Y = itemRect.Top;
 | 
						|
                    if (button.Orientation == eOrientation.Horizontal /*&& !pa.Colors.ItemExpandedShadow.IsEmpty*/)
 | 
						|
                    {
 | 
						|
                        if (!pa.Colors.ItemExpandedShadow.IsEmpty)
 | 
						|
                            p[2].X = itemRect.Left + itemRect.Width - 3;
 | 
						|
                        else
 | 
						|
                            p[2].X = itemRect.Right - 1;
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                        p[2].X = itemRect.Left + itemRect.Width - 1;
 | 
						|
                    p[2].Y = itemRect.Top;
 | 
						|
                    if (button.Orientation == eOrientation.Horizontal /*&& !pa.Colors.ItemExpandedShadow.IsEmpty*/)
 | 
						|
                    {
 | 
						|
                        if (!pa.Colors.ItemExpandedShadow.IsEmpty)
 | 
						|
                            p[3].X = itemRect.Left + itemRect.Width - 3;
 | 
						|
                        else
 | 
						|
                            p[3].X = itemRect.Right - 1;
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                        p[3].X = itemRect.Left + itemRect.Width - 1;
 | 
						|
 | 
						|
                    p[3].Y = itemRect.Top + itemRect.Height - 1;
 | 
						|
 | 
						|
                    if (button.Orientation == eOrientation.Vertical || button.PopupSide != ePopupSide.Default)
 | 
						|
                    {
 | 
						|
                        p[4].X = itemRect.Left;
 | 
						|
                        p[4].Y = itemRect.Top + itemRect.Height - 1;
 | 
						|
                    }
 | 
						|
 | 
						|
                    if (!pa.Colors.ItemExpandedBorder.IsEmpty)
 | 
						|
                    {
 | 
						|
                        using (Pen mypen = new Pen(pa.Colors.ItemExpandedBorder, 1))
 | 
						|
                            g.DrawLines(mypen, p);
 | 
						|
                    }
 | 
						|
                    // Draw the shadow
 | 
						|
                    if (!pa.Colors.ItemExpandedShadow.IsEmpty && button.Orientation == eOrientation.Horizontal)
 | 
						|
                    {
 | 
						|
                        using (SolidBrush shadow = new SolidBrush(pa.Colors.ItemExpandedShadow))
 | 
						|
                            g.FillRectangle(shadow, itemRect.Left + itemRect.Width - 2, itemRect.Top + 2, 2, itemRect.Height - 2); // TODO: ADD GRADIENT SHADOW					
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
	}
 | 
						|
}
 |