public override void DrawRadioButton (Graphics dc, Rectangle clip_rectangle, RadioButton radio_button) {
StringFormat text_format;
Rectangle client_rectangle;
Rectangle text_rectangle;
Rectangle radiobutton_rectangle;
int radiobutton_size = 13;
int radiobutton_space = 4;
client_rectangle = radio_button.ClientRectangle;
text_rectangle = client_rectangle;
radiobutton_rectangle = new Rectangle(text_rectangle.X, text_rectangle.Y, radiobutton_size, radiobutton_size);
text_format = new StringFormat();
text_format.Alignment = StringAlignment.Near;
text_format.LineAlignment = StringAlignment.Center;
text_format.HotkeyPrefix = HotkeyPrefix.Show;
/* Calculate the position of text and checkbox rectangle */
if (radio_button.appearance!=Appearance.Button) {
switch(radio_button.radiobutton_alignment) {
case ContentAlignment.BottomCenter: {
radiobutton_rectangle.X=(client_rectangle.Right-client_rectangle.Left)/2-radiobutton_size/2;
radiobutton_rectangle.Y=client_rectangle.Bottom-radiobutton_size;
text_rectangle.X=client_rectangle.X;
text_rectangle.Width=client_rectangle.Width;
text_rectangle.Height=client_rectangle.Height-radiobutton_size-radiobutton_space;
break;
}
case ContentAlignment.BottomLeft: {
radiobutton_rectangle.X=client_rectangle.Left;
radiobutton_rectangle.Y=client_rectangle.Bottom-radiobutton_size;
text_rectangle.X=client_rectangle.X+radiobutton_size+radiobutton_space;
text_rectangle.Width=client_rectangle.Width-radiobutton_size-radiobutton_space;
break;
}
case ContentAlignment.BottomRight: {
radiobutton_rectangle.X=client_rectangle.Right-radiobutton_size;
radiobutton_rectangle.Y=client_rectangle.Bottom-radiobutton_size;
text_rectangle.X=client_rectangle.X;
text_rectangle.Width=client_rectangle.Width-radiobutton_size-radiobutton_space;
break;
}
case ContentAlignment.MiddleCenter: {
radiobutton_rectangle.X=(client_rectangle.Right-client_rectangle.Left)/2-radiobutton_size/2;
radiobutton_rectangle.Y=(client_rectangle.Bottom-client_rectangle.Top)/2-radiobutton_size/2;
text_rectangle.X=client_rectangle.X;
text_rectangle.Width=client_rectangle.Width;
break;
}
default:
case ContentAlignment.MiddleLeft: {
radiobutton_rectangle.X=client_rectangle.Left;
radiobutton_rectangle.Y=(client_rectangle.Bottom-client_rectangle.Top)/2-radiobutton_size/2;
text_rectangle.X=client_rectangle.X+radiobutton_size+radiobutton_space;
text_rectangle.Width=client_rectangle.Width-radiobutton_size-radiobutton_space;
break;
}
case ContentAlignment.MiddleRight: {
radiobutton_rectangle.X=client_rectangle.Right-radiobutton_size;
radiobutton_rectangle.Y=(client_rectangle.Bottom-client_rectangle.Top)/2-radiobutton_size/2;
text_rectangle.X=client_rectangle.X;
text_rectangle.Width=client_rectangle.Width-radiobutton_size-radiobutton_space;
break;
}
case ContentAlignment.TopCenter: {
radiobutton_rectangle.X=(client_rectangle.Right-client_rectangle.Left)/2-radiobutton_size/2;
radiobutton_rectangle.Y=client_rectangle.Top;
text_rectangle.X=client_rectangle.X;
text_rectangle.Y=radiobutton_size+radiobutton_space;
text_rectangle.Width=client_rectangle.Width;
text_rectangle.Height=client_rectangle.Height-radiobutton_size-radiobutton_space;
break;
}
case ContentAlignment.TopLeft: {
radiobutton_rectangle.X=client_rectangle.Left;
radiobutton_rectangle.Y=client_rectangle.Top;
text_rectangle.X=client_rectangle.X+radiobutton_size+radiobutton_space;
text_rectangle.Width=client_rectangle.Width-radiobutton_size-radiobutton_space;
break;
}
case ContentAlignment.TopRight: {
radiobutton_rectangle.X=client_rectangle.Right-radiobutton_size;
radiobutton_rectangle.Y=client_rectangle.Top;
text_rectangle.X=client_rectangle.X;
text_rectangle.Width=client_rectangle.Width-radiobutton_size-radiobutton_space;
break;
}
}
} else {
text_rectangle.X=client_rectangle.X;
text_rectangle.Width=client_rectangle.Width;
}
/* Set the horizontal alignment of our text */
switch(radio_button.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(radio_button.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 (radio_button.FlatStyle == FlatStyle.Flat) {
state |= ButtonState.Flat;
}
if (radio_button.Checked) {
state |= ButtonState.Checked;
}
if (!radio_button.Enabled) {
state |= ButtonState.Inactive;
}
// Start drawing
RadioButton_DrawButton(radio_button, dc, state, radiobutton_rectangle);
if ((radio_button.image != null) || (radio_button.image_list != null))
ButtonBase_DrawImage(radio_button, dc);
RadioButton_DrawText(radio_button, text_rectangle, dc, text_format);
if (radio_button.Focused && radio_button.Enabled && radio_button.appearance != Appearance.Button && radio_button.Text != String.Empty && radio_button.ShowFocusCues) {
SizeF text_size = dc.MeasureString (radio_button.Text, radio_button.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 ();
RadioButton_DrawFocus (radio_button, dc, focus_rect);
}
text_format.Dispose ();
}