public override void DrawCheckBox(Graphics dc, Rectangle clip_area, CheckBox checkbox) {
StringFormat text_format;
Rectangle client_rectangle;
Rectangle text_rectangle;
Rectangle checkbox_rectangle;
int checkmark_size = CheckSize;
int checkmark_space = 4;
client_rectangle = checkbox.ClientRectangle;
text_rectangle = client_rectangle;
checkbox_rectangle = new Rectangle(text_rectangle.X, text_rectangle.Y, checkmark_size, checkmark_size);
text_format = new StringFormat();
text_format.Alignment = StringAlignment.Near;
text_format.LineAlignment = StringAlignment.Center;
if (checkbox.ShowKeyboardCuesInternal)
text_format.HotkeyPrefix = HotkeyPrefix.Show;
else
text_format.HotkeyPrefix = HotkeyPrefix.Hide;
/* Calculate the position of text and checkbox rectangle */
if (checkbox.appearance!=Appearance.Button) {
switch(checkbox.check_alignment) {
case ContentAlignment.BottomCenter: {
checkbox_rectangle.X=(client_rectangle.Right-client_rectangle.Left)/2-checkmark_size/2;
checkbox_rectangle.Y=client_rectangle.Bottom-checkmark_size;
text_rectangle.X=client_rectangle.X;
text_rectangle.Width=client_rectangle.Width;
text_rectangle.Height=client_rectangle.Height-checkbox_rectangle.Y-checkmark_space;
break;
}
case ContentAlignment.BottomLeft: {
checkbox_rectangle.X=client_rectangle.Left;
checkbox_rectangle.Y=client_rectangle.Bottom-checkmark_size;
text_rectangle.X=client_rectangle.X+checkmark_size+checkmark_space;
text_rectangle.Width=client_rectangle.Width-checkmark_size-checkmark_space;
break;
}
case ContentAlignment.BottomRight: {
checkbox_rectangle.X=client_rectangle.Right-checkmark_size;
checkbox_rectangle.Y=client_rectangle.Bottom-checkmark_size;
text_rectangle.X=client_rectangle.X;
text_rectangle.Width=client_rectangle.Width-checkmark_size-checkmark_space;
break;
}
case ContentAlignment.MiddleCenter: {
checkbox_rectangle.X=(client_rectangle.Right-client_rectangle.Left)/2-checkmark_size/2;
checkbox_rectangle.Y=(client_rectangle.Bottom-client_rectangle.Top)/2-checkmark_size/2;
text_rectangle.X=client_rectangle.X;
text_rectangle.Width=client_rectangle.Width;
break;
}
default:
case ContentAlignment.MiddleLeft: {
checkbox_rectangle.X=client_rectangle.Left;
checkbox_rectangle.Y=(client_rectangle.Bottom-client_rectangle.Top)/2-checkmark_size/2;
text_rectangle.X=client_rectangle.X+checkmark_size+checkmark_space;
text_rectangle.Width=client_rectangle.Width-checkmark_size-checkmark_space;
break;
}
case ContentAlignment.MiddleRight: {
checkbox_rectangle.X=client_rectangle.Right-checkmark_size;
checkbox_rectangle.Y=(client_rectangle.Bottom-client_rectangle.Top)/2-checkmark_size/2;
text_rectangle.X=client_rectangle.X;
text_rectangle.Width=client_rectangle.Width-checkmark_size-checkmark_space;
break;
}
case ContentAlignment.TopCenter: {
checkbox_rectangle.X=(client_rectangle.Right-client_rectangle.Left)/2-checkmark_size/2;
checkbox_rectangle.Y=client_rectangle.Top;
text_rectangle.X=client_rectangle.X;
text_rectangle.Width=client_rectangle.Width;
text_rectangle.Y=checkmark_size+checkmark_space;
text_rectangle.Height=client_rectangle.Height-checkmark_size-checkmark_space;
break;
}
case ContentAlignment.TopLeft: {
checkbox_rectangle.X=client_rectangle.Left;
text_rectangle.X=client_rectangle.X+checkmark_size+checkmark_space;
text_rectangle.Width=client_rectangle.Width-checkmark_size-checkmark_space;
break;
}
case ContentAlignment.TopRight: {
checkbox_rectangle.X=client_rectangle.Right-checkmark_size;
text_rectangle.X=client_rectangle.X;
text_rectangle.Width=client_rectangle.Width-checkmark_size-checkmark_space;
break;
}
}
} else {
text_rectangle.X=client_rectangle.X;
text_rectangle.Width=client_rectangle.Width;
}
/* Set the horizontal alignment of our text */
switch(checkbox.text_alignment) {
case ContentAlignment.BottomLeft:
case ContentAlignment.MiddleLeft:
case ContentAlignment.TopLeft: {
text_format.Alignment=StringAlignment.Near;
break;
}
case ContentAlignment.BottomCenter:
case ContentAlignment.MiddleCenter:
case ContentAlignment.TopCenter: {
text_format.Alignment=StringAlignment.Center;
break;
}
case ContentAlignment.BottomRight:
case ContentAlignment.MiddleRight:
case ContentAlignment.TopRight: {
text_format.Alignment=StringAlignment.Far;
break;
}
}
/* Set the vertical alignment of our text */
switch(checkbox.text_alignment) {
case ContentAlignment.TopLeft:
case ContentAlignment.TopCenter:
case ContentAlignment.TopRight: {
text_format.LineAlignment=StringAlignment.Near;
break;
}
case ContentAlignment.BottomLeft:
case ContentAlignment.BottomCenter:
case ContentAlignment.BottomRight: {
text_format.LineAlignment=StringAlignment.Far;
break;
}
case ContentAlignment.MiddleLeft:
case ContentAlignment.MiddleCenter:
case ContentAlignment.MiddleRight: {
text_format.LineAlignment=StringAlignment.Center;
break;
}
}
ButtonState state = ButtonState.Normal;
if (checkbox.FlatStyle == FlatStyle.Flat) {
state |= ButtonState.Flat;
}
if (checkbox.Checked) {
state |= ButtonState.Checked;
}
if (checkbox.ThreeState && (checkbox.CheckState == CheckState.Indeterminate)) {
state |= ButtonState.Checked;
state |= ButtonState.Pushed;
}
// finally make sure the pushed and inavtive states are rendered
if (!checkbox.Enabled) {
state |= ButtonState.Inactive;
}
else if (checkbox.is_pressed) {
state |= ButtonState.Pushed;
}
// Start drawing
CheckBox_DrawCheckBox(dc, checkbox, state, checkbox_rectangle);
if ((checkbox.image != null) || (checkbox.image_list != null))
ButtonBase_DrawImage(checkbox, dc);
CheckBox_DrawText(checkbox, text_rectangle, dc, text_format);
if (checkbox.Focused && checkbox.Enabled && checkbox.appearance != Appearance.Button && checkbox.Text != String.Empty && checkbox.ShowFocusCues) {
SizeF text_size = dc.MeasureString (checkbox.Text, checkbox.Font);
Rectangle focus_rect = Rectangle.Empty;
focus_rect.X = text_rectangle.X;
focus_rect.Y = (int)((text_rectangle.Height - text_size.Height) / 2);
focus_rect.Size = text_size.ToSize ();
CheckBox_DrawFocus (checkbox, dc, focus_rect);
}
text_format.Dispose ();
}