{
// make icon transparent
Color transparentColor = Color.FromArgb(0, 128, 128);
Bitmap tempIcon = (Bitmap)icon;
tempIcon.MakeTransparent(transparentColor);
int iconTop = bounds.Top + (itemHeight - BITMAP_SIZE) / 2;
int iconLeft = bounds.Left + (STRIPE_WIDTH - BITMAP_SIZE) / 2;
if (enabled)
{
if (selected)
{
ControlPaint.DrawImageDisabled(g, icon, iconLeft + 1, iconTop, Color.Black);
g.DrawImage(icon, iconLeft, iconTop - 1);
}
else
{
g.DrawImage(icon, iconLeft + 1, iconTop);
}
}
else
{
ControlPaint.DrawImageDisabled(g, icon, iconLeft + 1, iconTop, SystemColors.HighlightText);
}
}
public void DrawSeparator(Graphics g, Rectangle bounds)
{
int y = bounds.Y + bounds.Height / 2;
g.DrawLine(new Pen(SystemColors.ControlDark), bounds.X + iconSize + 7, y, bounds.X + bounds.Width - 2, y);
}
public void DrawBackground(Graphics g, Rectangle bounds, DrawItemState state, bool toplevel, bool hasicon, bool enabled)
{
bool selected = (state & DrawItemState.Selected) > 0;
if (selected || ((state & DrawItemState.HotLight) > 0))
{
if (toplevel && selected)
{ // draw toplevel, selected menuitem
bounds.Inflate(-1, 0);
g.FillRectangle(new SolidBrush(stripeColor), bounds);
ControlPaint.DrawBorder3D(g, bounds.Left, bounds.Top, bounds.Width,
bounds.Height, Border3DStyle.Flat, Border3DSide.Top | Border3DSide.Left | Border3DSide.Right);
}
else
{ // draw menuitem hotlighted
if (enabled)
{
g.FillRectangle(new SolidBrush(selectionColor), bounds);
g.DrawRectangle(new Pen(borderColor), bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1);
}
else
{
// if disabled draw menuitem unselected
g.FillRectangle(new SolidBrush(stripeColor), bounds);
bounds.X += STRIPE_WIDTH;
bounds.Width -= STRIPE_WIDTH;
g.FillRectangle(new SolidBrush(bgColor), bounds);
}
}
}
else
{
if (!toplevel)
{ // draw menuitem, unselected
g.FillRectangle(new SolidBrush(stripeColor), bounds);
bounds.X += STRIPE_WIDTH;
bounds.Width -= STRIPE_WIDTH;
g.FillRectangle(new SolidBrush(bgColor), bounds);
}
else
{
// draw toplevel, unselected menuitem
g.FillRectangle(SystemBrushes.Control, bounds);
}
}
}
public void DrawMenuText(Graphics g, Rectangle bounds, string text, string shortcut, bool enabled, bool toplevel, DrawItemState state)
{
StringFormat stringformat = new StringFormat();
stringformat.HotkeyPrefix = ((state & DrawItemState.NoAccelerator) > 0) ? HotkeyPrefix.Hide : HotkeyPrefix.Show;
// if 3D background happens to be black, as it is the case when
// using a high contrast color theme, then make sure text is white
bool highContrast = false;
bool whiteHighContrast = false;
if (SystemColors.Control.ToArgb() == Color.FromArgb(255, 0, 0, 0).ToArgb()) highContrast = true;
if (SystemColors.Control.ToArgb() == Color.FromArgb(255, 255, 255, 255).ToArgb()) whiteHighContrast = true;
// if menu is a top level, extract the ampersand that indicates the shortcut character
// so that the menu text is centered
string textTopMenu = text;
if (toplevel)
{
int index = text.IndexOf("&");
if (index != -1)
{
// remove it
text = text.Remove(index, 1);
}
}