361 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			361 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Drawing;
 | |
| using System.Drawing.Drawing2D;
 | |
| using System.Windows.Forms;
 | |
| 
 | |
| namespace DevComponents.Instrumentation
 | |
| {
 | |
|     internal class GaugeFrameCircularRenderer : GaugeFrameRenderer
 | |
|     {
 | |
|         public GaugeFrameCircularRenderer(GaugeFrame gaugeFrame)
 | |
|             : base(gaugeFrame)
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         #region SetFrameRegion
 | |
| 
 | |
|         internal override void SetFrameRegion()
 | |
|         {
 | |
|             if (GaugeFrame.GaugeControl != null)
 | |
|             {
 | |
|                 using (GraphicsPath path = new GraphicsPath())
 | |
|                 {
 | |
|                     path.AddEllipse(GaugeFrame.Bounds);
 | |
| 
 | |
|                     GaugeFrame.GaugeControl.Region = new Region(path);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region SetBackClipRegion
 | |
| 
 | |
|         internal override void SetBackClipRegion(PaintEventArgs e)
 | |
|         {
 | |
|             int inside = GaugeFrame.AbsBevelInside;
 | |
|             int outside = GaugeFrame.AbsBevelOutside;
 | |
| 
 | |
|             Rectangle r = GaugeFrame.Bounds;
 | |
|             r.Inflate(-outside -inside, -outside -inside);
 | |
| 
 | |
|             using (GraphicsPath path = new GraphicsPath())
 | |
|             {
 | |
|                 path.AddEllipse(r);
 | |
| 
 | |
|                 e.Graphics.SetClip(path, CombineMode.Intersect);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region RenderFrame
 | |
| 
 | |
|         #region RenderFrameByAngle
 | |
| 
 | |
|         protected override void RenderFrameByAngle(PaintEventArgs e, Rectangle r)
 | |
|         {
 | |
|             Graphics g = e.Graphics;
 | |
| 
 | |
|             Matrix myMatrix = new Matrix();
 | |
|             myMatrix.RotateAt(GaugeFrame.FrameColor.GradientAngle, GaugeFrame.Center);
 | |
| 
 | |
|             e.Graphics.Transform = myMatrix;
 | |
| 
 | |
|             using (Brush br = GaugeFrame.FrameColor.GetBrush(GaugeFrame.Bounds, 0))
 | |
|                 g.FillEllipse(br, GaugeFrame.Bounds);
 | |
| 
 | |
|             RenderFrameBorder(g);
 | |
| 
 | |
|             using (Brush br = GaugeFrame.FrameColor.GetBrush(r, 180))
 | |
|                 g.FillEllipse(br, r);
 | |
| 
 | |
|             g.ResetTransform();
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region RenderFrameByCenter
 | |
| 
 | |
|         protected override void RenderFrameByCenter(PaintEventArgs e, Rectangle r)
 | |
|         {
 | |
|             Graphics g = e.Graphics;
 | |
| 
 | |
|             using (GraphicsPath path = new GraphicsPath())
 | |
|             {
 | |
|                 path.AddEllipse(GaugeFrame.Bounds);
 | |
| 
 | |
|                 using (PathGradientBrush br = new PathGradientBrush(path))
 | |
|                 {
 | |
|                     br.CenterPoint = GaugeFrame.Center;
 | |
|                     br.CenterColor = GaugeFrame.FrameColor.Start;
 | |
|                     br.SurroundColors = new Color[] { GaugeFrame.FrameColor.End };
 | |
| 
 | |
|                     br.SetSigmaBellShape(GaugeFrame.FrameSigmaFocus, GaugeFrame.FrameSigmaScale);
 | |
| 
 | |
|                     g.FillEllipse(br, GaugeFrame.Bounds);
 | |
|                 }
 | |
| 
 | |
|                 path.AddEllipse(r);
 | |
| 
 | |
|                 using (PathGradientBrush br = new PathGradientBrush(path))
 | |
|                 {
 | |
|                     br.CenterPoint = GaugeFrame.Center;
 | |
|                     br.CenterColor = GaugeFrame.FrameColor.End;
 | |
|                     br.SurroundColors = new Color[] { GaugeFrame.FrameColor.Start };
 | |
| 
 | |
|                     g.FillEllipse(br, r);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             RenderFrameBorder(g);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region PaintCircularFrameByHvCenter
 | |
| 
 | |
|         protected override void RenderFrameByHorizontalCenter(PaintEventArgs e, Rectangle r)
 | |
|         {
 | |
|             RenderFrameByHvCenter(e, r, 90);
 | |
|         }
 | |
| 
 | |
|         protected override void RenderFrameByVerticalCenter(PaintEventArgs e, Rectangle r)
 | |
|         {
 | |
|             RenderFrameByHvCenter(e, r, 0);
 | |
|         }
 | |
| 
 | |
|         private void RenderFrameByHvCenter(PaintEventArgs e, Rectangle r, int angle)
 | |
|         {
 | |
|             Graphics g = e.Graphics;
 | |
| 
 | |
|             Rectangle t = GaugeFrame.Bounds;
 | |
|             t.Height /= 2;
 | |
|             t.Width /= 2;
 | |
| 
 | |
|             using (Brush br = GaugeFrame.FrameColor.GetBrush(t, angle))
 | |
|             {
 | |
|                 if (br is LinearGradientBrush)
 | |
|                     ((LinearGradientBrush)br).WrapMode = WrapMode.TileFlipXY;
 | |
| 
 | |
|                 g.FillEllipse(br, GaugeFrame.Bounds);
 | |
|             }
 | |
| 
 | |
|             t = r;
 | |
|             t.Height /= 2;
 | |
|             t.Width /= 2;
 | |
| 
 | |
|             using (Brush br = GaugeFrame.FrameColor.GetBrush(t, angle + 180))
 | |
|             {
 | |
|                 if (br is LinearGradientBrush)
 | |
|                     ((LinearGradientBrush)br).WrapMode = WrapMode.TileFlipXY;
 | |
| 
 | |
|                 g.FillEllipse(br, r);
 | |
|             }
 | |
| 
 | |
|             RenderFrameBorder(g);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region RenderFrameByNone
 | |
| 
 | |
|         protected override void RenderFrameByNone(PaintEventArgs e, Rectangle r)
 | |
|         {
 | |
|             Graphics g = e.Graphics;
 | |
| 
 | |
|             using (Brush br = new SolidBrush(GaugeFrame.FrameColor.Start))
 | |
|                 g.FillEllipse(br, GaugeFrame.Bounds);
 | |
| 
 | |
|             if (GaugeFrame.FrameColor.End.IsEmpty == false)
 | |
|             {
 | |
|                 using (Brush br = new SolidBrush(GaugeFrame.FrameColor.End))
 | |
|                     g.FillEllipse(br, r);
 | |
|             }
 | |
| 
 | |
|             RenderFrameBorder(g);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region RenderFrameBorder
 | |
| 
 | |
|         private void RenderFrameBorder(Graphics g)
 | |
|         {
 | |
|             if (GaugeFrame.FrameColor.BorderWidth > 0)
 | |
|             {
 | |
|                 using (Pen pen = new Pen(
 | |
|                     GaugeFrame.FrameColor.BorderColor, GaugeFrame.FrameColor.BorderWidth))
 | |
|                 {
 | |
|                     pen.Alignment = PenAlignment.Inset;
 | |
| 
 | |
|                     g.DrawEllipse(pen, GaugeFrame.Bounds);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region RenderrBack
 | |
| 
 | |
|         #region RenderBackByAngle
 | |
| 
 | |
|         protected override void RenderBackByAngle(PaintEventArgs e, Rectangle r)
 | |
|         {
 | |
|             Graphics g = e.Graphics;
 | |
| 
 | |
|             Matrix myMatrix = new Matrix();
 | |
|             myMatrix.RotateAt(GaugeFrame.BackColor.GradientAngle, GaugeFrame.Center);
 | |
| 
 | |
|             e.Graphics.Transform = myMatrix;
 | |
| 
 | |
|             using (Brush br = GaugeFrame.BackColor.GetBrush(r, 0))
 | |
|                 g.FillEllipse(br, r);
 | |
| 
 | |
|             g.ResetTransform();
 | |
| 
 | |
|             RenderBackBorder(g, r);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region RenderBackByCenter
 | |
| 
 | |
|         protected override void RenderBackByCenter(PaintEventArgs e, Rectangle r)
 | |
|         {
 | |
|             Graphics g = e.Graphics;
 | |
| 
 | |
|             using (GraphicsPath path = new GraphicsPath())
 | |
|             {
 | |
|                 path.AddEllipse(r);
 | |
| 
 | |
|                 using (PathGradientBrush br = new PathGradientBrush(path))
 | |
|                 {
 | |
|                     br.CenterColor = GaugeFrame.BackColor.Start;
 | |
|                     br.SurroundColors = new Color[] { GaugeFrame.BackColor.End };
 | |
|                     br.CenterPoint = GaugeFrame.Center;
 | |
| 
 | |
|                     br.SetSigmaBellShape(GaugeFrame.BackSigmaFocus, GaugeFrame.BackSigmaScale);
 | |
| 
 | |
|                     g.FillRectangle(br, r);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             RenderBackBorder(g, r);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region RenderBackByHvCenter
 | |
| 
 | |
|         protected override void RenderBackByHorizontalCenter(PaintEventArgs e, Rectangle r)
 | |
|         {
 | |
|             RenderBackByHvCenter(e, r, 90);
 | |
|         }
 | |
| 
 | |
|         protected override void RenderBackByVerticalCenter(PaintEventArgs e, Rectangle r)
 | |
|         {
 | |
|             RenderBackByHvCenter(e, r, 0);
 | |
|         }
 | |
| 
 | |
|         private void RenderBackByHvCenter(PaintEventArgs e, Rectangle r, int angle)
 | |
|         {
 | |
|             Graphics g = e.Graphics;
 | |
| 
 | |
|             Rectangle t = r;
 | |
|             t.Height /= 2;
 | |
|             t.Width /= 2;
 | |
| 
 | |
|             using (Brush br = GaugeFrame.BackColor.GetBrush(t, angle))
 | |
|             {
 | |
|                 if (br is LinearGradientBrush)
 | |
|                     ((LinearGradientBrush)br).WrapMode = WrapMode.TileFlipXY;
 | |
| 
 | |
|                 g.FillEllipse(br, r);
 | |
|             }
 | |
| 
 | |
|             RenderBackBorder(g, r);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region RenderBackByNone
 | |
| 
 | |
|         protected override void RenderBackByNone(PaintEventArgs e, Rectangle r)
 | |
|         {
 | |
|             Graphics g = e.Graphics;
 | |
| 
 | |
|             using (Brush br = new SolidBrush(GaugeFrame.BackColor.Start))
 | |
|                 g.FillEllipse(br, r);
 | |
| 
 | |
|             RenderBackBorder(g, r);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region RenderBackBorder
 | |
| 
 | |
|         private void RenderBackBorder(Graphics g, Rectangle r)
 | |
|         {
 | |
|             if (GaugeFrame.BackColor.BorderWidth > 0)
 | |
|             {
 | |
|                 using (Pen pen = new Pen(
 | |
|                     GaugeFrame.BackColor.BorderColor, GaugeFrame.BackColor.BorderWidth))
 | |
|                 {
 | |
|                     pen.Alignment = PenAlignment.Inset;
 | |
| 
 | |
|                     g.DrawEllipse(pen, r);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region PreRenderContent
 | |
| 
 | |
|         internal override void PreRenderContent(PaintEventArgs e)
 | |
|         {
 | |
|             if (GaugeFrame.AddGlassEffect == true)
 | |
|                 AddGlassEffect(e, 45);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region PostRenderContent
 | |
| 
 | |
|         internal override void PostRenderContent(PaintEventArgs e)
 | |
|         {
 | |
|             if (GaugeFrame.AddGlassEffect == true)
 | |
|                 AddGlassEffect(e, 90);
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region AddGlassEffect
 | |
| 
 | |
|         private void AddGlassEffect(PaintEventArgs e, float angle)
 | |
|         {
 | |
|             Graphics g = e.Graphics;
 | |
| 
 | |
|             Rectangle r = GaugeFrame.BackBounds;
 | |
|             r.Height /= 2;
 | |
| 
 | |
|             if (r.Height > 0)
 | |
|             {
 | |
|                 Color color1 = Color.FromArgb(100, Color.White);
 | |
| 
 | |
|                 using (LinearGradientBrush br =
 | |
|                     new LinearGradientBrush(r, color1, Color.Transparent, angle))
 | |
|                 {
 | |
|                     g.FillEllipse(br, r);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| }
 |