Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / ToolStripHighContrastRenderer.cs / 1305376 / ToolStripHighContrastRenderer.cs
#region Using directives
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Collections.Specialized;
#endregion
namespace System.Windows.Forms {
// this renderer supports high contrast for ToolStripProfessional and ToolStripSystemRenderer.
internal class ToolStripHighContrastRenderer : ToolStripSystemRenderer {
private const int GRIP_PADDING = 4;
BitVector32 options = new BitVector32();
private static readonly int optionsDottedBorder = BitVector32.CreateMask();
private static readonly int optionsDottedGrip = BitVector32.CreateMask(optionsDottedBorder);
private static readonly int optionsFillWhenSelected = BitVector32.CreateMask(optionsDottedGrip);
public ToolStripHighContrastRenderer(bool systemRenderMode) {
options[optionsDottedBorder | optionsDottedGrip | optionsFillWhenSelected] = !systemRenderMode;
}
public bool DottedBorder {
get { return options[optionsDottedBorder]; }
}
public bool DottedGrip {
get { return options[optionsDottedGrip]; }
}
public bool FillWhenSelected{
get { return options[optionsFillWhenSelected]; }
}
// this is a renderer override, so return null so we dont get into an infinite loop.
internal override ToolStripRenderer RendererOverride {
get { return null; }
}
protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) {
base.OnRenderArrow(e);
}
protected override void OnRenderGrip(ToolStripGripRenderEventArgs e) {
if (DottedGrip) {
Graphics g = e.Graphics;
Rectangle bounds = e.GripBounds;
ToolStrip toolStrip = e.ToolStrip;
int height = (toolStrip.Orientation == Orientation.Horizontal) ? bounds.Height : bounds.Width;
int width = (toolStrip.Orientation == Orientation.Horizontal) ? bounds.Width : bounds.Height;
int numRectangles = (height - (GRIP_PADDING * 2)) / 4;
if (numRectangles > 0) {
Rectangle[] shadowRects = new Rectangle[numRectangles];
int startY = GRIP_PADDING;
int startX = (width / 2);
for (int i = 0; i < numRectangles; i++) {
shadowRects[i] = (toolStrip.Orientation == Orientation.Horizontal) ?
new Rectangle(startX, startY, 2, 2) :
new Rectangle(startY, startX, 2, 2);
startY += 4;
}
g.FillRectangles(SystemBrushes.ControlLight, shadowRects);
}
}
else {
base.OnRenderGrip(e);
}
}
protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) {
if (FillWhenSelected) {
RenderItemInternalFilled(e, false);
}
else {
base.OnRenderDropDownButtonBackground(e);
if (e.Item.Pressed) {
e.Graphics.DrawRectangle(SystemPens.ButtonHighlight, new Rectangle(0, 0, e.Item.Width - 1, e.Item.Height - 1));
}
}
}
protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) {
base.OnRenderItemCheck(e);
}
protected override void OnRenderImageMargin(ToolStripRenderEventArgs e) {
// do nothing
}
protected override void OnRenderItemBackground(ToolStripItemRenderEventArgs e) {
base.OnRenderItemBackground(e);
}
protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e) {
ToolStripSplitButton item = e.Item as ToolStripSplitButton;
Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
Graphics g = e.Graphics;
if (item != null) {
Rectangle dropDownRect = item.DropDownButtonBounds;
if (item.Pressed) {
g.DrawRectangle(SystemPens.ButtonHighlight, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1);
}
else if (item.Selected) {
g.FillRectangle(SystemBrushes.Highlight, bounds);
g.DrawRectangle(SystemPens.ButtonHighlight, bounds.X, bounds.Y, bounds.Width-1, bounds.Height -1);
g.DrawRectangle(SystemPens.ButtonHighlight, dropDownRect);
}
DrawArrow(new ToolStripArrowRenderEventArgs(g, item, dropDownRect, SystemColors.ControlText, ArrowDirection.Down));
}
}
protected override void OnRenderStatusStripSizingGrip(ToolStripRenderEventArgs e) {
base.OnRenderStatusStripSizingGrip(e);
}
protected override void OnRenderLabelBackground(ToolStripItemRenderEventArgs e) {
if (FillWhenSelected) {
RenderItemInternalFilled(e);
}
else {
base.OnRenderLabelBackground(e);
}
}
protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) {
base.OnRenderMenuItemBackground(e);
if (!e.Item.IsOnDropDown && e.Item.Pressed) {
e.Graphics.DrawRectangle(SystemPens.ButtonHighlight, 0, 0, e.Item.Width - 1, e.Item.Height - 1);
}
}
protected override void OnRenderOverflowButtonBackground(ToolStripItemRenderEventArgs e) {
if (FillWhenSelected) {
RenderItemInternalFilled(e, /*pressFill = */false);
ToolStripItem item = e.Item;
Graphics g = e.Graphics;
Color arrowColor = item.Enabled ? SystemColors.ControlText : SystemColors.ControlDark;
DrawArrow(new ToolStripArrowRenderEventArgs(g, item, new Rectangle(Point.Empty, item.Size), arrowColor, ArrowDirection.Down));
}
else {
base.OnRenderOverflowButtonBackground(e);
}
}
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) {
if (e.TextColor != SystemColors.HighlightText || e.TextColor != SystemColors.ControlText) {
// we'll change the DefaultTextColor, if someone wants to change this,manually set the TextColor property.
e.DefaultTextColor = SystemColors.ControlText;
}
base.OnRenderItemText(e);
}
protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) {
// do nothing. LOGO requirements ask us not to paint background effects behind
}
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) {
Rectangle bounds = new Rectangle(Point.Empty, e.ToolStrip.Size);
Graphics g = e.Graphics;
if (e.ToolStrip is ToolStripDropDown) {
g.DrawRectangle(SystemPens.ButtonHighlight, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1);
if (!(e.ToolStrip is ToolStripOverflow)) {
// make the neck connected.
g.FillRectangle(SystemBrushes.Control, e.ConnectedArea);
}
}
else if (e.ToolStrip is MenuStrip) {
// do nothing
}
else if (e.ToolStrip is StatusStrip) {
g.DrawRectangle(SystemPens.ButtonShadow, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1);
}
else {
RenderToolStripBackgroundInternal(e);
}
}
private void RenderToolStripBackgroundInternal(ToolStripRenderEventArgs e) {
Rectangle bounds = new Rectangle(Point.Empty, e.ToolStrip.Size);
Graphics g = e.Graphics;
if (DottedBorder) {
using (Pen p = new Pen(SystemColors.ButtonShadow)) {
p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
bool oddWidth = ((bounds.Width & 0x1) == 0x1);
bool oddHeight = ((bounds.Height & 0x1) == 0x1);
int indent = 2;
// top
g.DrawLine(p, bounds.X + indent, bounds.Y, bounds.Width - 1, bounds.Y);
// bottom
g.DrawLine(p, bounds.X + indent, bounds.Height - 1, bounds.Width - 1, bounds.Height - 1);
// left
g.DrawLine(p, bounds.X, bounds.Y + indent, bounds.X, bounds.Height - 1);
// right
g.DrawLine(p, bounds.Width - 1, bounds.Y + indent, bounds.Width - 1, bounds.Height - 1);
// connecting pixels
// top left conntecting pixel - always drawn
g.FillRectangle(SystemBrushes.ButtonShadow, new Rectangle(1, 1, 1, 1));
if (oddWidth) {
// top right pixel
g.FillRectangle(SystemBrushes.ButtonShadow, new Rectangle(bounds.Width - 2, 1, 1, 1));
}
// bottom conntecting pixels - drawn only if height is odd
if (oddHeight) {
// bottom left
g.FillRectangle(SystemBrushes.ButtonShadow, new Rectangle(1, bounds.Height - 2, 1, 1));
}
// top and bottom right conntecting pixel - drawn only if height and width are odd
if (oddHeight && oddWidth) {
// bottom right
g.FillRectangle(SystemBrushes.ButtonShadow, new Rectangle(bounds.Width - 2, bounds.Height - 2, 1, 1));
}
}
}
else {
// draw solid border
bounds.Width -= 1;
bounds.Height -= 1;
g.DrawRectangle(SystemPens.ButtonShadow, bounds);
}
}
protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) {
Pen foreColorPen = SystemPens.ButtonShadow;
Graphics g = e.Graphics;
Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
if (e.Vertical) {
if (bounds.Height >= 8) {
bounds.Inflate(0, -4); // scoot down 4PX and start drawing
}
// Draw dark line
int startX = bounds.Width / 2;
g.DrawLine(foreColorPen, startX, bounds.Top, startX, bounds.Bottom - 1);
}
else {
//
// horizontal separator
if (bounds.Width >= 4) {
bounds.Inflate(-2, 0); // scoot over 2PX and start drawing
}
// Draw dark line
int startY = bounds.Height / 2;
g.DrawLine(foreColorPen, bounds.Left, startY, bounds.Right - 1, startY);
}
}
// Indicates whether system is currently set to high contrast 'white on black' mode
internal static bool IsHighContrastWhiteOnBlack()
{
return SystemColors.Control.ToArgb() == Color.Black.ToArgb();
}
protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) {
Image image = e.Image;
if (image != null) {
if (Image.GetPixelFormatSize(image.PixelFormat) > 16) {
// for 24, 32 bit images, just paint normally - mapping the color table is not
// going to work when you can have full color.
base.OnRenderItemImage(e);
return;
}
Graphics g = e.Graphics;
ToolStripItem item = e.Item;
Rectangle imageRect = e.ImageRectangle;
using (ImageAttributes attrs = new ImageAttributes()) {
if (IsHighContrastWhiteOnBlack() && !(FillWhenSelected && (e.Item.Pressed || e.Item.Selected))) {
// translate white, black and blue to colors visible in high contrast mode.
ColorMap cm1 = new ColorMap();
ColorMap cm2 = new ColorMap();
ColorMap cm3 = new ColorMap();
cm1.OldColor = Color.Black;
cm1.NewColor = Color.White;
cm2.OldColor = Color.White;
cm2.NewColor = Color.Black;
cm3.OldColor = Color.FromArgb(0, 0, 128);
cm3.NewColor = Color.White;
attrs.SetRemapTable(new ColorMap[] { cm1, cm2, cm3 }, ColorAdjustType.Bitmap);
}
if (item.ImageScaling == ToolStripItemImageScaling.None) {
g.DrawImage(image, imageRect, 0, 0, imageRect.Width, imageRect.Height, GraphicsUnit.Pixel, attrs);
}
else {
g.DrawImage(image, imageRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attrs);
}
}
}
}
protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) {
if (FillWhenSelected) {
ToolStripButton button = e.Item as ToolStripButton;
if (button != null && button.Checked) {
Graphics g = e.Graphics;
Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
if (button.CheckState == CheckState.Checked) {
g.FillRectangle(SystemBrushes.Highlight, bounds);
}
g.DrawRectangle(SystemPens.ControlLight, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1);
}
else {
RenderItemInternalFilled(e);
}
}
else {
base.OnRenderButtonBackground(e);
}
}
private void RenderItemInternalFilled(ToolStripItemRenderEventArgs e) {
RenderItemInternalFilled(e, /*pressFill=*/true);
}
private void RenderItemInternalFilled(ToolStripItemRenderEventArgs e, bool pressFill) {
Graphics g = e.Graphics;
Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
if (e.Item.Pressed) {
if (pressFill) {
g.FillRectangle(SystemBrushes.Highlight, bounds);
}
else {
g.DrawRectangle(SystemPens.ControlLight, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1);
}
}
else if (e.Item.Selected) {
g.FillRectangle(SystemBrushes.Highlight, bounds);
g.DrawRectangle(SystemPens.ControlLight, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
#region Using directives
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Collections.Specialized;
#endregion
namespace System.Windows.Forms {
// this renderer supports high contrast for ToolStripProfessional and ToolStripSystemRenderer.
internal class ToolStripHighContrastRenderer : ToolStripSystemRenderer {
private const int GRIP_PADDING = 4;
BitVector32 options = new BitVector32();
private static readonly int optionsDottedBorder = BitVector32.CreateMask();
private static readonly int optionsDottedGrip = BitVector32.CreateMask(optionsDottedBorder);
private static readonly int optionsFillWhenSelected = BitVector32.CreateMask(optionsDottedGrip);
public ToolStripHighContrastRenderer(bool systemRenderMode) {
options[optionsDottedBorder | optionsDottedGrip | optionsFillWhenSelected] = !systemRenderMode;
}
public bool DottedBorder {
get { return options[optionsDottedBorder]; }
}
public bool DottedGrip {
get { return options[optionsDottedGrip]; }
}
public bool FillWhenSelected{
get { return options[optionsFillWhenSelected]; }
}
// this is a renderer override, so return null so we dont get into an infinite loop.
internal override ToolStripRenderer RendererOverride {
get { return null; }
}
protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) {
base.OnRenderArrow(e);
}
protected override void OnRenderGrip(ToolStripGripRenderEventArgs e) {
if (DottedGrip) {
Graphics g = e.Graphics;
Rectangle bounds = e.GripBounds;
ToolStrip toolStrip = e.ToolStrip;
int height = (toolStrip.Orientation == Orientation.Horizontal) ? bounds.Height : bounds.Width;
int width = (toolStrip.Orientation == Orientation.Horizontal) ? bounds.Width : bounds.Height;
int numRectangles = (height - (GRIP_PADDING * 2)) / 4;
if (numRectangles > 0) {
Rectangle[] shadowRects = new Rectangle[numRectangles];
int startY = GRIP_PADDING;
int startX = (width / 2);
for (int i = 0; i < numRectangles; i++) {
shadowRects[i] = (toolStrip.Orientation == Orientation.Horizontal) ?
new Rectangle(startX, startY, 2, 2) :
new Rectangle(startY, startX, 2, 2);
startY += 4;
}
g.FillRectangles(SystemBrushes.ControlLight, shadowRects);
}
}
else {
base.OnRenderGrip(e);
}
}
protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) {
if (FillWhenSelected) {
RenderItemInternalFilled(e, false);
}
else {
base.OnRenderDropDownButtonBackground(e);
if (e.Item.Pressed) {
e.Graphics.DrawRectangle(SystemPens.ButtonHighlight, new Rectangle(0, 0, e.Item.Width - 1, e.Item.Height - 1));
}
}
}
protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) {
base.OnRenderItemCheck(e);
}
protected override void OnRenderImageMargin(ToolStripRenderEventArgs e) {
// do nothing
}
protected override void OnRenderItemBackground(ToolStripItemRenderEventArgs e) {
base.OnRenderItemBackground(e);
}
protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e) {
ToolStripSplitButton item = e.Item as ToolStripSplitButton;
Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
Graphics g = e.Graphics;
if (item != null) {
Rectangle dropDownRect = item.DropDownButtonBounds;
if (item.Pressed) {
g.DrawRectangle(SystemPens.ButtonHighlight, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1);
}
else if (item.Selected) {
g.FillRectangle(SystemBrushes.Highlight, bounds);
g.DrawRectangle(SystemPens.ButtonHighlight, bounds.X, bounds.Y, bounds.Width-1, bounds.Height -1);
g.DrawRectangle(SystemPens.ButtonHighlight, dropDownRect);
}
DrawArrow(new ToolStripArrowRenderEventArgs(g, item, dropDownRect, SystemColors.ControlText, ArrowDirection.Down));
}
}
protected override void OnRenderStatusStripSizingGrip(ToolStripRenderEventArgs e) {
base.OnRenderStatusStripSizingGrip(e);
}
protected override void OnRenderLabelBackground(ToolStripItemRenderEventArgs e) {
if (FillWhenSelected) {
RenderItemInternalFilled(e);
}
else {
base.OnRenderLabelBackground(e);
}
}
protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e) {
base.OnRenderMenuItemBackground(e);
if (!e.Item.IsOnDropDown && e.Item.Pressed) {
e.Graphics.DrawRectangle(SystemPens.ButtonHighlight, 0, 0, e.Item.Width - 1, e.Item.Height - 1);
}
}
protected override void OnRenderOverflowButtonBackground(ToolStripItemRenderEventArgs e) {
if (FillWhenSelected) {
RenderItemInternalFilled(e, /*pressFill = */false);
ToolStripItem item = e.Item;
Graphics g = e.Graphics;
Color arrowColor = item.Enabled ? SystemColors.ControlText : SystemColors.ControlDark;
DrawArrow(new ToolStripArrowRenderEventArgs(g, item, new Rectangle(Point.Empty, item.Size), arrowColor, ArrowDirection.Down));
}
else {
base.OnRenderOverflowButtonBackground(e);
}
}
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) {
if (e.TextColor != SystemColors.HighlightText || e.TextColor != SystemColors.ControlText) {
// we'll change the DefaultTextColor, if someone wants to change this,manually set the TextColor property.
e.DefaultTextColor = SystemColors.ControlText;
}
base.OnRenderItemText(e);
}
protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) {
// do nothing. LOGO requirements ask us not to paint background effects behind
}
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) {
Rectangle bounds = new Rectangle(Point.Empty, e.ToolStrip.Size);
Graphics g = e.Graphics;
if (e.ToolStrip is ToolStripDropDown) {
g.DrawRectangle(SystemPens.ButtonHighlight, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1);
if (!(e.ToolStrip is ToolStripOverflow)) {
// make the neck connected.
g.FillRectangle(SystemBrushes.Control, e.ConnectedArea);
}
}
else if (e.ToolStrip is MenuStrip) {
// do nothing
}
else if (e.ToolStrip is StatusStrip) {
g.DrawRectangle(SystemPens.ButtonShadow, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1);
}
else {
RenderToolStripBackgroundInternal(e);
}
}
private void RenderToolStripBackgroundInternal(ToolStripRenderEventArgs e) {
Rectangle bounds = new Rectangle(Point.Empty, e.ToolStrip.Size);
Graphics g = e.Graphics;
if (DottedBorder) {
using (Pen p = new Pen(SystemColors.ButtonShadow)) {
p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
bool oddWidth = ((bounds.Width & 0x1) == 0x1);
bool oddHeight = ((bounds.Height & 0x1) == 0x1);
int indent = 2;
// top
g.DrawLine(p, bounds.X + indent, bounds.Y, bounds.Width - 1, bounds.Y);
// bottom
g.DrawLine(p, bounds.X + indent, bounds.Height - 1, bounds.Width - 1, bounds.Height - 1);
// left
g.DrawLine(p, bounds.X, bounds.Y + indent, bounds.X, bounds.Height - 1);
// right
g.DrawLine(p, bounds.Width - 1, bounds.Y + indent, bounds.Width - 1, bounds.Height - 1);
// connecting pixels
// top left conntecting pixel - always drawn
g.FillRectangle(SystemBrushes.ButtonShadow, new Rectangle(1, 1, 1, 1));
if (oddWidth) {
// top right pixel
g.FillRectangle(SystemBrushes.ButtonShadow, new Rectangle(bounds.Width - 2, 1, 1, 1));
}
// bottom conntecting pixels - drawn only if height is odd
if (oddHeight) {
// bottom left
g.FillRectangle(SystemBrushes.ButtonShadow, new Rectangle(1, bounds.Height - 2, 1, 1));
}
// top and bottom right conntecting pixel - drawn only if height and width are odd
if (oddHeight && oddWidth) {
// bottom right
g.FillRectangle(SystemBrushes.ButtonShadow, new Rectangle(bounds.Width - 2, bounds.Height - 2, 1, 1));
}
}
}
else {
// draw solid border
bounds.Width -= 1;
bounds.Height -= 1;
g.DrawRectangle(SystemPens.ButtonShadow, bounds);
}
}
protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) {
Pen foreColorPen = SystemPens.ButtonShadow;
Graphics g = e.Graphics;
Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
if (e.Vertical) {
if (bounds.Height >= 8) {
bounds.Inflate(0, -4); // scoot down 4PX and start drawing
}
// Draw dark line
int startX = bounds.Width / 2;
g.DrawLine(foreColorPen, startX, bounds.Top, startX, bounds.Bottom - 1);
}
else {
//
// horizontal separator
if (bounds.Width >= 4) {
bounds.Inflate(-2, 0); // scoot over 2PX and start drawing
}
// Draw dark line
int startY = bounds.Height / 2;
g.DrawLine(foreColorPen, bounds.Left, startY, bounds.Right - 1, startY);
}
}
// Indicates whether system is currently set to high contrast 'white on black' mode
internal static bool IsHighContrastWhiteOnBlack()
{
return SystemColors.Control.ToArgb() == Color.Black.ToArgb();
}
protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) {
Image image = e.Image;
if (image != null) {
if (Image.GetPixelFormatSize(image.PixelFormat) > 16) {
// for 24, 32 bit images, just paint normally - mapping the color table is not
// going to work when you can have full color.
base.OnRenderItemImage(e);
return;
}
Graphics g = e.Graphics;
ToolStripItem item = e.Item;
Rectangle imageRect = e.ImageRectangle;
using (ImageAttributes attrs = new ImageAttributes()) {
if (IsHighContrastWhiteOnBlack() && !(FillWhenSelected && (e.Item.Pressed || e.Item.Selected))) {
// translate white, black and blue to colors visible in high contrast mode.
ColorMap cm1 = new ColorMap();
ColorMap cm2 = new ColorMap();
ColorMap cm3 = new ColorMap();
cm1.OldColor = Color.Black;
cm1.NewColor = Color.White;
cm2.OldColor = Color.White;
cm2.NewColor = Color.Black;
cm3.OldColor = Color.FromArgb(0, 0, 128);
cm3.NewColor = Color.White;
attrs.SetRemapTable(new ColorMap[] { cm1, cm2, cm3 }, ColorAdjustType.Bitmap);
}
if (item.ImageScaling == ToolStripItemImageScaling.None) {
g.DrawImage(image, imageRect, 0, 0, imageRect.Width, imageRect.Height, GraphicsUnit.Pixel, attrs);
}
else {
g.DrawImage(image, imageRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attrs);
}
}
}
}
protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) {
if (FillWhenSelected) {
ToolStripButton button = e.Item as ToolStripButton;
if (button != null && button.Checked) {
Graphics g = e.Graphics;
Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
if (button.CheckState == CheckState.Checked) {
g.FillRectangle(SystemBrushes.Highlight, bounds);
}
g.DrawRectangle(SystemPens.ControlLight, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1);
}
else {
RenderItemInternalFilled(e);
}
}
else {
base.OnRenderButtonBackground(e);
}
}
private void RenderItemInternalFilled(ToolStripItemRenderEventArgs e) {
RenderItemInternalFilled(e, /*pressFill=*/true);
}
private void RenderItemInternalFilled(ToolStripItemRenderEventArgs e, bool pressFill) {
Graphics g = e.Graphics;
Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
if (e.Item.Pressed) {
if (pressFill) {
g.FillRectangle(SystemBrushes.Highlight, bounds);
}
else {
g.DrawRectangle(SystemPens.ControlLight, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1);
}
}
else if (e.Item.Selected) {
g.FillRectangle(SystemBrushes.Highlight, bounds);
g.DrawRectangle(SystemPens.ControlLight, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CodeMemberEvent.cs
- QueueProcessor.cs
- SecurityException.cs
- XmlDataImplementation.cs
- OutgoingWebResponseContext.cs
- ContentControl.cs
- autovalidator.cs
- WebControlParameterProxy.cs
- RouteItem.cs
- HtmlSelect.cs
- WebPartAuthorizationEventArgs.cs
- MethodRental.cs
- SafeArrayRankMismatchException.cs
- CalendarDateRangeChangingEventArgs.cs
- SendMailErrorEventArgs.cs
- FieldTemplateFactory.cs
- securitycriticaldata.cs
- BasicCommandTreeVisitor.cs
- UTF7Encoding.cs
- SamlAuthenticationClaimResource.cs
- FileUtil.cs
- ListViewInsertionMark.cs
- Hash.cs
- DbXmlEnabledProviderManifest.cs
- CardSpaceSelector.cs
- SystemIPGlobalProperties.cs
- ClrProviderManifest.cs
- FormattedText.cs
- ContentOperations.cs
- XmlAggregates.cs
- ChannelManager.cs
- XmlValueConverter.cs
- BrowsableAttribute.cs
- FieldAccessException.cs
- DataStorage.cs
- ExpandSegment.cs
- TiffBitmapDecoder.cs
- LocationUpdates.cs
- NativeMethods.cs
- ColumnResizeAdorner.cs
- SafeJobHandle.cs
- NativeMethodsOther.cs
- SafeSecurityHandles.cs
- XmlDocumentType.cs
- SafeCryptoHandles.cs
- HttpResponseHeader.cs
- HttpApplicationFactory.cs
- HtmlInputPassword.cs
- StackSpiller.Temps.cs
- PersianCalendar.cs
- DiagnosticsConfiguration.cs
- DataGridAutomationPeer.cs
- TeredoHelper.cs
- SchemaElementLookUpTable.cs
- StateMachine.cs
- TraceContextEventArgs.cs
- ISAPIApplicationHost.cs
- dataprotectionpermissionattribute.cs
- TabItemAutomationPeer.cs
- IUnknownConstantAttribute.cs
- BufferedReceiveElement.cs
- SlipBehavior.cs
- CultureSpecificCharacterBufferRange.cs
- StrokeRenderer.cs
- XmlAutoDetectWriter.cs
- COM2ColorConverter.cs
- HyperLinkStyle.cs
- SlotInfo.cs
- PageContentAsyncResult.cs
- TextBoxLine.cs
- FlagsAttribute.cs
- EncodingInfo.cs
- SiteMapNodeItemEventArgs.cs
- XamlDebuggerXmlReader.cs
- SiteMapDataSourceView.cs
- CodeTypeConstructor.cs
- VisualBasicSettingsHandler.cs
- ICspAsymmetricAlgorithm.cs
- MessageHeaderT.cs
- AvTraceFormat.cs
- XmlSchemaGroup.cs
- Mutex.cs
- ExtractedStateEntry.cs
- storepermission.cs
- AnnotationDocumentPaginator.cs
- ChtmlLinkAdapter.cs
- EmptyControlCollection.cs
- ToolStripProgressBar.cs
- DynamicDocumentPaginator.cs
- WebBaseEventKeyComparer.cs
- ContourSegment.cs
- SqlDataReaderSmi.cs
- Int64KeyFrameCollection.cs
- HostedHttpRequestAsyncResult.cs
- JoinElimination.cs
- RequestDescription.cs
- TemplateFactory.cs
- SqlDataSourceConfigureSortForm.cs
- VirtualDirectoryMappingCollection.cs
- ObjectSpanRewriter.cs