RaUI/Source/ryControls/Gdu.WinFormUI/Painter/SimpleObjectPainter.cs

86 lines
3.0 KiB
C#
Raw Normal View History

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using MGdu.WinFormUI.MyGraphics;
namespace MGdu.WinFormUI
{
/// <summary>
/// SimpleObject指的是只有一种状态不像普通按钮一样有三种状态并且其上的元素
/// 布局比较简单的Object
/// </summary>
public class SimpleObjectPainter
{
/// <summary>
///
/// </summary>
/// <param name="g"></param>
/// <param name="rect"></param>
/// <param name="coveredColor"></param>
/// <param name="borderColor"></param>
/// <param name="backColor"></param>
/// <param name="drawInnerBorder"></param>
/// <param name="startAngle"></param>
/// <param name="percentage"></param>
/// <param name="drawText"></param>
/// <param name="textFont"></param>
public static void RenderCircleProgressBar(Graphics g, Rectangle rect, Color coveredColor, Color borderColor,
Color backColor, bool drawInnerBorder, int startAngle, int percentage, bool drawText, Font textFont)
{
using (NewSmoothModeGraphics ng = new NewSmoothModeGraphics(g, SmoothingMode.AntiAlias))
{
Rectangle backup = rect;
rect.Width--;
rect.Height--;
if (percentage < 0)
percentage = 0;
if (percentage > 360)
percentage = 360;
SolidBrush brushBack = new SolidBrush(backColor);
Pen penBorder = new Pen(borderColor);
// fill background
g.FillEllipse(brushBack, rect);
// outter most circle
g.DrawEllipse(penBorder, rect);
// pie covered region
rect.Inflate(-1, -1);
if (drawInnerBorder)
rect.Inflate(-1, -1);
using (SolidBrush sb = new SolidBrush(coveredColor))
{
g.FillPie(sb, rect, startAngle, 360 * percentage / 100);
}
// inner circle background
rect = backup;
rect.Inflate(-rect.Width / 4, -rect.Width / 4);
g.FillEllipse(brushBack, rect);
// inner circle line
rect.Inflate(-1, -1);
if (drawInnerBorder)
rect.Inflate(-1, -1);
g.DrawEllipse(penBorder, rect);
// text
if (drawText)
{
string text = percentage.ToString() + "%";
TextRenderer.DrawText(g, text, textFont, backup, Color.Black,
TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter);
}
brushBack.Dispose();
penBorder.Dispose();
}
}
}
}