You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			1103 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			1103 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //-------------------------------------------------------------
 | ||
| // <copyright company=<3D>Microsoft Corporation<6F>>
 | ||
| //   Copyright <20> Microsoft Corporation. All Rights Reserved.
 | ||
| // </copyright>
 | ||
| //-------------------------------------------------------------
 | ||
| // @owner=alexgor, deliant
 | ||
| //=================================================================
 | ||
| //  File:		EmbedBorder.cs
 | ||
| //
 | ||
| //  Namespace:	System.Web.UI.WebControls[Windows.Forms].Charting.Borders3D
 | ||
| //
 | ||
| //	Classes:	EmbedBorder, FrameTitle1Border, FrameTitle2Border,
 | ||
| //				FrameTitle3Border, FrameTitle4Border, FrameTitle5Border,
 | ||
| //				FrameTitle6Border, FrameTitle7Border, FrameTitle8Border,
 | ||
| //				FrameThin2Border, FrameThin3Border, FrameThin4Border, 
 | ||
| //				FrameThin5Border, FrameThin6Border, FrameThin1Border, 
 | ||
| //				RaisedBorder, SunkenBorder
 | ||
| //
 | ||
| //  Purpose:	Classes that implement different 3D border styles.
 | ||
| //
 | ||
| //	Reviewed:	AG - August 7, 2002
 | ||
| //
 | ||
| //===================================================================
 | ||
| 
 | ||
| #region Used namespaces
 | ||
| 
 | ||
| using System;
 | ||
| using System.Resources;
 | ||
| using System.Reflection;
 | ||
| using System.Collections;
 | ||
| using System.Drawing;
 | ||
| using System.Drawing.Drawing2D;
 | ||
| using System.ComponentModel.Design;
 | ||
| 
 | ||
| #if WINFORMS_CONTROL
 | ||
| 	using System.Windows.Forms.DataVisualization.Charting;
 | ||
| 	using System.Windows.Forms.DataVisualization.Charting.Data;
 | ||
| 	using System.Windows.Forms.DataVisualization.Charting.ChartTypes;
 | ||
| 	using System.Windows.Forms.DataVisualization.Charting.Utilities;
 | ||
| 	using System.Windows.Forms.DataVisualization.Charting.Borders3D;
 | ||
| 
 | ||
| #else
 | ||
| 	using System.Web.UI.DataVisualization.Charting;	using System.Web.UI.DataVisualization.Charting.Data;
 | ||
| 	using System.Web.UI.DataVisualization.Charting.Utilities;
 | ||
| #endif
 | ||
| 
 | ||
| #endregion
 | ||
| 
 | ||
| #if WINFORMS_CONTROL
 | ||
| 	namespace System.Windows.Forms.DataVisualization.Charting.Borders3D
 | ||
| #else
 | ||
| 	namespace System.Web.UI.DataVisualization.Charting.Borders3D
 | ||
| #endif
 | ||
| {
 | ||
| 	/// <summary>
 | ||
| 	/// Implements frame border.
 | ||
| 	/// </summary>
 | ||
| 	internal class FrameTitle1Border : FrameThin1Border
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Default constructor
 | ||
| 		/// </summary>
 | ||
| 		public FrameTitle1Border()
 | ||
| 		{
 | ||
| 			sizeLeftTop = new SizeF(sizeLeftTop.Width, defaultRadiusSize*2f);
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "FrameTitle1";}}
 | ||
| 
 | ||
| 
 | ||
|         public override float Resolution
 | ||
|         {
 | ||
|             set
 | ||
|             {
 | ||
|                 base.Resolution = value;
 | ||
|                 sizeLeftTop = new SizeF(sizeLeftTop.Width, defaultRadiusSize * 2f);
 | ||
|             }
 | ||
|         }
 | ||
| 		/// <summary>
 | ||
| 		/// Returns the position of the rectangular area in the border where
 | ||
| 		/// title should be displayed. Returns empty rect if title can't be shown in the border.
 | ||
| 		/// </summary>
 | ||
| 		/// <returns>Title position in border.</returns>
 | ||
| 		public override RectangleF GetTitlePositionInBorder()
 | ||
| 		{
 | ||
| 			return new RectangleF(
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 1.6f);
 | ||
| 		}
 | ||
| 
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| 
 | ||
| 	/// <summary>
 | ||
| 	/// Implements frame border.
 | ||
| 	/// </summary>
 | ||
| 	internal class FrameTitle2Border : FrameThin2Border
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Default constructor
 | ||
| 		/// </summary>
 | ||
| 		public FrameTitle2Border()
 | ||
| 		{
 | ||
| 			sizeLeftTop = new SizeF(sizeLeftTop.Width, defaultRadiusSize*2f);
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "FrameTitle2";}}
 | ||
| 
 | ||
| 
 | ||
|         public override float Resolution
 | ||
|         {
 | ||
|             set
 | ||
|             {
 | ||
|                 base.Resolution = value;
 | ||
|                 sizeLeftTop = new SizeF(sizeLeftTop.Width, defaultRadiusSize * 2f);
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Returns the position of the rectangular area in the border where
 | ||
| 		/// title should be displayed. Returns empty rect if title can't be shown in the border.
 | ||
| 		/// </summary>
 | ||
| 		/// <returns>Title position in border.</returns>
 | ||
| 		public override RectangleF GetTitlePositionInBorder()
 | ||
| 		{
 | ||
| 			return new RectangleF(
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 1.6f);
 | ||
| 		}
 | ||
| 
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| 
 | ||
| 	/// <summary>
 | ||
| 	/// Implements frame border.
 | ||
| 	/// </summary>
 | ||
| 	internal class FrameTitle3Border : FrameThin3Border
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Default constructor
 | ||
| 		/// </summary>
 | ||
| 		public FrameTitle3Border()
 | ||
| 		{
 | ||
| 			sizeLeftTop = new SizeF(sizeLeftTop.Width, defaultRadiusSize*2f);
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "FrameTitle3";}}
 | ||
| 
 | ||
| 
 | ||
|         public override float Resolution
 | ||
|         {
 | ||
|             set
 | ||
|             {
 | ||
|                 base.Resolution = value;
 | ||
|                 sizeLeftTop = new SizeF(sizeLeftTop.Width, defaultRadiusSize * 2f);
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Returns the position of the rectangular area in the border where
 | ||
| 		/// title should be displayed. Returns empty rect if title can't be shown in the border.
 | ||
| 		/// </summary>
 | ||
| 		/// <returns>Title position in border.</returns>
 | ||
| 		public override RectangleF GetTitlePositionInBorder()
 | ||
| 		{
 | ||
| 			return new RectangleF(
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 1.6f);
 | ||
| 		}
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| 	
 | ||
| 	/// <summary>
 | ||
| 	/// Implements frame border.
 | ||
| 	/// </summary>
 | ||
| 	internal class FrameTitle4Border : FrameThin4Border
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Default constructor
 | ||
| 		/// </summary>
 | ||
| 		public FrameTitle4Border()
 | ||
| 		{
 | ||
| 			sizeLeftTop = new SizeF(sizeLeftTop.Width, defaultRadiusSize*2f);
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "FrameTitle4";}}
 | ||
| 
 | ||
| 
 | ||
|         public override float Resolution
 | ||
|         {
 | ||
|             set
 | ||
|             {
 | ||
|                 base.Resolution = value;
 | ||
|                 sizeLeftTop = new SizeF(sizeLeftTop.Width, defaultRadiusSize * 2f);
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Returns the position of the rectangular area in the border where
 | ||
| 		/// title should be displayed. Returns empty rect if title can't be shown in the border.
 | ||
| 		/// </summary>
 | ||
| 		/// <returns>Title position in border.</returns>
 | ||
| 		public override RectangleF GetTitlePositionInBorder()
 | ||
| 		{
 | ||
| 			return new RectangleF(
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 1.6f);
 | ||
| 		}
 | ||
| 	
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| 
 | ||
| 	/// <summary>
 | ||
| 	/// Implements frame border.
 | ||
| 	/// </summary>
 | ||
| 	internal class FrameTitle5Border : FrameThin5Border
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Default constructor
 | ||
| 		/// </summary>
 | ||
| 		public FrameTitle5Border()
 | ||
| 		{
 | ||
| 			sizeLeftTop = new SizeF(sizeLeftTop.Width, defaultRadiusSize*2f);
 | ||
| 			this.drawScrews = true;
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "FrameTitle5";}}
 | ||
| 
 | ||
| 
 | ||
|         public override float Resolution
 | ||
|         {
 | ||
|             set
 | ||
|             {
 | ||
|                 base.Resolution = value;
 | ||
|                 sizeLeftTop = new SizeF(sizeLeftTop.Width, defaultRadiusSize * 2f);
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Returns the position of the rectangular area in the border where
 | ||
| 		/// title should be displayed. Returns empty rect if title can't be shown in the border.
 | ||
| 		/// </summary>
 | ||
| 		/// <returns>Title position in border.</returns>
 | ||
| 		public override RectangleF GetTitlePositionInBorder()
 | ||
| 		{
 | ||
| 			return new RectangleF(
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 1.6f);
 | ||
| 		}
 | ||
| 	
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| 	
 | ||
| 	/// <summary>
 | ||
| 	/// Implements frame border.
 | ||
| 	/// </summary>
 | ||
| 	internal class FrameTitle6Border : FrameThin6Border
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Default constructor
 | ||
| 		/// </summary>
 | ||
| 		public FrameTitle6Border()
 | ||
| 		{
 | ||
| 			sizeLeftTop = new SizeF(sizeLeftTop.Width, defaultRadiusSize*2f);
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "FrameTitle6";}}
 | ||
| 
 | ||
|         public override float Resolution
 | ||
|         {
 | ||
|             set
 | ||
|             {
 | ||
|                 base.Resolution = value;
 | ||
|                 sizeLeftTop = new SizeF(sizeLeftTop.Width, defaultRadiusSize * 2f);
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Returns the position of the rectangular area in the border where
 | ||
| 		/// title should be displayed. Returns empty rect if title can't be shown in the border.
 | ||
| 		/// </summary>
 | ||
| 		/// <returns>Title position in border.</returns>
 | ||
| 		public override RectangleF GetTitlePositionInBorder()
 | ||
| 		{
 | ||
| 			return new RectangleF(
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 0.25f,
 | ||
| 				defaultRadiusSize * 1.6f);
 | ||
| 		}
 | ||
| 	
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| 
 | ||
| 	/// <summary>
 | ||
| 	/// Implements frame border.
 | ||
| 	/// </summary>
 | ||
| 	internal class FrameTitle7Border : FrameTitle1Border
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Default constructor
 | ||
| 		/// </summary>
 | ||
| 		public FrameTitle7Border()
 | ||
| 		{
 | ||
| 			this.sizeRightBottom = new SizeF(0, sizeRightBottom.Height);
 | ||
| 			float[] corners = {15f, 1f, 1f, 1f, 1f, 15f, 15f, 15f};
 | ||
| 			innerCorners = corners;
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "FrameTitle7";}}
 | ||
| 
 | ||
| 
 | ||
|         public override float Resolution
 | ||
|         {
 | ||
|             set
 | ||
|             {
 | ||
|                 base.Resolution = value;
 | ||
|                 this.sizeRightBottom = new SizeF(0, sizeRightBottom.Height);
 | ||
|                 float largeRadius = 15f * resolution / 96.0f;
 | ||
|                 float smallRadius = 1 * resolution / 96.0f;
 | ||
|                 float[] corners = { largeRadius, smallRadius, smallRadius, smallRadius, smallRadius, largeRadius, largeRadius, largeRadius };
 | ||
|                 innerCorners = corners;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| 
 | ||
| 	/// <summary>
 | ||
| 	/// Implements frame border.
 | ||
| 	/// </summary>
 | ||
| 	internal class FrameTitle8Border : FrameTitle1Border
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Default constructor
 | ||
| 		/// </summary>
 | ||
| 		public FrameTitle8Border()
 | ||
| 		{
 | ||
| 			this.sizeLeftTop = new SizeF(0, sizeLeftTop.Height);
 | ||
| 			this.sizeRightBottom = new SizeF(0, sizeRightBottom.Height);
 | ||
| 			float[] corners = {1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f};
 | ||
| 			innerCorners = corners;
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "FrameTitle8";}}
 | ||
| 
 | ||
| 
 | ||
|         public override float Resolution
 | ||
|         {
 | ||
|             set
 | ||
|             {
 | ||
|                 base.Resolution = value;
 | ||
| 
 | ||
|                 this.sizeLeftTop = new SizeF(0, sizeLeftTop.Height);
 | ||
|                 this.sizeRightBottom = new SizeF(0, sizeRightBottom.Height);
 | ||
|                 float radius = 1 * resolution / 96.0f;
 | ||
|                 float[] corners = { radius, radius, radius, radius, radius, radius, radius, radius };
 | ||
|                 innerCorners = corners;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| 	
 | ||
| 	/// <summary>
 | ||
| 	/// Implements frame border.
 | ||
| 	/// </summary>
 | ||
| 	internal class FrameThin2Border : FrameThin1Border
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Default constructor
 | ||
| 		/// </summary>
 | ||
| 		public FrameThin2Border()
 | ||
| 		{
 | ||
| 			float[] corners = {15f, 15f, 15f, 1f, 1f, 1f, 1f, 15f};
 | ||
| 			cornerRadius = corners;
 | ||
| 			innerCorners = corners;
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "FrameThin2";}}
 | ||
| 
 | ||
| 
 | ||
|         public override float Resolution
 | ||
|         {
 | ||
|             set
 | ||
|             {
 | ||
|                 base.Resolution = value;
 | ||
| 
 | ||
|                 float largeRadius = 15f * resolution / 96.0f;
 | ||
|                 float smallRadius = 1 * resolution / 96.0f;
 | ||
|                 float[] corners = { largeRadius, largeRadius, largeRadius, smallRadius, smallRadius, smallRadius, smallRadius, largeRadius };
 | ||
|                 cornerRadius = corners;
 | ||
|                 innerCorners = corners;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| 
 | ||
| 	/// <summary>
 | ||
| 	/// Implements frame border.
 | ||
| 	/// </summary>
 | ||
| 	internal class FrameThin3Border : FrameThin1Border
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Default constructor
 | ||
| 		/// </summary>
 | ||
| 		public FrameThin3Border()
 | ||
| 		{
 | ||
| 			float[] corners = {1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f};
 | ||
| 			cornerRadius = corners;
 | ||
| 			innerCorners = corners;
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "FrameThin3";}}
 | ||
| 
 | ||
| 
 | ||
|         public override float Resolution
 | ||
|         {
 | ||
|             set
 | ||
|             {
 | ||
|                 base.Resolution = value;
 | ||
|                 float radius = resolution / 96.0f;
 | ||
|                 float[] corners = { radius, radius, radius, radius, radius, radius, radius, radius };
 | ||
|                 cornerRadius = corners;
 | ||
|                 innerCorners = corners;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| 
 | ||
| 	/// <summary>
 | ||
| 	/// Implements frame border.
 | ||
| 	/// </summary>
 | ||
| 	internal class FrameThin4Border : FrameThin1Border
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Default constructor
 | ||
| 		/// </summary>
 | ||
| 		public FrameThin4Border()
 | ||
| 		{
 | ||
| 			float[] corners = {1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f};
 | ||
| 			cornerRadius = corners;
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "FrameThin4";}}
 | ||
| 
 | ||
| 
 | ||
|         public override float Resolution
 | ||
|         {
 | ||
|             set
 | ||
|             {
 | ||
|                 base.Resolution = value;
 | ||
|                 float radius = 1f * resolution / 96.0f;
 | ||
|                 cornerRadius = new float[] { radius, radius, radius, radius, radius, radius, radius, radius };
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         #endregion
 | ||
| 	}
 | ||
| 
 | ||
| 	/// <summary>
 | ||
| 	/// Implements frame border.
 | ||
| 	/// </summary>
 | ||
| 	internal class FrameThin5Border : FrameThin1Border
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Default constructor
 | ||
| 		/// </summary>
 | ||
| 		public FrameThin5Border()
 | ||
| 		{
 | ||
| 			drawScrews = true;
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "FrameThin5";}}
 | ||
| 
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| 
 | ||
| 	/// <summary>
 | ||
| 	/// Implements frame border.
 | ||
| 	/// </summary>
 | ||
| 	internal class FrameThin6Border : FrameThin1Border
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Default constructor
 | ||
| 		/// </summary>
 | ||
| 		public FrameThin6Border()
 | ||
| 		{
 | ||
| 			float[] corners = {1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f};
 | ||
| 			innerCorners = corners;
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "FrameThin6";}}
 | ||
| 
 | ||
| 
 | ||
|         public override float Resolution
 | ||
|         {
 | ||
|             set
 | ||
|             {
 | ||
|                 base.Resolution = value;
 | ||
|                 float radius = resolution / 96.0f;
 | ||
|                 float[] corners = { radius, radius, radius, radius, radius, radius, radius, radius };
 | ||
|                 innerCorners = corners;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| 
 | ||
| 	/// <summary>
 | ||
| 	/// Implements frame border.
 | ||
| 	/// </summary>
 | ||
| 	internal class FrameThin1Border : RaisedBorder
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Inner corners radius array
 | ||
| 		/// </summary>
 | ||
|         internal float[] innerCorners = { 15f, 15f, 15f, 15f, 15f, 15f, 15f, 15f };
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Default constructor
 | ||
| 		/// </summary>
 | ||
| 		public FrameThin1Border()
 | ||
| 		{
 | ||
| 			sizeLeftTop = new SizeF(defaultRadiusSize * .8f, defaultRadiusSize * .8f);
 | ||
| 			sizeRightBottom = new SizeF(defaultRadiusSize * .8f, defaultRadiusSize * .8f);
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "FrameThin1";}}
 | ||
| 
 | ||
| 
 | ||
|         public override float Resolution
 | ||
|         {
 | ||
|             set
 | ||
|             {
 | ||
|                 base.Resolution = value;
 | ||
|                 float radius = 15.0f * resolution / 96.0f;
 | ||
|                 innerCorners = new float[] { radius, radius, radius, radius, radius, radius, radius, radius };
 | ||
|                 sizeLeftTop = new SizeF(defaultRadiusSize * .8f, defaultRadiusSize * .8f);
 | ||
|                 sizeRightBottom = new SizeF(defaultRadiusSize * .8f, defaultRadiusSize * .8f);
 | ||
| 
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// Draws 3D border.
 | ||
|         /// </summary>
 | ||
|         /// <param name="graph">Graphics to draw the border on.</param>
 | ||
|         /// <param name="borderSkin">Border skin object.</param>
 | ||
|         /// <param name="rect">Rectangle of the border.</param>
 | ||
|         /// <param name="backColor">Color of rectangle</param>
 | ||
|         /// <param name="backHatchStyle">Hatch style</param>
 | ||
|         /// <param name="backImage">Back Image</param>
 | ||
|         /// <param name="backImageWrapMode">Image mode</param>
 | ||
|         /// <param name="backImageTransparentColor">Image transparent color.</param>
 | ||
|         /// <param name="backImageAlign">Image alignment</param>
 | ||
|         /// <param name="backGradientStyle">Gradient type</param>
 | ||
|         /// <param name="backSecondaryColor">Gradient End Color</param>
 | ||
|         /// <param name="borderColor">Border Color</param>
 | ||
|         /// <param name="borderWidth">Border Width</param>
 | ||
|         /// <param name="borderDashStyle">Border Style</param>
 | ||
| 		public override void DrawBorder(
 | ||
| 			ChartGraphics graph, 
 | ||
| 			BorderSkin borderSkin,
 | ||
| 			RectangleF rect, 
 | ||
| 			Color backColor, 
 | ||
| 			ChartHatchStyle backHatchStyle, 
 | ||
| 			string backImage, 
 | ||
| 			ChartImageWrapMode backImageWrapMode, 
 | ||
| 			Color backImageTransparentColor,
 | ||
| 			ChartImageAlignmentStyle backImageAlign,
 | ||
| 			GradientStyle backGradientStyle, 
 | ||
| 			Color backSecondaryColor, 
 | ||
| 			Color borderColor, 
 | ||
| 			int borderWidth, 
 | ||
| 			ChartDashStyle borderDashStyle)	
 | ||
| 		{
 | ||
| 			drawBottomShadow = true;
 | ||
| 			sunken = false;
 | ||
| 			outsideShadowRate = .9f;
 | ||
| 			drawOutsideTopLeftShadow = false;
 | ||
| 			bool oldScrewsFlag = this.drawScrews;
 | ||
| 			this.drawScrews = false;
 | ||
| 			base.DrawBorder(
 | ||
| 				graph, 
 | ||
| 				borderSkin, 
 | ||
| 				rect, 
 | ||
| 				borderSkin.BackColor, 
 | ||
| 				borderSkin.BackHatchStyle, 
 | ||
| 				borderSkin.BackImage, 
 | ||
| 				borderSkin.BackImageWrapMode, 
 | ||
| 				borderSkin.BackImageTransparentColor, 
 | ||
| 				borderSkin.BackImageAlignment, 
 | ||
| 				borderSkin.BackGradientStyle, 
 | ||
| 				borderSkin.BackSecondaryColor, 
 | ||
| 				borderSkin.BorderColor, 
 | ||
| 				borderSkin.BorderWidth, 
 | ||
| 				borderSkin.BorderDashStyle);
 | ||
| 
 | ||
| 			this.drawScrews = oldScrewsFlag;
 | ||
| 			rect.X += sizeLeftTop.Width;
 | ||
| 			rect.Y += sizeLeftTop.Height;
 | ||
| 			rect.Width -= sizeRightBottom.Width + sizeLeftTop.Width;
 | ||
| 			rect.Height -= sizeRightBottom.Height + sizeLeftTop.Height;
 | ||
| 			if(rect.Width > 0 && rect.Height > 0 )
 | ||
| 			{
 | ||
| 				float[] oldCorners = new float[8];
 | ||
| 				oldCorners = (float[])cornerRadius.Clone();
 | ||
| 				cornerRadius = innerCorners;
 | ||
| 				drawBottomShadow = false;
 | ||
| 				sunken = true;
 | ||
| 				drawOutsideTopLeftShadow = true;
 | ||
| 				outsideShadowRate = 1.4f;
 | ||
| 				Color oldPageColor = borderSkin.PageColor;
 | ||
| 				borderSkin.PageColor = Color.Transparent;
 | ||
| 				base.DrawBorder(
 | ||
| 					graph, 
 | ||
| 					borderSkin,
 | ||
| 					rect, 
 | ||
| 					backColor, 
 | ||
| 					backHatchStyle, 
 | ||
| 					backImage, 
 | ||
| 					backImageWrapMode, 
 | ||
| 					backImageTransparentColor, 
 | ||
| 					backImageAlign, 
 | ||
| 					backGradientStyle, 
 | ||
| 					backSecondaryColor, 
 | ||
| 					borderColor, 
 | ||
| 					borderWidth, 
 | ||
| 					borderDashStyle	);
 | ||
| 				borderSkin.PageColor = oldPageColor;
 | ||
| 				cornerRadius = oldCorners;
 | ||
| 			}
 | ||
| 		}
 | ||
| 
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| 
 | ||
| 
 | ||
| 	/// <summary>
 | ||
| 	/// Implements raised border.
 | ||
| 	/// </summary>
 | ||
| 	internal class RaisedBorder : SunkenBorder
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Public constructor
 | ||
| 		/// </summary>
 | ||
| 		public RaisedBorder()
 | ||
| 		{
 | ||
| 			sunken = false;
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public override string Name			{ get{ return "Raised";}}
 | ||
| 
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| 
 | ||
| 	/// <summary>
 | ||
| 	/// Implements embed 3D border.
 | ||
| 	/// </summary>
 | ||
| 	internal class SunkenBorder : IBorderType
 | ||
| 	{
 | ||
| 		#region Border properties and methods
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Radius for rounded rectangle
 | ||
| 		/// </summary>
 | ||
|         internal float defaultRadiusSize = 15f;
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Outside shadow rate
 | ||
| 		/// </summary>
 | ||
|         internal float outsideShadowRate = .9f;
 | ||
| 		
 | ||
| 		/// <summary>
 | ||
| 		/// Indicates that sunken shadows should be drawn
 | ||
| 		/// </summary>
 | ||
|         internal bool sunken = true;
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Indicates that bottom shadow should be drawn
 | ||
| 		/// </summary>
 | ||
|         internal bool drawBottomShadow = true;
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Indicates that top left outside dark shadow must be drawn
 | ||
| 		/// </summary>
 | ||
|         internal bool drawOutsideTopLeftShadow = false;
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Array of corner radius
 | ||
| 		/// </summary>
 | ||
|         internal float[] cornerRadius = { 15f, 15f, 15f, 15f, 15f, 15f, 15f, 15f };
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Border top/left size 
 | ||
| 		/// </summary>
 | ||
|         internal SizeF sizeLeftTop = SizeF.Empty;
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Border right/bottom size
 | ||
| 		/// </summary>
 | ||
|         internal SizeF sizeRightBottom = SizeF.Empty;
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Indicates that ----s should be drawn in the corners of the frame
 | ||
| 		/// </summary>
 | ||
|         internal bool drawScrews = false;
 | ||
| 
 | ||
| 
 | ||
|         internal float resolution = 96f;
 | ||
| 
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Public constructor
 | ||
| 		/// </summary>
 | ||
| 		public SunkenBorder()
 | ||
| 		{
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Chart type name
 | ||
| 		/// </summary>
 | ||
| 		public virtual string Name			{ get{ return "Sunken";}}
 | ||
| 
 | ||
| 
 | ||
|         public virtual float Resolution
 | ||
|         {
 | ||
|             set
 | ||
|             {
 | ||
|                 resolution = value;
 | ||
|                 defaultRadiusSize = 15 * resolution / 96;
 | ||
|                 //X = defaultRadiusSize;
 | ||
|                 //Y = defaultRadiusSize;
 | ||
|                 cornerRadius = new float[] { defaultRadiusSize, defaultRadiusSize, defaultRadiusSize, defaultRadiusSize, defaultRadiusSize, defaultRadiusSize, defaultRadiusSize, defaultRadiusSize };
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Returns the position of the rectangular area in the border where
 | ||
| 		/// title should be displayed. Returns empty rect if title can't be shown in the border.
 | ||
| 		/// </summary>
 | ||
| 		/// <returns>Title position in border.</returns>
 | ||
| 		public virtual RectangleF GetTitlePositionInBorder()
 | ||
| 		{
 | ||
| 			return RectangleF.Empty;
 | ||
| 		}
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// Adjust areas rectangle coordinate to fit the 3D border
 | ||
|         /// </summary>
 | ||
|         /// <param name="graph">Graphics to draw the border on.</param>
 | ||
|         /// <param name="areasRect">Position to adjust.</param>
 | ||
| 		public virtual void AdjustAreasPosition(ChartGraphics graph, ref RectangleF areasRect)
 | ||
| 		{
 | ||
| 			SizeF relSizeLeftTop = new SizeF(sizeLeftTop);
 | ||
| 			SizeF relSizeRightBottom = new SizeF(sizeRightBottom);
 | ||
| 			relSizeLeftTop.Width += defaultRadiusSize * 0.7f;
 | ||
| 			relSizeLeftTop.Height += defaultRadiusSize * 0.85f;
 | ||
| 			relSizeRightBottom.Width += defaultRadiusSize * 0.7f;
 | ||
| 			relSizeRightBottom.Height += defaultRadiusSize * 0.7f;
 | ||
| 			relSizeLeftTop = graph.GetRelativeSize(relSizeLeftTop);
 | ||
| 			relSizeRightBottom = graph.GetRelativeSize(relSizeRightBottom);
 | ||
| 
 | ||
| 			if(relSizeLeftTop.Width > 30f)
 | ||
| 				relSizeLeftTop.Width = 0;
 | ||
| 			if(relSizeLeftTop.Height > 30f)
 | ||
| 				relSizeLeftTop.Height = 0;
 | ||
| 			if(relSizeRightBottom.Width > 30f)
 | ||
| 				relSizeRightBottom.Width = 0;
 | ||
| 			if(relSizeRightBottom.Height > 30f)
 | ||
| 				relSizeRightBottom.Height = 0;
 | ||
| 
 | ||
| 
 | ||
| 			areasRect.X += relSizeLeftTop.Width;
 | ||
| 			areasRect.Width -= (float)Math.Min(areasRect.Width, relSizeLeftTop.Width + relSizeRightBottom.Width);
 | ||
| 			areasRect.Y += relSizeLeftTop.Height;
 | ||
| 			areasRect.Height -= (float)Math.Min(areasRect.Height, relSizeLeftTop.Height + relSizeRightBottom.Height);
 | ||
| 
 | ||
| 			if(areasRect.Right > 100f)
 | ||
| 			{
 | ||
| 				if(areasRect.Width > 100f - areasRect.Right)
 | ||
| 					areasRect.Width -= 100f - areasRect.Right;
 | ||
| 				else
 | ||
| 					areasRect.X -= 100f - areasRect.Right;
 | ||
| 			}
 | ||
| 			if(areasRect.Bottom > 100f)
 | ||
| 			{
 | ||
| 				if(areasRect.Height > 100f - areasRect.Bottom)
 | ||
| 					areasRect.Height -= 100f - areasRect.Bottom;
 | ||
| 				else
 | ||
| 					areasRect.Y -= 100f - areasRect.Bottom;
 | ||
| 
 | ||
| 			}
 | ||
| 		}
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// Draws 3D border
 | ||
|         /// </summary>
 | ||
|         /// <param name="graph">Graphics to draw the border on.</param>
 | ||
|         /// <param name="borderSkin">Border skin object.</param>
 | ||
|         /// <param name="rect">Rectangle of the border.</param>
 | ||
|         /// <param name="backColor">Color of rectangle</param>
 | ||
|         /// <param name="backHatchStyle">Hatch style</param>
 | ||
|         /// <param name="backImage">Back Image</param>
 | ||
|         /// <param name="backImageWrapMode">Image mode</param>
 | ||
|         /// <param name="backImageTransparentColor">Image transparent color.</param>
 | ||
|         /// <param name="backImageAlign">Image alignment</param>
 | ||
|         /// <param name="backGradientStyle">Gradient type</param>
 | ||
|         /// <param name="backSecondaryColor">Gradient End Color</param>
 | ||
|         /// <param name="borderColor">Border Color</param>
 | ||
|         /// <param name="borderWidth">Border Width</param>
 | ||
|         /// <param name="borderDashStyle">Border Style</param>
 | ||
| 		public virtual void DrawBorder(
 | ||
| 			ChartGraphics graph, 
 | ||
| 			BorderSkin borderSkin,
 | ||
| 			RectangleF rect, 
 | ||
| 			Color backColor, 
 | ||
| 			ChartHatchStyle backHatchStyle, 
 | ||
| 			string backImage, 
 | ||
| 			ChartImageWrapMode backImageWrapMode, 
 | ||
| 			Color backImageTransparentColor,
 | ||
| 			ChartImageAlignmentStyle backImageAlign,
 | ||
| 			GradientStyle backGradientStyle, 
 | ||
| 			Color backSecondaryColor, 
 | ||
| 			Color borderColor, 
 | ||
| 			int borderWidth, 
 | ||
| 			ChartDashStyle borderDashStyle)	
 | ||
| 		{
 | ||
| 			RectangleF absolute = graph.Round( rect );
 | ||
| 			RectangleF shadowRect = absolute;
 | ||
| 
 | ||
| 			// Calculate shadow colors (0.2 - 0.6)
 | ||
| 			float colorDarkeningIndex = 0.3f + (0.4f * (borderSkin.PageColor.R + borderSkin.PageColor.G + borderSkin.PageColor.B) / 765f);
 | ||
| 			Color	shadowColor = Color.FromArgb(
 | ||
| 				(int)(backColor.R*colorDarkeningIndex), 
 | ||
| 				(int)(backColor.G*colorDarkeningIndex), 
 | ||
| 				(int)(backColor.B*colorDarkeningIndex));
 | ||
| 
 | ||
| 			colorDarkeningIndex += 0.2f;
 | ||
| 			Color	shadowLightColor = Color.FromArgb(
 | ||
| 				(int)(borderSkin.PageColor.R*colorDarkeningIndex), 
 | ||
| 				(int)(borderSkin.PageColor.G*colorDarkeningIndex), 
 | ||
| 				(int)(borderSkin.PageColor.B*colorDarkeningIndex));
 | ||
| 			if(borderSkin.PageColor == Color.Transparent)
 | ||
| 			{
 | ||
| 				shadowLightColor = Color.FromArgb(60, 0, 0, 0);
 | ||
| 			}
 | ||
| 			
 | ||
| 			// Calculate rounded rect radius
 | ||
| 			float	radius = defaultRadiusSize;
 | ||
|             radius = (float)Math.Max(radius, 2f * resolution / 96.0f);
 | ||
| 			radius = (float)Math.Min(radius, rect.Width/2f);
 | ||
| 			radius = (float)Math.Min(radius, rect.Height/2f);
 | ||
| 			radius = (float)Math.Ceiling(radius);
 | ||
| 
 | ||
| 			// Fill page background color
 | ||
|             using (Brush brush = new SolidBrush(borderSkin.PageColor))
 | ||
|             {
 | ||
|                 graph.FillRectangle(brush, rect);
 | ||
|             }
 | ||
| 
 | ||
| 			if(drawOutsideTopLeftShadow)
 | ||
| 			{
 | ||
| 				// Top/Left outside shadow
 | ||
| 				shadowRect = absolute;
 | ||
| 				shadowRect.X -= radius * 0.3f;
 | ||
| 				shadowRect.Y -= radius * 0.3f;
 | ||
| 				shadowRect.Width -= radius * .3f;
 | ||
| 				shadowRect.Height -= radius * .3f;
 | ||
| 				graph.DrawRoundedRectShadowAbs(shadowRect, cornerRadius, radius, Color.FromArgb(128, Color.Black), borderSkin.PageColor, outsideShadowRate);
 | ||
| 			}
 | ||
| 
 | ||
| 			// Bottom/Right outside shadow
 | ||
| 			shadowRect = absolute;
 | ||
| 			shadowRect.X += radius * 0.3f;
 | ||
| 			shadowRect.Y += radius * 0.3f;
 | ||
| 			shadowRect.Width -= radius * .3f;
 | ||
| 			shadowRect.Height -= radius * .3f;
 | ||
| 			graph.DrawRoundedRectShadowAbs(shadowRect, cornerRadius, radius, shadowLightColor, borderSkin.PageColor, outsideShadowRate);
 | ||
| 
 | ||
| 			// Background
 | ||
| 			shadowRect = absolute;
 | ||
| 			shadowRect.Width -= radius * .3f;
 | ||
| 			shadowRect.Height -= radius * .3f;
 | ||
| 			GraphicsPath path = graph.CreateRoundedRectPath(shadowRect, cornerRadius);
 | ||
| 			graph.DrawPathAbs(
 | ||
| 				path, 
 | ||
| 				backColor, 
 | ||
| 				backHatchStyle, 
 | ||
| 				backImage, 
 | ||
| 				backImageWrapMode, 
 | ||
| 				backImageTransparentColor,
 | ||
| 				backImageAlign,
 | ||
| 				backGradientStyle, 
 | ||
| 				backSecondaryColor, 
 | ||
| 				borderColor, 
 | ||
| 				borderWidth, 
 | ||
| 				borderDashStyle, 
 | ||
| 				PenAlignment.Inset );
 | ||
| 
 | ||
| 			// Dispose Graphic path
 | ||
| 			if( path != null )
 | ||
| 				path.Dispose();
 | ||
| 
 | ||
| 			// Draw ----s imitation in the corners of the farame
 | ||
| 			if(drawScrews)
 | ||
| 			{
 | ||
| 				// Left/Top ----
 | ||
| 				RectangleF	screwRect = RectangleF.Empty;
 | ||
| 				float offset = radius * 0.4f;
 | ||
| 				screwRect.X = shadowRect.X + offset;
 | ||
| 				screwRect.Y = shadowRect.Y + offset;
 | ||
| 				screwRect.Width = radius * 0.55f;
 | ||
| 				screwRect.Height = screwRect.Width;
 | ||
| 				DrawScrew(graph, screwRect);
 | ||
| 
 | ||
| 				// Right/Top ----
 | ||
| 				screwRect.X = shadowRect.Right - offset - screwRect.Width;
 | ||
| 				DrawScrew(graph, screwRect);
 | ||
| 
 | ||
| 				// Right/Bottom ----
 | ||
| 				screwRect.X = shadowRect.Right - offset - screwRect.Width;
 | ||
| 				screwRect.Y = shadowRect.Bottom - offset - screwRect.Height;
 | ||
| 				DrawScrew(graph, screwRect);
 | ||
| 		
 | ||
| 				// Left/Bottom ----
 | ||
| 				screwRect.X = shadowRect.X + offset;
 | ||
| 				screwRect.Y = shadowRect.Bottom - offset - screwRect.Height;
 | ||
| 				DrawScrew(graph, screwRect);
 | ||
| 			}
 | ||
| 
 | ||
| 			// Bottom/Right inner shadow
 | ||
| 			Region	innerShadowRegion = null;
 | ||
| 			if(drawBottomShadow)
 | ||
| 			{
 | ||
| 				shadowRect = absolute;
 | ||
| 				shadowRect.Width -= radius * .3f;
 | ||
| 				shadowRect.Height -= radius * .3f;
 | ||
| 				innerShadowRegion = new Region(
 | ||
| 					graph.CreateRoundedRectPath(
 | ||
| 					new RectangleF(
 | ||
| 					shadowRect.X - radius, 
 | ||
| 					shadowRect.Y - radius, 
 | ||
| 					shadowRect.Width + 0.5f*radius, 
 | ||
| 					shadowRect.Height + 0.5f*radius), 
 | ||
| 					cornerRadius));
 | ||
| 				innerShadowRegion.Complement(graph.CreateRoundedRectPath(shadowRect, cornerRadius));
 | ||
| 				graph.Clip = innerShadowRegion;
 | ||
| 
 | ||
| 				shadowRect.X -= 0.5f*radius;
 | ||
| 				shadowRect.Width += 0.5f*radius;
 | ||
| 				shadowRect.Y -= 0.5f*radius;
 | ||
| 				shadowRect.Height += 0.5f*radius;
 | ||
| 
 | ||
| 				graph.DrawRoundedRectShadowAbs(
 | ||
| 					shadowRect, 
 | ||
| 					cornerRadius,
 | ||
| 					radius,
 | ||
| 					Color.Transparent, 
 | ||
| 					Color.FromArgb(175, (sunken) ? Color.White : shadowColor), 
 | ||
| 					1.0f);
 | ||
| 				graph.Clip = new Region();
 | ||
| 			}
 | ||
| 
 | ||
| 			// Top/Left inner shadow					
 | ||
| 			shadowRect = absolute;
 | ||
| 			shadowRect.Width -= radius * .3f;
 | ||
| 			shadowRect.Height -= radius * .3f;
 | ||
| 			innerShadowRegion = new Region(
 | ||
| 				graph.CreateRoundedRectPath(
 | ||
| 				new RectangleF(
 | ||
| 				shadowRect.X + radius*.5f, 
 | ||
| 				shadowRect.Y + radius*.5f, 
 | ||
| 				shadowRect.Width - .2f*radius, 
 | ||
| 				shadowRect.Height - .2f*radius), 
 | ||
| 				cornerRadius));
 | ||
| 
 | ||
| 			RectangleF shadowWithOffset = shadowRect;
 | ||
| 			shadowWithOffset.Width += radius;
 | ||
| 			shadowWithOffset.Height += radius;
 | ||
| 			innerShadowRegion.Complement(graph.CreateRoundedRectPath(shadowWithOffset, cornerRadius));
 | ||
| 			
 | ||
| 			innerShadowRegion.Intersect(graph.CreateRoundedRectPath(shadowRect, cornerRadius));
 | ||
| 			graph.Clip = innerShadowRegion;
 | ||
| 			graph.DrawRoundedRectShadowAbs(
 | ||
| 				shadowWithOffset, 
 | ||
| 				cornerRadius, 
 | ||
| 				radius, 
 | ||
| 				Color.Transparent, 
 | ||
| 				Color.FromArgb(175, (sunken) ? shadowColor : Color.White), 
 | ||
| 				1.0f);
 | ||
| 			graph.Clip = new Region();
 | ||
| 
 | ||
| 		}
 | ||
| 
 | ||
| 		/// <summary>
 | ||
| 		/// Helper function, which draws a ---- on the frame
 | ||
| 		/// </summary>
 | ||
| 		/// <param name="graph">Chart graphics to use.</param>
 | ||
| 		/// <param name="rect">---- position.</param>
 | ||
| 		private void DrawScrew(ChartGraphics graph, RectangleF rect)
 | ||
| 		{
 | ||
| 			// Draw ----
 | ||
| 			Pen screwPen = new Pen(Color.FromArgb(128,255,255,255), 1);
 | ||
| 			graph.DrawEllipse(screwPen, rect.X, rect.Y, rect.Width, rect.Height);
 | ||
|             graph.DrawLine(screwPen, rect.X + 2 * resolution / 96.0f, rect.Y + rect.Height - 2 * resolution / 96.0f, rect.Right - 2 * resolution / 96.0f, rect.Y + 2 * resolution / 96.0f);
 | ||
| 			screwPen = new Pen(Color.FromArgb(128, Color.Black), 1);
 | ||
|             graph.DrawEllipse(screwPen, rect.X + 1 * resolution / 96.0f, rect.Y + 1 * resolution / 96.0f, rect.Width, rect.Height);
 | ||
|             graph.DrawLine(screwPen, rect.X + 3 * resolution / 96.0f, rect.Y + rect.Height - 1 * resolution / 96.0f, rect.Right - 1 * resolution / 96.0f, rect.Y + 3 * resolution / 96.0f);
 | ||
| 		}
 | ||
| 
 | ||
| 		#endregion
 | ||
| 	}
 | ||
| }
 |