969 lines
		
	
	
		
			45 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			969 lines
		
	
	
		
			45 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 System;
 | |
| 
 | |
| 
 | |
| namespace DevComponents.DotNetBar
 | |
| {
 | |
|     internal class Office2007ButtonItemPainter : Office2003ButtonItemPainter, IOffice2007Painter
 | |
|     {
 | |
|         #region Private Variables
 | |
|         private int m_CornerSize = 2;
 | |
|         private Office2007ColorTable m_ColorTable = null; //new Office2007ColorTable();
 | |
|         private static RoundRectangleShapeDescriptor _DefaultOffice2007Shape = new RoundRectangleShapeDescriptor(2);
 | |
|         private static RoundRectangleShapeDescriptor _DefaultOffice2007LeftShape = new RoundRectangleShapeDescriptor(2, 0, 2, 0);
 | |
|         private static RoundRectangleShapeDescriptor _DefaultOffice2007RightShape = new RoundRectangleShapeDescriptor(0, 2, 0, 2);
 | |
|         private static RoundRectangleShapeDescriptor _DefaultOffice2007TopShape = new RoundRectangleShapeDescriptor(2, 2, 0, 0);
 | |
|         private static RoundRectangleShapeDescriptor _DefaultOffice2007BottomShape = new RoundRectangleShapeDescriptor(0, 0, 2, 2);
 | |
| 
 | |
|         private static RoundRectangleShapeDescriptor _DefaultMetroShape = new RoundRectangleShapeDescriptor(0);
 | |
|         #endregion
 | |
| 
 | |
|         #region Implementation
 | |
|         private bool IsOffice2003Rendering(ButtonItem button, ItemPaintArgs pa)
 | |
|         {
 | |
|             if (button.ColorTable == eButtonColor.Flat || pa.Owner is DotNetBarManager && string.IsNullOrEmpty(button.CustomColorName))
 | |
|                 return true;
 | |
|             return false;
 | |
|         }
 | |
| 
 | |
|         /// <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)
 | |
|         {
 | |
|             if (IsOffice2003Rendering(button, pa))
 | |
|             {
 | |
|                 base.PaintButtonMouseOver(button, pa, image, r);
 | |
|                 return;
 | |
|             }
 | |
|             //PaintState(button, pa, image, r, button.IsMouseDown);
 | |
|         }
 | |
| 
 | |
|         public override void PaintButtonCheck(ButtonItem button, ItemPaintArgs pa, CompositeImage image, Rectangle r)
 | |
|         {
 | |
|             if (IsOffice2003Rendering(button, pa))
 | |
|             {
 | |
|                 base.PaintButtonCheck(button, pa, image, r);
 | |
|                 return;
 | |
|             }
 | |
|             bool isOnMenu = IsOnMenu(button, pa);
 | |
|             if (isOnMenu)
 | |
|                 base.PaintButtonCheck(button, pa, image, r);
 | |
|             //else
 | |
|             //    PaintState(button, pa, image, r, button.IsMouseDown);
 | |
|         }
 | |
| 
 | |
|         protected virtual IShapeDescriptor GetButtonShape(ButtonItem button, ItemPaintArgs pa)
 | |
|         {
 | |
|             IShapeDescriptor shape = Office2007ButtonItemPainter.GetButtonShape(button);
 | |
| 
 | |
|             if (pa.ContainerControl is ButtonX)
 | |
|                 shape = ((ButtonX)pa.ContainerControl).GetButtonShape();
 | |
|             else if (pa.ContainerControl is NavigationBar)
 | |
|                 shape = ((NavigationBar)pa.ContainerControl).ButtonShape;
 | |
|             return shape;
 | |
|         }
 | |
| 
 | |
|         protected virtual void PaintState(ButtonItem button, ItemPaintArgs pa, CompositeImage image, Rectangle r, bool isMouseDown)
 | |
|         {
 | |
|             if (r.IsEmpty)
 | |
|                 return;
 | |
| 
 | |
|             bool isOnMenu = pa.IsOnMenu;
 | |
|             Office2007ColorTable colorTable = this.ColorTable;
 | |
| 
 | |
|             Graphics g = pa.Graphics;
 | |
|             IShapeDescriptor shape = GetButtonShape(button, pa);
 | |
| 
 | |
|             eButtonContainer buttonCont = GetButtonContainerQualifier(pa, button);
 | |
|             Office2007ButtonItemColorTable buttonColorTable = GetColorTable(button, buttonCont);
 | |
| 
 | |
|             Region oldClip = g.Clip;
 | |
|             try
 | |
|             {
 | |
|                 g.SetClip(r, CombineMode.Intersect);
 | |
| 
 | |
|                 Office2007ButtonItemStateColorTable stateColors = buttonColorTable.Default;
 | |
| 
 | |
|                 if (IsOnMenu(button, pa))
 | |
|                 {
 | |
|                     Rectangle sideRect = new Rectangle(button.DisplayRectangle.Left, button.DisplayRectangle.Top, button.ImageDrawRect.Right, button.DisplayRectangle.Height);
 | |
|                     if (pa.RightToLeft)
 | |
|                         sideRect = new Rectangle(button.DisplayRectangle.Right - button.ImageDrawRect.Width, button.DisplayRectangle.Top, button.ImageDrawRect.Width, button.DisplayRectangle.Height);
 | |
| 
 | |
|                     PaintMenuItemSide(button, pa, sideRect);
 | |
|                 }
 | |
| 
 | |
|                 if (!IsItemEnabled(button, pa))
 | |
|                 {
 | |
|                     if (!isOnMenu)
 | |
|                         PaintStateBackground(button, g, buttonColorTable.Disabled, r, shape, pa.IsDefaultButton, true);
 | |
|                     g.Clip = oldClip;
 | |
|                     return;
 | |
|                 }
 | |
| 
 | |
|                 bool mouseOver = false;
 | |
|                 bool expanded = false;
 | |
|                 if (!button.DesignMode)
 | |
|                 {
 | |
|                     if (button.IsMouseOver && button.HotTrackingStyle != eHotTrackingStyle.Image && button.HotTrackingStyle != eHotTrackingStyle.None)
 | |
|                     {
 | |
|                         stateColors = buttonColorTable.MouseOver;
 | |
|                         mouseOver = true;
 | |
|                     }
 | |
| 
 | |
|                     if (isMouseDown && button.HotTrackingStyle != eHotTrackingStyle.Image && button.HotTrackingStyle != eHotTrackingStyle.None)
 | |
|                     {
 | |
|                         if (buttonColorTable.Pressed != null)
 | |
|                             stateColors = buttonColorTable.Pressed;
 | |
|                     }
 | |
|                     else if (button.Checked && !button.IsMouseOver && !IsOnMenu(button, pa))
 | |
|                     {
 | |
|                         stateColors = buttonColorTable.Checked;
 | |
|                     }
 | |
|                     else if (button.Expanded && button.HotTrackingStyle != eHotTrackingStyle.Image && !(!mouseOver && pa.IsOnMenu))
 | |
|                     {
 | |
|                         stateColors = buttonColorTable.Expanded;
 | |
|                         expanded = true;
 | |
|                     }
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     if (button.Checked && !IsOnMenu(button, pa))
 | |
|                     {
 | |
|                         stateColors = buttonColorTable.Checked;
 | |
|                     }
 | |
|                     else if (button.Expanded && button.HotTrackingStyle != eHotTrackingStyle.Image)
 | |
|                     {
 | |
|                         stateColors = buttonColorTable.Expanded;
 | |
|                         expanded = true;
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 Rectangle subRect = GetTotalSubItemsRect(button);
 | |
|                 bool isSplitButton = (mouseOver || expanded) && !button.AutoExpandOnClick && !subRect.IsEmpty && !IsOnMenu(button, pa);
 | |
|                 eDotNetBarStyle effectiveStyle = button.EffectiveStyle;
 | |
|                 subRect.Offset(button.DisplayRectangle.Location);
 | |
| 
 | |
|                 if (isSplitButton && !button.Checked &&
 | |
|                     (effectiveStyle == eDotNetBarStyle.Office2010 || effectiveStyle == eDotNetBarStyle.Windows7 || StyleManager.IsMetro(effectiveStyle)))
 | |
|                 {
 | |
|                     Rectangle[] rects = DisplayHelp.ExcludeRectangle(r, subRect);
 | |
|                     if (rects.Length > 0 && (button.IsMouseOverExpand || button.Expanded))
 | |
|                         rects = DisplayHelp.ExcludeRectangle(r, rects[0]);
 | |
|                     if (rects.Length > 0)
 | |
|                     {
 | |
|                         PaintStateBackground(button, g, buttonColorTable.MouseOverSplitInactive, r, shape, pa.IsDefaultButton, !pa.IsOnNavigationBar);
 | |
|                         if (rects[0].X == r.X && rects[0].Right < r.Right) // Left aligned
 | |
|                             shape = (StyleManager.IsMetro(effectiveStyle)) ? _DefaultMetroShape : _DefaultOffice2007LeftShape;
 | |
|                         else if (rects[0].X > r.X && rects[0].Right == r.Right) // Right aligned
 | |
|                             shape = (StyleManager.IsMetro(effectiveStyle)) ? _DefaultMetroShape : _DefaultOffice2007RightShape;
 | |
|                         else if (rects[0].Y == r.Y && rects[0].Bottom < r.Bottom) // Top aligned
 | |
|                             shape = (StyleManager.IsMetro(effectiveStyle)) ? _DefaultMetroShape : _DefaultOffice2007TopShape;
 | |
|                         else if (rects[0].Y > r.Y && rects[0].Bottom == r.Bottom) // Bottom aligned
 | |
|                             shape = (StyleManager.IsMetro(effectiveStyle)) ? _DefaultMetroShape : _DefaultOffice2007BottomShape;
 | |
| 
 | |
|                         PaintStateBackground(button, g, stateColors, rects[0], shape, pa.IsDefaultButton, !pa.IsOnNavigationBar);
 | |
|                     }
 | |
|                     else
 | |
|                         PaintStateBackground(button, g, stateColors, r, shape, pa.IsDefaultButton, !pa.IsOnNavigationBar);
 | |
|                 }
 | |
|                 else
 | |
|                     PaintStateBackground(button, g, stateColors, r, shape, pa.IsDefaultButton, !pa.IsOnNavigationBar);
 | |
| 
 | |
|                 if (isSplitButton && !(effectiveStyle == eDotNetBarStyle.Office2010 || effectiveStyle == eDotNetBarStyle.Windows7 || StyleManager.IsMetro(effectiveStyle)))
 | |
|                 {
 | |
|                     using (Brush brush = GetOverlayInactiveBrush())
 | |
|                     {
 | |
|                         Rectangle backRect = button.DisplayRectangle;
 | |
|                         backRect.Inflate(-1, -1);
 | |
| 
 | |
|                         if (!button.IsMouseOverExpand && !expanded)
 | |
|                         {
 | |
|                             subRect.Inflate(-1, -1);
 | |
|                             g.SetClip(subRect, CombineMode.Intersect);
 | |
|                             GraphicsPath backPath = shape.GetShape(backRect);
 | |
|                             if (backPath != null)
 | |
|                             {
 | |
|                                 g.FillPath(brush, backPath);
 | |
|                                 backPath.Dispose();
 | |
|                             }
 | |
|                         }
 | |
|                         else if (!mouseOver || button.IsMouseOverExpand)
 | |
|                         {
 | |
|                             g.SetClip(subRect, CombineMode.Exclude);
 | |
|                             GraphicsPath backPath = shape.GetShape(backRect);
 | |
|                             if (backPath != null)
 | |
|                             {
 | |
|                                 g.FillPath(brush, backPath);
 | |
|                                 backPath.Dispose();
 | |
|                             }
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 g.Clip = oldClip;
 | |
|             }
 | |
|             finally
 | |
|             {
 | |
|                 if (oldClip != null) oldClip.Dispose();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected virtual void PaintStateBackground(ButtonItem button, Graphics g, Office2007ButtonItemStateColorTable stateColors, Rectangle r, IShapeDescriptor shape, bool isDefault, bool paintBorder)
 | |
|         {
 | |
|             PaintBackground(g, stateColors, r, shape, isDefault, paintBorder);
 | |
|         }
 | |
| 
 | |
|         public static void PaintBackground(Graphics g, Office2007ButtonItemStateColorTable stateColors, Rectangle r, IShapeDescriptor shape)
 | |
|         {
 | |
|             PaintBackground(g, stateColors, r, shape, false);
 | |
|         }
 | |
| 
 | |
|         public static void PaintBackground(Graphics g, Office2007ButtonItemStateColorTable stateColors, Rectangle r, IShapeDescriptor shape, bool isDefault)
 | |
|         {
 | |
|             PaintBackground(g, stateColors, r, shape, isDefault, true);
 | |
|         }
 | |
| 
 | |
|         public static void PaintBackground(Graphics g, Office2007ButtonItemStateColorTable stateColors, Rectangle r, IShapeDescriptor shape, bool isDefault, bool paintBorder)
 | |
|         {
 | |
|             float topSplit = .35f;
 | |
|             float bottomSplit = .65f;
 | |
|             if (!shape.CanDrawShape(r)) return;
 | |
| 
 | |
|             if (stateColors != null)
 | |
|             {
 | |
|                 Rectangle fillRectangle = r;
 | |
|                 
 | |
|                 Rectangle backRect = new Rectangle(fillRectangle.X, fillRectangle.Y, fillRectangle.Width, (int)(fillRectangle.Height * topSplit));
 | |
|                 if (!stateColors.OuterBorder.IsEmpty && paintBorder)
 | |
|                     fillRectangle.Width--;
 | |
|                 GraphicsPath backPath = shape.GetShape(fillRectangle);
 | |
|                 if (stateColors.Background != null)
 | |
|                 {
 | |
|                     if (backPath != null)
 | |
|                     {
 | |
|                         if (stateColors.Background.End.IsEmpty)
 | |
|                         {
 | |
|                             using (SolidBrush brush = new SolidBrush(stateColors.Background.Start))
 | |
|                                 g.FillPath(brush, backPath);
 | |
|                         }
 | |
|                         else
 | |
|                         {
 | |
|                             using (LinearGradientBrush lb = new LinearGradientBrush(fillRectangle, stateColors.Background.Start, stateColors.Background.End, stateColors.Background.GradientAngle))
 | |
|                             {
 | |
|                                 g.FillPath(lb, backPath);
 | |
|                             }
 | |
|                         }
 | |
|                         backPath.Dispose();
 | |
|                     }
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     if (backPath != null && stateColors.TopBackground!= null && stateColors.BottomBackground!=null)
 | |
|                     {
 | |
|                         if (stateColors.TopBackground.End.IsEmpty && stateColors.BottomBackground.End.IsEmpty)
 | |
|                         {
 | |
|                             if (stateColors.TopBackground.Start == stateColors.BottomBackground.Start)
 | |
|                                 using (SolidBrush lb = new SolidBrush(stateColors.TopBackground.Start))
 | |
|                                     g.FillPath(lb, backPath);
 | |
|                             else
 | |
|                             {
 | |
|                                 using (LinearGradientBrush lb = new LinearGradientBrush(fillRectangle, stateColors.TopBackground.Start, stateColors.BottomBackground.Start, stateColors.TopBackground.GradientAngle))
 | |
|                                 {
 | |
|                                     g.FillPath(lb, backPath);
 | |
|                                 }
 | |
|                             }
 | |
|                         }
 | |
|                         else
 | |
|                         {
 | |
|                             using (LinearGradientBrush lb = new LinearGradientBrush(fillRectangle, stateColors.TopBackground.Start, stateColors.BottomBackground.End, stateColors.TopBackground.GradientAngle))
 | |
|                             {
 | |
|                                 ColorBlend cb = new ColorBlend(4);
 | |
|                                 cb.Colors = new Color[] { stateColors.TopBackground.Start, stateColors.TopBackground.End, stateColors.BottomBackground.Start, stateColors.BottomBackground.End };
 | |
|                                 cb.Positions = new float[] { 0, topSplit, topSplit, 1f };
 | |
|                                 lb.InterpolationColors = cb;
 | |
|                                 g.FillPath(lb, backPath);
 | |
|                             }
 | |
|                         }
 | |
|                         backPath.Dispose();
 | |
|                     }
 | |
| 
 | |
|                     if (stateColors.TopBackgroundHighlight!=null && !stateColors.TopBackgroundHighlight.IsEmpty)
 | |
|                     {
 | |
|                         Rectangle ellipse = new Rectangle(fillRectangle.X, fillRectangle.Y, fillRectangle.Width, fillRectangle.Height);
 | |
|                         GraphicsPath path = new GraphicsPath();
 | |
|                         path.AddEllipse(ellipse);
 | |
|                         PathGradientBrush brush = new PathGradientBrush(path);
 | |
|                         brush.CenterColor = stateColors.TopBackgroundHighlight.Start;
 | |
|                         brush.SurroundColors = new Color[] { stateColors.TopBackgroundHighlight.End };
 | |
|                         brush.CenterPoint = new PointF(ellipse.X + ellipse.Width / 2, fillRectangle.Bottom);
 | |
|                         Blend blend = new Blend();
 | |
|                         blend.Factors = new float[] { 0f, .5f, 1f };
 | |
|                         blend.Positions = new float[] { .0f, .4f, 1f };
 | |
|                         brush.Blend = blend;
 | |
| 
 | |
|                         g.FillRectangle(brush, backRect);
 | |
|                         brush.Dispose();
 | |
|                         path.Dispose();
 | |
|                     }
 | |
| 
 | |
|                     // Draw Bottom part
 | |
|                     int bottomHeight = (int)(fillRectangle.Height * bottomSplit);
 | |
|                     backRect = new Rectangle(fillRectangle.X, fillRectangle.Y + backRect.Height, fillRectangle.Width, fillRectangle.Height - backRect.Height);
 | |
| 
 | |
|                     if (stateColors.BottomBackgroundHighlight!=null && !stateColors.BottomBackgroundHighlight.IsEmpty)
 | |
|                     {
 | |
|                         Rectangle ellipse = new Rectangle(fillRectangle.X, fillRectangle.Y + bottomHeight - 2, fillRectangle.Width, fillRectangle.Height + 4);
 | |
|                         GraphicsPath path = new GraphicsPath();
 | |
|                         path.AddEllipse(ellipse);
 | |
|                         PathGradientBrush brush = new PathGradientBrush(path);
 | |
|                         brush.CenterColor = stateColors.BottomBackgroundHighlight.Start;
 | |
|                         brush.SurroundColors = new Color[] { stateColors.BottomBackgroundHighlight.End };
 | |
|                         brush.CenterPoint = new PointF(ellipse.X + ellipse.Width / 2, fillRectangle.Bottom);
 | |
|                         Blend blend = new Blend();
 | |
|                         blend.Factors = new float[] { 0f, .5f, .6f };
 | |
|                         blend.Positions = new float[] { .0f, .4f, 1f };
 | |
|                         brush.Blend = blend;
 | |
| 
 | |
|                         g.FillRectangle(brush, backRect);
 | |
|                         brush.Dispose();
 | |
|                         path.Dispose();
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 if (paintBorder)
 | |
|                 {
 | |
|                     SmoothingMode sm = g.SmoothingMode;
 | |
|                     g.SmoothingMode = SmoothingMode.AntiAlias;
 | |
|                     // Draw Border
 | |
|                     if (!stateColors.OuterBorder.IsEmpty && stateColors.OuterBorderWidth>0)
 | |
|                     {
 | |
|                         Rectangle br = r;
 | |
|                         br.Width--;
 | |
|                         br.Height--;
 | |
| 
 | |
|                         if (shape is EllipticalShapeDescriptor && stateColors.OuterBorder.End.IsEmpty)
 | |
|                         {
 | |
|                             br.Width -= (stateColors.OuterBorderWidth / 2);
 | |
|                             br.Height -= (stateColors.OuterBorderWidth / 2);
 | |
|                             using (Pen pen = new Pen(stateColors.OuterBorder.Start, stateColors.OuterBorderWidth))
 | |
|                                 g.DrawEllipse(pen, br);
 | |
|                         }
 | |
|                         else
 | |
|                         {
 | |
|                             GraphicsPath path = shape.GetShape(br);
 | |
|                             if (path != null)
 | |
|                             {
 | |
|                                 DisplayHelp.DrawGradientPath(g, path, r, stateColors.OuterBorder, stateColors.OuterBorderWidth);
 | |
|                                 path.Dispose();
 | |
|                             }
 | |
|                         }
 | |
|                         //if (cornerSize > 1)
 | |
|                         //    DisplayHelp.DrawRoundGradientRectangle(g, r, stateColors.OuterBorder, 1, cornerSize);
 | |
|                         //else
 | |
|                         //    DisplayHelp.DrawGradientRectangle(g, r, stateColors.OuterBorder, 1);
 | |
| 
 | |
|                         if (isDefault)
 | |
|                         {
 | |
|                             Color clr = Color.FromArgb(128, stateColors.OuterBorder.Start);
 | |
|                             r.Inflate(-1, -1);
 | |
|                             DisplayHelp.DrawRectangle(g, clr, r);
 | |
|                             r.Inflate(-1, -1);
 | |
|                             DisplayHelp.DrawRectangle(g, clr, r);
 | |
|                         }
 | |
|                     }
 | |
|                     if (!isDefault && !stateColors.InnerBorder.IsEmpty)
 | |
|                     {
 | |
|                         Rectangle innerRect = r;
 | |
|                         innerRect.Inflate(-1, -1);
 | |
|                         innerRect.Width--;
 | |
|                         innerRect.Height--;
 | |
|                         using (GraphicsPath path = shape.GetInnerShape(innerRect, 1))
 | |
|                             DisplayHelp.DrawGradientPath(g, path, innerRect, stateColors.InnerBorder, 1);
 | |
|                         //cornerSize--;
 | |
|                         //if (cornerSize > 1)
 | |
|                         //    DisplayHelp.DrawRoundGradientRectangle(g, innerRect, stateColors.InnerBorder, 1, cornerSize);
 | |
|                         //else
 | |
|                         //    DisplayHelp.DrawGradientRectangle(g, innerRect, stateColors.InnerBorder, 1);
 | |
|                     }
 | |
| 
 | |
|                     g.SmoothingMode = sm;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public override void PaintButtonBackground(ButtonItem button, ItemPaintArgs pa, CompositeImage image)
 | |
|         {
 | |
|             if (IsOffice2003Rendering(button, pa))
 | |
|             {
 | |
|                 base.PaintButtonBackground(button, pa, image);
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             if (button is ApplicationButton && m_ColorTable.RibbonControl.StartButtonDefault != null)
 | |
|             {
 | |
|                 Image backImage = m_ColorTable.RibbonControl.StartButtonDefault;
 | |
|                 if (button.IsMouseDown || button.Expanded)
 | |
|                     backImage = m_ColorTable.RibbonControl.StartButtonPressed;
 | |
|                 else if (button.IsMouseOver)
 | |
|                     backImage = m_ColorTable.RibbonControl.StartButtonMouseOver;
 | |
|                 if (backImage != null)
 | |
|                 {
 | |
|                     if (Office2007ColorTable.CloneImagesOnAccess)
 | |
|                         backImage = backImage.Clone() as Image;
 | |
|                     pa.Graphics.DrawImageUnscaled(backImage, new Point(button.LeftInternal + (button.WidthInternal - backImage.Width) / 2, button.TopInternal + (button.HeightInternal - backImage.Height) / 2));
 | |
|                     if (Office2007ColorTable.CloneImagesOnAccess)
 | |
|                         backImage.Dispose();
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             PaintState(button, pa, image, button.DisplayRectangle, button.IsMouseDown);
 | |
|         }
 | |
| 
 | |
|         private Brush GetOverlayInactiveBrush()
 | |
|         {
 | |
|             return new SolidBrush(Color.FromArgb(76, Color.White));
 | |
|         }
 | |
| 
 | |
|         private static IShapeDescriptor GetButtonShape(ButtonItem button)
 | |
|         {
 | |
|             if (button.Shape != null)
 | |
|                 return button.Shape;
 | |
|             return _DefaultOffice2007Shape;
 | |
|         }
 | |
| 
 | |
|         public override void PaintExpandButton(ButtonItem button, ItemPaintArgs pa)
 | |
|         {
 | |
|             if (IsOffice2003Rendering(button, pa))
 | |
|             {
 | |
|                 base.PaintExpandButton(button, pa);
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             Graphics g = pa.Graphics;
 | |
|             bool isOnMenu = IsOnMenu(button, pa);
 | |
|             Rectangle itemRect = button.DisplayRectangle;
 | |
|             bool mouseOver = button.IsMouseOver;
 | |
|             bool enabled = IsItemEnabled(button, pa);
 | |
| 
 | |
|             Color textColor = Color.Empty;
 | |
|             eButtonContainer buttonCont = GetButtonContainerQualifier(pa, button);
 | |
|             Office2007ButtonItemColorTable buttonColorTable = GetColorTable(button, buttonCont);
 | |
|             if (buttonCont == eButtonContainer.RibbonStrip)
 | |
|             {
 | |
|                 textColor = GetTextColor(button, pa);
 | |
|             }
 | |
|             if (textColor.IsEmpty)
 | |
|                 textColor = GetTextColor(button, pa, buttonColorTable, true);
 | |
| 
 | |
|             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;
 | |
|                         }
 | |
|                         SmoothingMode sm = g.SmoothingMode;
 | |
|                         g.SmoothingMode = SmoothingMode.None;
 | |
|                         g.FillPolygon(textBrush, p);
 | |
|                         g.SmoothingMode = sm;
 | |
|                     }
 | |
|                     else if (!button.SubItemsRect.IsEmpty)
 | |
|                     {
 | |
|                         Point[] p = new Point[3];
 | |
|                         Rectangle sr = button.SubItemsRect;
 | |
|                         if (pa.IsOnRibbonBar && button.ImagePosition == eImagePosition.Top && !button.SplitButton && button.Text.Length > 0)
 | |
|                             sr.Y -= 3;
 | |
| 
 | |
|                         if (button.PopupSide == ePopupSide.Default)
 | |
|                         {
 | |
|                             if (pa.IsOnMenu)
 | |
|                             {
 | |
|                                 if (pa.RightToLeft)
 | |
|                                 {
 | |
|                                     p[0].X = itemRect.Left + sr.Left + sr.Width / 2 + 3;
 | |
|                                     p[0].Y = itemRect.Top + sr.Top + sr.Height / 2 - 3;
 | |
|                                     p[1].X = p[0].X;
 | |
|                                     p[1].Y = p[0].Y + 6;
 | |
|                                     p[2].X = p[0].X - 3;
 | |
|                                     p[2].Y = p[0].Y + 3;
 | |
|                                 }
 | |
|                                 else
 | |
|                                 {
 | |
|                                     p[0].X = itemRect.Left + sr.Left + sr.Width / 2;
 | |
|                                     p[0].Y = itemRect.Top + sr.Top + sr.Height / 2 - 3;
 | |
|                                     p[1].X = p[0].X;
 | |
|                                     p[1].Y = p[0].Y + 6;
 | |
|                                     p[2].X = p[0].X + 3;
 | |
|                                     p[2].Y = p[0].Y + 3;
 | |
|                                 }
 | |
|                             }
 | |
|                             else if (button.Orientation == eOrientation.Horizontal)
 | |
|                             {
 | |
|                                 p[0].X = itemRect.Left + sr.Left + (sr.Width - Dpi.Width5) / 2;
 | |
|                                 p[0].Y = itemRect.Top + sr.Top + (sr.Height - Dpi.Height3) / 2 + 1;
 | |
|                                 p[1].X = p[0].X + Dpi.Width5;
 | |
|                                 p[1].Y = p[0].Y;
 | |
|                                 p[2].X = p[0].X + Dpi.Width2;
 | |
|                                 p[2].Y = p[0].Y + Dpi.Height3;
 | |
|                             }
 | |
|                             else
 | |
|                             {
 | |
|                                 p[0].X = itemRect.Left + sr.Left + (sr.Width - 3) / 2 + 1;
 | |
|                                 p[0].Y = itemRect.Top + sr.Top + (sr.Height - 5) / 2;
 | |
|                                 p[1].X = p[0].X;
 | |
|                                 p[1].Y = p[0].Y + 6;
 | |
|                                 p[2].X = p[0].X - 3;
 | |
|                                 p[2].Y = p[0].Y + 3;
 | |
|                             }
 | |
|                         }
 | |
|                         else
 | |
|                         {
 | |
|                             switch (button.PopupSide)
 | |
|                             {
 | |
|                                 case ePopupSide.Right:
 | |
|                                     {
 | |
|                                         p[0].X = itemRect.Left + sr.Left + sr.Width / 2;
 | |
|                                         p[0].Y = itemRect.Top + sr.Top + sr.Height / 2 - 3;
 | |
|                                         p[1].X = p[0].X;
 | |
|                                         p[1].Y = p[0].Y + 6;
 | |
|                                         p[2].X = p[0].X + 3;
 | |
|                                         p[2].Y = p[0].Y + 3;
 | |
|                                         break;
 | |
|                                     }
 | |
|                                 case ePopupSide.Left:
 | |
|                                     {
 | |
|                                         p[0].X = itemRect.Left + sr.Left + sr.Width / 2 + 3;
 | |
|                                         p[0].Y = itemRect.Top + sr.Top + sr.Height / 2 - 3;
 | |
|                                         p[1].X = p[0].X;
 | |
|                                         p[1].Y = p[0].Y + 6;
 | |
|                                         p[2].X = p[0].X - 3;
 | |
|                                         p[2].Y = p[0].Y + 3;
 | |
|                                         break;
 | |
|                                     }
 | |
|                                 case ePopupSide.Top:
 | |
|                                     {
 | |
|                                         p[0].X = itemRect.Left + sr.Left + (sr.Width - 5) / 2;
 | |
|                                         p[0].Y = itemRect.Top + sr.Top + (sr.Height - 3) / 2 + 4;
 | |
|                                         p[1].X = p[0].X + 6;
 | |
|                                         p[1].Y = p[0].Y;
 | |
|                                         p[2].X = p[0].X + 3;
 | |
|                                         p[2].Y = p[0].Y - 4;
 | |
|                                         break;
 | |
|                                     }
 | |
|                                 case ePopupSide.Bottom:
 | |
|                                     {
 | |
|                                         p[0].X = itemRect.Left + sr.Left + (sr.Width - 5) / 2 + 1;
 | |
|                                         p[0].Y = itemRect.Top + sr.Top + (sr.Height - 3) / 2 + 1;
 | |
|                                         p[1].X = p[0].X + 5;
 | |
|                                         p[1].Y = p[0].Y;
 | |
|                                         p[2].X = p[0].X + 2;
 | |
|                                         p[2].Y = p[0].Y + 3;
 | |
|                                         break;
 | |
|                                     }
 | |
|                             }
 | |
|                         }
 | |
| 
 | |
|                         if (button.SplitButton && !button.TextDrawRect.IsEmpty && (button.ImagePosition == eImagePosition.Top))
 | |
|                         {
 | |
|                             p[0].Y -= 3;
 | |
|                             p[1].Y -= 3;
 | |
|                             p[2].Y -= 3;
 | |
|                         }
 | |
| 
 | |
|                         if (enabled)
 | |
|                         {
 | |
|                             SmoothingMode sm = g.SmoothingMode;
 | |
|                             g.SmoothingMode = SmoothingMode.None;
 | |
|                             g.FillPolygon(textBrush, p);
 | |
|                             g.SmoothingMode = sm;
 | |
| 
 | |
|                         }
 | |
|                         else
 | |
|                         {
 | |
|                             SmoothingMode sm = g.SmoothingMode;
 | |
|                             g.SmoothingMode = SmoothingMode.None;
 | |
|                             using (SolidBrush mybrush = new SolidBrush(pa.Colors.ItemDisabledText))
 | |
|                                 g.FillPolygon(mybrush, p);
 | |
|                             g.SmoothingMode = sm;
 | |
|                         }
 | |
|                     }
 | |
| 
 | |
|                     Rectangle r = GetTotalSubItemsRect(button);
 | |
|                     if (enabled && !r.IsEmpty && (mouseOver || button.Expanded && !pa.IsOnMenu) && !button.AutoExpandOnClick)
 | |
|                     {
 | |
|                         r.Offset(itemRect.Location);
 | |
|                         Point[] pt = new Point[4];
 | |
|                         if (pa.ContainerControl is RibbonBar && (button.ImagePosition == eImagePosition.Top || button.ImagePosition == eImagePosition.Bottom))
 | |
|                         {
 | |
|                             pt[0] = new Point(r.X + 1, r.Y);
 | |
|                             pt[1] = new Point(r.Right - 2, r.Y);
 | |
|                             pt[2] = new Point(r.X + 1, r.Y + 1);
 | |
|                             pt[3] = new Point(r.Right - 2, r.Y + 1);
 | |
|                             if (button.SplitButton)
 | |
|                             {
 | |
|                                 pt[0].Y--;
 | |
|                                 pt[1].Y--;
 | |
|                                 pt[2].Y--;
 | |
|                                 pt[3].Y--;
 | |
|                             }
 | |
|                         }
 | |
|                         else
 | |
|                         {
 | |
|                             r.Y += 1;
 | |
|                             r.Height -= 3;
 | |
|                             if (pa.RightToLeft)
 | |
|                                 r.X = r.Right - 1;
 | |
|                             pt[0] = new Point(r.X, r.Y);
 | |
|                             pt[1] = new Point(r.X, r.Bottom);
 | |
|                             pt[2] = new Point(r.X + 1, r.Y);
 | |
|                             pt[3] = new Point(r.X + 1, r.Bottom);
 | |
|                         }
 | |
|                         eDotNetBarStyle effectiveStyle = button.EffectiveStyle;
 | |
|                         if (effectiveStyle != eDotNetBarStyle.Office2010 && effectiveStyle != eDotNetBarStyle.Windows7 && !StyleManager.IsMetro(effectiveStyle) || button.Checked)
 | |
|                         {
 | |
|                             using (Pen pen = new Pen(buttonColorTable.MouseOver.SplitBorder.Start))
 | |
|                                 g.DrawLine(pen, pt[0], pt[1]); //r.X, r.Y, r.X, r.Bottom);
 | |
|                             using (Pen pen = new Pen(buttonColorTable.MouseOver.SplitBorderLight.Start))
 | |
|                                 g.DrawLine(pen, pt[2], pt[3]); //r.X + 1, r.Y, r.X + 1, r.Bottom);
 | |
|                         }
 | |
|                     }
 | |
| 
 | |
| 
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected override void PaintMenuItemSide(ButtonItem button, ItemPaintArgs pa, Rectangle sideRect)
 | |
|         {
 | |
|             if (IsOffice2003Rendering(button, pa))
 | |
|             {
 | |
|                 base.PaintMenuItemSide(button, pa, sideRect);
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             Graphics g = pa.Graphics;
 | |
|             Office2007MenuColorTable ct = m_ColorTable.Menu;
 | |
|             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, ct.SideUnused);
 | |
|             else
 | |
|                 DisplayHelp.FillRectangle(g, sideRect, ct.Side);
 | |
| 
 | |
|             if (pa.RightToLeft)
 | |
|             {
 | |
|                 Point p = new Point(sideRect.X, sideRect.Y);
 | |
|                 DisplayHelp.DrawGradientLine(g, p, new Point(p.X, p.Y + sideRect.Height), ct.SideBorder, 1);
 | |
| 
 | |
|                 p.X++;
 | |
| 
 | |
|                 DisplayHelp.DrawGradientLine(g, p, new Point(p.X, p.Y + sideRect.Height), ct.SideBorderLight, 1);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 Point p = new Point(sideRect.Right - 2, sideRect.Y);
 | |
|                 DisplayHelp.DrawGradientLine(g, p, new Point(p.X, p.Y + sideRect.Height), ct.SideBorder, 1);
 | |
| 
 | |
|                 p.X++;
 | |
| 
 | |
|                 DisplayHelp.DrawGradientLine(g, p, new Point(p.X, p.Y + sideRect.Height), ct.SideBorderLight, 1);
 | |
|             }
 | |
| 
 | |
|             if (oldClip != null)
 | |
|                 g.Clip = oldClip;
 | |
|             else
 | |
|                 g.ResetClip();
 | |
|         }
 | |
| 
 | |
|         protected override void PaintButtonCheckBackground(ButtonItem button, ItemPaintArgs pa, Rectangle r)
 | |
|         {
 | |
|             if (IsOffice2003Rendering(button, pa))
 | |
|             {
 | |
|                 base.PaintButtonCheckBackground(button, pa, r);
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             Graphics g = pa.Graphics;
 | |
|             bool isOnMenu = IsOnMenu(button, pa);
 | |
|             int cornerSize = m_CornerSize;
 | |
|             if (pa.ContainerControl is ButtonX)
 | |
|                 cornerSize = ((ButtonX)pa.ContainerControl).CornerSize;
 | |
|             if (!button.IsMouseOver || isOnMenu)
 | |
|             {
 | |
|                 Rectangle backRect = r;
 | |
|                 backRect.Inflate(-1, -1);
 | |
|                 DisplayHelp.FillRectangle(g, backRect, pa.Colors.ItemCheckedBackground, pa.Colors.ItemCheckedBackground2, pa.Colors.ItemCheckedBackgroundGradientAngle);
 | |
|                 DisplayHelp.DrawRoundedRectangle(g, pa.Colors.ItemCheckedBorder, r, cornerSize);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected static readonly Type ButtonColorTableType = typeof(Office2007ButtonItemColorTable);
 | |
|         public virtual Office2007ButtonItemColorTable GetColorTable(ButtonItem button, eButtonContainer buttonCont)
 | |
|         {
 | |
|             Office2007ColorTable colorTable = this.ColorTable;
 | |
|             Office2007ButtonItemColorTable buttonColorTable = null;
 | |
|             if (buttonCont == eButtonContainer.StatusBar)
 | |
|             {
 | |
|                 object st = null;
 | |
|                 if (colorTable.ContextualTables.TryGetValue(Office2007ColorTable.GetContextualKey(ButtonColorTableType, "StatusBar"), out st))
 | |
|                     return (Office2007ButtonItemColorTable)st;
 | |
|             }
 | |
|             if (buttonCont == eButtonContainer.RibbonBar && colorTable.RibbonButtonItemColors.Count > 0)
 | |
|             {
 | |
|                 if (button.CustomColorName != "")
 | |
|                     buttonColorTable = colorTable.RibbonButtonItemColors[button.CustomColorName];
 | |
| 
 | |
|                 if (buttonColorTable == null)
 | |
|                     buttonColorTable = colorTable.RibbonButtonItemColors[button.GetColorTableName()];
 | |
| 
 | |
|                 if (buttonColorTable != null)
 | |
|                     return buttonColorTable;
 | |
|             }
 | |
|             else if ((buttonCont == eButtonContainer.MenuBar || buttonCont == eButtonContainer.StatusBar) && colorTable.MenuButtonItemColors.Count > 0)
 | |
|             {
 | |
|                 if (button.CustomColorName != "")
 | |
|                     buttonColorTable = colorTable.MenuButtonItemColors[button.CustomColorName];
 | |
| 
 | |
|                 if (buttonColorTable == null)
 | |
|                     buttonColorTable = colorTable.MenuButtonItemColors[button.GetColorTableName()];
 | |
| 
 | |
|                 if (buttonColorTable != null)
 | |
|                     return buttonColorTable;
 | |
|             }
 | |
|             else if (buttonCont == eButtonContainer.Backstage && colorTable.BackstageButtonItemColors.Count > 0)
 | |
|             {
 | |
|                 if (button.CustomColorName != "")
 | |
|                     buttonColorTable = colorTable.BackstageButtonItemColors[button.CustomColorName];
 | |
| 
 | |
|                 if (buttonColorTable == null)
 | |
|                     buttonColorTable = colorTable.BackstageButtonItemColors[button.GetColorTableName()];
 | |
| 
 | |
|                 if (buttonColorTable != null)
 | |
|                     return buttonColorTable;
 | |
|             }
 | |
|             else if (buttonCont == eButtonContainer.NavigationPane && colorTable.NavigationPaneButtonItemColors.Count > 0)
 | |
|             {
 | |
|                 if (button.CustomColorName != "")
 | |
|                     buttonColorTable = colorTable.NavigationPaneButtonItemColors[button.CustomColorName];
 | |
| 
 | |
|                 if (buttonColorTable == null)
 | |
|                     buttonColorTable = colorTable.NavigationPaneButtonItemColors[button.GetColorTableName()];
 | |
| 
 | |
|                 if (buttonColorTable != null)
 | |
|                     return buttonColorTable;
 | |
|             }
 | |
| 
 | |
|             if (button.CustomColorName != "")
 | |
|                 buttonColorTable = colorTable.ButtonItemColors[button.CustomColorName];
 | |
| 
 | |
|             try
 | |
|             {
 | |
|                 if (buttonColorTable == null)
 | |
|                     buttonColorTable = colorTable.ButtonItemColors[button.GetColorTableName()];
 | |
| 
 | |
|                 if (buttonColorTable == null)
 | |
|                     return colorTable.ButtonItemColors[0];
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 buttonColorTable = Office2007ColorTable.GetFallBackButtonItemColorTable();
 | |
|             }
 | |
|             return buttonColorTable;
 | |
|         }
 | |
| 
 | |
|         private eButtonContainer GetButtonContainerQualifier(ItemPaintArgs pa, ButtonItem button)
 | |
|         {
 | |
|             eButtonContainer buttonCont = eButtonContainer.None;
 | |
|             if (pa.ContainerControl is RibbonBar)
 | |
|                 buttonCont = eButtonContainer.RibbonBar;
 | |
|             else if (pa.ContainerControl is RibbonStrip)
 | |
|                 buttonCont = eButtonContainer.RibbonStrip;
 | |
|             else if (pa.ContainerControl is DevComponents.DotNetBar.Metro.MetroTabStrip)
 | |
|                 buttonCont = eButtonContainer.MetroTabStrip;
 | |
|             else if (pa.ContainerControl is Bar)
 | |
|             {
 | |
|                 Bar bar = pa.ContainerControl as Bar;
 | |
|                 if (bar.MenuBar)
 | |
|                     buttonCont = eButtonContainer.MenuBar;
 | |
|                 else if (bar.LayoutType == eLayoutType.Toolbar)
 | |
|                 {
 | |
|                     if (bar.BarType == eBarType.StatusBar || bar.GrabHandleStyle == eGrabHandleStyle.ResizeHandle || bar.Dock == DockStyle.Bottom || bar.DockSide == eDockSide.Bottom)
 | |
|                         buttonCont = eButtonContainer.StatusBar;
 | |
|                     else
 | |
|                         buttonCont = eButtonContainer.Toolbar;
 | |
|                 }
 | |
|             }
 | |
|             else if (pa.IsOnMenu || pa.IsOnPopupBar)
 | |
|                 buttonCont = eButtonContainer.Popup;
 | |
|             else if (pa.ContainerControl is SuperTabStrip && ((SuperTabStrip)pa.ContainerControl).ApplicationButton != null)
 | |
|                 buttonCont = eButtonContainer.Backstage;
 | |
|             else if (pa.ContainerControl is NavigationBar)
 | |
|                 buttonCont = eButtonContainer.NavigationPane;
 | |
| 
 | |
|             return buttonCont;
 | |
|         }
 | |
| 
 | |
|         protected virtual Color GetTextColor(ButtonItem button, ItemPaintArgs pa, Office2007ButtonItemColorTable buttonColorTable)
 | |
|         {
 | |
|             return GetTextColor(button, pa, buttonColorTable, false);
 | |
|         }
 | |
|         protected virtual Color GetTextColor(ButtonItem button, ItemPaintArgs pa, Office2007ButtonItemColorTable buttonColorTable, bool isExpandPart)
 | |
|         {
 | |
|             Color textColor = Color.Empty;
 | |
| 
 | |
|             bool isMouseOver = button.IsMouseOver;
 | |
|             if (isMouseOver)
 | |
|             {
 | |
|                 if (isExpandPart)
 | |
|                 {
 | |
|                     if (!button.IsMouseOverExpand)
 | |
|                         isMouseOver = false;
 | |
|                 }
 | |
|                 else if (button.IsMouseOverExpand && button.SplitButton && !button.AutoExpandOnClick)
 | |
|                     isMouseOver = false;
 | |
|                 else if (button.IsMouseOverExpand && !isExpandPart && !button.AutoExpandOnClick)
 | |
|                     isMouseOver = false;
 | |
|             }
 | |
| 
 | |
|             if (isMouseOver)
 | |
|             {
 | |
|                 if (!button.HotForeColor.IsEmpty)
 | |
|                     textColor = button.HotForeColor;
 | |
|             }
 | |
|             else if (!button.ForeColor.IsEmpty)
 | |
|                 textColor = button.ForeColor;
 | |
| 
 | |
|             if (textColor.IsEmpty)
 | |
|             {
 | |
|                 if (buttonColorTable != null)
 | |
|                 {
 | |
|                     if (!button.GetEnabled(pa.ContainerControl))
 | |
|                     {
 | |
|                         if (buttonColorTable.Disabled != null)
 | |
|                             textColor = buttonColorTable.Disabled.Text;
 | |
|                     }
 | |
|                     else if (button.IsMouseDown)
 | |
|                         textColor = buttonColorTable.Pressed.Text;
 | |
|                     else if (isMouseOver && !(StyleManager.IsMetro(button.EffectiveStyle) && button.Expanded))
 | |
|                         textColor = buttonColorTable.MouseOver.Text;
 | |
|                     else if (button.Expanded && (button.AutoExpandOnClick && !button.SplitButton))
 | |
|                         textColor = buttonColorTable.Expanded.Text;
 | |
|                     else if (button.Checked && !IsOnMenu(button, pa))
 | |
|                         textColor = buttonColorTable.Checked.Text;
 | |
|                     else
 | |
|                         textColor = buttonColorTable.Default.Text;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if (textColor.IsEmpty)
 | |
|                 return base.GetTextColor(button, pa);
 | |
| 
 | |
|             return textColor;
 | |
|         }
 | |
| 
 | |
|         protected override Color GetTextColor(ButtonItem button, ItemPaintArgs pa)
 | |
|         {
 | |
|             bool enabled = IsItemEnabled(button, pa);
 | |
| 
 | |
|             if (enabled && button.IsMouseOver && !button.HotForeColor.IsEmpty)
 | |
|                 return button.HotForeColor;
 | |
|             if (enabled && !button.ForeColor.IsEmpty)
 | |
|                 return button.ForeColor;
 | |
|             if (enabled && button.ForeColorColorSchemePart != eColorSchemePart.None)
 | |
|                 return (Color)pa.Colors.GetType().GetProperty(button.ForeColorColorSchemePart.ToString()).GetValue(pa.Colors, null);
 | |
| 
 | |
|             eButtonContainer buttonCont = GetButtonContainerQualifier(pa, button);
 | |
| 
 | |
|             if (!enabled || IsOffice2003Rendering(button, pa))
 | |
|             {
 | |
|                 if (enabled && buttonCont == eButtonContainer.MenuBar && !button.IsMouseDown && !button.IsMouseOver && !button.Expanded && !button.Checked)
 | |
|                 {
 | |
|                     Office2007ButtonItemColorTable bt = GetColorTable(button, buttonCont);
 | |
|                     return bt.Default.Text;
 | |
|                 }
 | |
|                 return base.GetTextColor(button, pa);
 | |
|             }
 | |
| 
 | |
|             Color textColor = Color.Empty;
 | |
|             if (buttonCont == eButtonContainer.RibbonStrip && !button.IsMouseOver && !button.IsMouseDown && !button.Expanded)
 | |
|             {
 | |
|                 Office2007RibbonTabItemColorTable rtc = Office2007RibbonTabItemPainter.GetColorTable(m_ColorTable);
 | |
|                 if (pa.GlassEnabled && !rtc.Default.GlassText.IsEmpty)
 | |
|                     return rtc.Default.GlassText;
 | |
|                     
 | |
|                 return rtc.Default.Text;
 | |
|             }
 | |
| 
 | |
|             Office2007ButtonItemColorTable buttonColorTable = GetColorTable(button, buttonCont);
 | |
|             textColor = GetTextColor(button, pa, buttonColorTable);
 | |
| 
 | |
|             return textColor;
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
|         #region IOffice2007Painter Members
 | |
| 
 | |
|         public Office2007ColorTable ColorTable
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return m_ColorTable;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 m_ColorTable = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| 
 | |
|     internal enum eButtonContainer
 | |
|     {
 | |
|         None,
 | |
|         RibbonBar,
 | |
|         Popup,
 | |
|         RibbonStrip,
 | |
|         MenuBar,
 | |
|         StatusBar,
 | |
|         Toolbar,
 | |
|         Backstage,
 | |
|         NavigationPane,
 | |
|         MetroTabStrip
 | |
|     }
 | |
| }
 |