protected virtual void DrawFlatStyleCheckBox (Graphics graphics, Rectangle rectangle, CheckBox checkbox)
{
Pen pen;
Rectangle rect;
Rectangle checkbox_rectangle;
Rectangle fill_rectangle;
int lineWidth;
int Scale;
// set up our rectangles first
if (checkbox.FlatStyle == FlatStyle.Popup && checkbox.is_entered) {
// clip one pixel from bottom right for non popup rendered checkboxes
checkbox_rectangle = new Rectangle(rectangle.X, rectangle.Y, Math.Max(rectangle.Width-1, 0), Math.Max(rectangle.Height-1,0));
fill_rectangle = new Rectangle(checkbox_rectangle.X+1, checkbox_rectangle.Y+1, Math.Max(checkbox_rectangle.Width-3, 0), Math.Max(checkbox_rectangle.Height-3,0));
} else {
// clip two pixels from bottom right for non popup rendered checkboxes
checkbox_rectangle = new Rectangle(rectangle.X, rectangle.Y, Math.Max(rectangle.Width-2, 0), Math.Max(rectangle.Height-2,0));
fill_rectangle = new Rectangle(checkbox_rectangle.X+1, checkbox_rectangle.Y+1, Math.Max(checkbox_rectangle.Width-2, 0), Math.Max(checkbox_rectangle.Height-2,0));
}
// if disabled render in disabled state
if (checkbox.Enabled) {
// process the state of the checkbox
if (checkbox.is_entered || checkbox.Capture) {
// decide on which background color to use
if (checkbox.FlatStyle == FlatStyle.Popup && checkbox.is_entered && checkbox.Capture) {
graphics.FillRectangle(ResPool.GetSolidBrush (checkbox.BackColor), fill_rectangle);
} else if (checkbox.FlatStyle == FlatStyle.Flat) {
if (!checkbox.is_pressed) {
graphics.FillRectangle(ResPool.GetSolidBrush (checkbox.BackColor), fill_rectangle);
} else
graphics.FillRectangle(ResPool.GetSolidBrush (ControlPaint.LightLight (checkbox.BackColor)), fill_rectangle);
} else {
// use regular window background color
graphics.FillRectangle(ResPool.GetSolidBrush (ControlPaint.LightLight (checkbox.BackColor)), fill_rectangle);
}
// render the outer border
if (checkbox.FlatStyle == FlatStyle.Flat) {
ControlPaint.DrawBorder(graphics, checkbox_rectangle, checkbox.ForeColor, ButtonBorderStyle.Solid);
} else {
// draw sunken effect
CPDrawBorder3D (graphics, checkbox_rectangle, Border3DStyle.SunkenInner, Border3DSide.Left | Border3DSide.Right | Border3DSide.Top | Border3DSide.Bottom, checkbox.BackColor);
}
} else {
graphics.FillRectangle(ResPool.GetSolidBrush (ControlPaint.LightLight (checkbox.BackColor)), fill_rectangle);
if (checkbox.FlatStyle == FlatStyle.Flat) {
ControlPaint.DrawBorder(graphics, checkbox_rectangle, checkbox.ForeColor, ButtonBorderStyle.Solid);
} else {
// draw the outer border
ControlPaint.DrawBorder(graphics, checkbox_rectangle, ControlPaint.DarkDark (checkbox.BackColor), ButtonBorderStyle.Solid);
}
}
} else {
if (checkbox.FlatStyle == FlatStyle.Popup) {
graphics.FillRectangle(SystemBrushes.Control, fill_rectangle);
}
// draw disabled state,
ControlPaint.DrawBorder(graphics, checkbox_rectangle, ColorControlDark, ButtonBorderStyle.Solid);
}
if (checkbox.Checked) {
/* Need to draw a check-mark */
/* Make sure we've got at least a line width of 1 */
lineWidth = Math.Max(3, fill_rectangle.Width/3);
Scale=Math.Max(1, fill_rectangle.Width/9);
// flat style check box is rendered inside a rectangle shifted down by one
rect=new Rectangle(fill_rectangle.X, fill_rectangle.Y+1, fill_rectangle.Width, fill_rectangle.Height);
if (checkbox.Enabled) {
pen=ResPool.GetPen(checkbox.ForeColor);
} else {
pen=SystemPens.ControlDark;
}
for (int i=0; i<lineWidth; i++) {
graphics.DrawLine(pen, rect.Left+lineWidth/2, rect.Top+lineWidth+i, rect.Left+lineWidth/2+2*Scale, rect.Top+lineWidth+2*Scale+i);
graphics.DrawLine(pen, rect.Left+lineWidth/2+2*Scale, rect.Top+lineWidth+2*Scale+i, rect.Left+lineWidth/2+6*Scale, rect.Top+lineWidth-2*Scale+i);
}
}
}