172 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Drawing;
 | |
| using System.Drawing.Drawing2D;
 | |
| using System.Windows.Forms;
 | |
| 
 | |
| namespace DevComponents.DotNetBar
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// Summary description for Office2003RibbonTabItemPainter.
 | |
| 	/// </summary>
 | |
| 	internal class Office2003RibbonTabItemPainter:Office2003ButtonItemPainter
 | |
| 	{
 | |
| 		/// <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)
 | |
| 		{
 | |
| 			PaintButtonCheck(button,pa,image,r);
 | |
| 		}
 | |
| 
 | |
|         public override void PaintButtonBackground(ButtonItem button, ItemPaintArgs pa, CompositeImage image)
 | |
| 		{
 | |
|             bool isOnMenu = IsOnMenu(button, pa);
 | |
| 			if(isOnMenu)
 | |
| 				base.PaintButtonBackground(button,pa, image);
 | |
| 			else
 | |
| 				PaintButtonCheck(button,pa,image,button.DisplayRectangle);
 | |
| 		}
 | |
| 
 | |
| 		public override void PaintButtonCheck(ButtonItem button, ItemPaintArgs pa, CompositeImage image, Rectangle r)
 | |
| 		{
 | |
|             bool isOnMenu = IsOnMenu(button, pa);
 | |
| 			if(isOnMenu)
 | |
| 			{
 | |
| 				base.PaintButtonCheck(button,pa,image,r);
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			// TODO: Cleanup code here, tabs were drawn for every state that code is still left
 | |
| 			if(!button.IsMouseOver && !button.Checked)
 | |
| 				return;
 | |
| 
 | |
| 			Color topColor=pa.Colors.BarBackground2;
 | |
| 			Color bottomColor=pa.Colors.BarBackground;
 | |
| 			Color borderColor=pa.Colors.BarFloatingBorder;
 | |
| 			int angle=pa.Colors.BarBackgroundGradientAngle;
 | |
| 			
 | |
| 			if(button.IsMouseOver && !button.Checked)
 | |
| 			{
 | |
| 				topColor=pa.Colors.ItemHotBackground2;
 | |
| 				bottomColor=pa.Colors.ItemHotBackground;
 | |
| 				angle=pa.Colors.ItemHotBackgroundGradientAngle;
 | |
| 			}
 | |
| 			else if(button.Checked)
 | |
| 			{
 | |
| 				topColor=Color.White;//pa.Colors.BarBackground2;
 | |
| 				bottomColor=pa.Colors.BarBackground; //pa.Colors.BarBackground;
 | |
| 				//topColor=pa.Colors.ItemPressedBackground;
 | |
| 				//bottomColor=pa.Colors.ItemPressedBackground2;
 | |
| 				angle=pa.Colors.ItemPressedBackgroundGradientAngle;
 | |
| 			}
 | |
| 
 | |
| 			Color lightColor=ControlPaint.LightLight(bottomColor);
 | |
| 			Color darkColor=Color.FromArgb(100,ControlPaint.Dark(topColor));
 | |
| 
 | |
| 			int cornerDiameter=4;
 | |
| 			
 | |
| 			Graphics g=pa.Graphics;
 | |
| 			GraphicsPath path=GetTabPath(r,cornerDiameter);
 | |
| 			path.CloseAllFigures();
 | |
|             
 | |
| 			// Background
 | |
| 			using(LinearGradientBrush brush=DisplayHelp.CreateLinearGradientBrush(r,topColor,bottomColor,angle))
 | |
| 			{
 | |
| 				brush.GammaCorrection=true;
 | |
| 				g.FillPath(brush,path);
 | |
| 			}
 | |
| 			path.Dispose();
 | |
| 
 | |
| 			// Border light
 | |
| 			using(path=GetTabPathLight(r,cornerDiameter-1))
 | |
| 			{
 | |
| 				using(Pen pen=new Pen(darkColor/*lightColor*/,1))
 | |
| 					g.DrawPath(pen,path);
 | |
| 			}
 | |
| 
 | |
| 			// Border dark
 | |
| 			using(path=GetTabPathDark(r,cornerDiameter-1))
 | |
| 			{
 | |
| 				using(Pen pen=new Pen(darkColor,1))
 | |
| 					g.DrawPath(pen,path);
 | |
| 			}
 | |
| 
 | |
| 			// Border
 | |
| 			using(path=GetTabPath(r,cornerDiameter))
 | |
| 			{
 | |
| 				using(Pen pen=new Pen(borderColor,1))
 | |
| 					g.DrawPath(pen,path);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		private GraphicsPath GetTabPathLight(Rectangle r, int cornerDiameter)
 | |
| 		{
 | |
| 			r.X++;
 | |
| 			r.Y++;
 | |
| 			r.Width-=2;
 | |
| 			r.Height--;
 | |
| 			// Get graphics path for the tab bounds
 | |
| 			GraphicsPath path=new GraphicsPath();
 | |
| 
 | |
| 			path.AddLine(r.X,r.Bottom,r.X,r.Y+cornerDiameter);
 | |
| 			
 | |
| 			ArcData ad=ElementStyleDisplay.GetCornerArc(r,cornerDiameter,eCornerArc.TopLeft);
 | |
| 			path.AddArc(ad.X,ad.Y,ad.Width,ad.Height,ad.StartAngle,ad.SweepAngle);
 | |
| 			//path.AddLine(r.X,r.Y+cornerDiameter,r.X+cornerDiameter,r.Y);
 | |
| 			
 | |
| 			path.AddLine(r.X+cornerDiameter,r.Y,r.Right-cornerDiameter,r.Y);
 | |
| 			
 | |
| 			return path;
 | |
| 		}
 | |
| 
 | |
| 		private GraphicsPath GetTabPathDark(Rectangle r, int cornerDiameter)
 | |
| 		{
 | |
| 			r.X++;
 | |
| 			r.Y++;
 | |
| 			r.Width-=3;
 | |
| 			r.Height--;
 | |
| 			// Get graphics path for the tab bounds
 | |
| 			GraphicsPath path=new GraphicsPath();
 | |
| 
 | |
| 			ArcData ad=ElementStyleDisplay.GetCornerArc(r,cornerDiameter,eCornerArc.TopRight);
 | |
| 			path.AddArc(ad.X,ad.Y,ad.Width,ad.Height,ad.StartAngle,ad.SweepAngle);
 | |
| 			//path.AddLine(r.Right-cornerDiameter,r.Y,r.Right,r.Y+cornerDiameter);
 | |
| 
 | |
| 			path.AddLine(r.Right,r.Y+cornerDiameter,r.Right,r.Bottom);
 | |
| 			
 | |
| 			return path;
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		private GraphicsPath GetTabPath(Rectangle r, int cornerDiameter)
 | |
| 		{
 | |
| 			r.Width--;
 | |
| 			//r.Height--;
 | |
| 			// Get graphics path for the tab bounds
 | |
| 			GraphicsPath path=new GraphicsPath();
 | |
| 
 | |
| 			path.AddLine(r.X,r.Bottom,r.X,r.Y+cornerDiameter);
 | |
| 			//path.AddLine(r.X,r.Y+cornerDiameter,r.X+cornerDiameter,r.Y);
 | |
| 			ArcData ad=ElementStyleDisplay.GetCornerArc(r,cornerDiameter,eCornerArc.TopLeft);
 | |
| 			path.AddArc(ad.X,ad.Y,ad.Width,ad.Height,ad.StartAngle,ad.SweepAngle);
 | |
| 			
 | |
| 			path.AddLine(r.X+cornerDiameter,r.Y,r.Right-cornerDiameter,r.Y);
 | |
| 			//path.AddLine(r.Right-cornerDiameter,r.Y,r.Right,r.Y+cornerDiameter);
 | |
| 			ad=ElementStyleDisplay.GetCornerArc(r,cornerDiameter,eCornerArc.TopRight);
 | |
| 			path.AddArc(ad.X,ad.Y,ad.Width,ad.Height,ad.StartAngle,ad.SweepAngle);
 | |
| 
 | |
| 			path.AddLine(r.Right,r.Y+cornerDiameter,r.Right,r.Bottom);
 | |
| 			
 | |
| 			return path;
 | |
| 		}
 | |
| 
 | |
| 		public override void PaintButtonText(ButtonItem button, ItemPaintArgs pa, Color textColor, CompositeImage image)
 | |
| 		{
 | |
| 			base.PaintButtonText(button,pa,textColor,image);
 | |
| 		}
 | |
| 	}
 | |
| }
 |