using System.Windows.Media; namespace System.Windows.Forms { public class ToolStripProfessionalRenderer : ToolStripRenderer { public ProfessionalColorTable ColorTable { get; } public ToolStripProfessionalRenderer(ProfessionalColorTable table) { ColorTable = table; } internal Brush GetBrush(Drawing.Color start, Drawing.Color middle, Drawing.Color end, int angle = 90) { if (start == end && start == middle) return Helper.GetBrush(start); var gradientStops = new GradientStopCollection(); gradientStops.Add(new GradientStop(Helper.GetColor(start), 0)); gradientStops.Add(new GradientStop(Helper.GetColor(middle), 0.5)); gradientStops.Add(new GradientStop(Helper.GetColor(end), 1)); return new LinearGradientBrush(gradientStops, angle); } internal Brush GetBrush(Drawing.Color color) => Helper.GetBrush(color); internal Brush GetBrush(Drawing.Color start, Drawing.Color end, int angle = 90, bool glassEffect = false) { if (start == end) return Helper.GetBrush(start); if (glassEffect) { var gradientStops = new GradientStopCollection(); gradientStops.Add(new GradientStop(Helper.GetColor(start), 0)); gradientStops.Add(new GradientStop(Helper.GetColor(start), 0.3)); gradientStops.Add(new GradientStop(Helper.GetColor(end), 0.5)); gradientStops.Add(new GradientStop(Helper.GetColor(end), 1)); return new LinearGradientBrush(gradientStops, angle); } return new LinearGradientBrush(Helper.GetColor(start), Helper.GetColor(end), angle); } private ProfessionalColorTable ct => ColorTable; private Brush foreground; private Brush disabledForeground; private Brush toolBarBorder; private Brush toolBarHorizontalBackground; private Brush toolBarVerticalBackground; private Brush toolBarGripDark; private Brush toolBarGripLight; private Brush statusBarBackground; private Brush statusBarForeground; private Brush buttonStaticBackground; private Brush buttonStaticBorder; private Brush buttonMouseOverBackground; private Brush buttonMouseOverBorder; private Brush buttonCheckedBackground; private Brush buttonCheckedBorder; private Brush buttonArrowBackground; private Brush comboBoxStaticBackground; private Brush comboBoxStaticBorder; private Brush comboBoxStaticGlyph; private Brush comboBoxMouseOverBackground; private Brush comboBoxMouseOverBorder; private Brush comboBoxMouseOverGlyph; private Brush comboBoxDisabledBackground; private Brush comboBoxDisabledBorder; private Brush comboBoxDisabledGlyph; private Brush textBoxStaticBackground; private Brush separatorDark; private Brush separatorLight; private Brush menuStripStaticBackground; private Brush menuStaticBackground; private Brush menuStaticBorder; private Brush menuMarginBackground; private Brush menuQATBackground; private Brush menuItemCheckBackground; private Brush menuItemCheckBorder; private Brush menuItemHighlightBackground; private Brush menuItemHighlightBorder; private Brush topLevelMenuItemForeground; private Brush topLevelMenuItemDisabledForeground; internal Brush Foreground => foreground ??= GetBrush(ct.Foreground); internal Brush DisabledForeground => disabledForeground ??= GetBrush(ct.DisabledForeground); internal Brush ToolBarBorder => toolBarBorder ??= GetBrush(ct.ToolStripBorder); internal Brush ToolBarHorizontalBackground => toolBarHorizontalBackground ??= GetBrush(ct.ToolStripGradientBegin, ct.ToolStripGradientMiddle, ct.ToolStripGradientEnd); internal Brush ToolBarVerticalBackground => toolBarVerticalBackground ??= GetBrush(ct.ToolStripGradientBegin, ct.ToolStripGradientMiddle, ct.ToolStripGradientEnd, 0); internal Brush ToolBarGripDark => toolBarGripDark ??= GetBrush(ct.GripDark); internal Brush ToolBarGripLight => toolBarGripLight ??= GetBrush(ct.GripLight); internal Brush StatusBarBackground => statusBarBackground ??= GetBrush(ct.StatusStripGradientBegin, ct.StatusStripGradientEnd, ct.StatusStripGradientAngle, ct.StatusStripGradientGlass); internal Brush StatusBarForeground => statusBarForeground ??= GetBrush(ct.StatusStripForeground); internal Brush ButtonStaticBackground => buttonStaticBackground ??= GetBrush(Drawing.Color.Transparent); internal Brush ButtonStaticBorder => buttonStaticBorder ??= GetBrush(Drawing.Color.Transparent); internal Brush ButtonMouseOverBackground => buttonMouseOverBackground ??= GetBrush(ct.ButtonSelectedGradientBegin, ct.ButtonSelectedGradientMiddle, ct.ButtonSelectedGradientEnd); internal Brush ButtonMouseOverBorder => buttonMouseOverBorder ??= GetBrush(ct.ButtonSelectedHighlightBorder); internal Brush ButtonCheckedBackground => buttonCheckedBackground ??= GetBrush(ct.ButtonCheckedGradientBegin, ct.ButtonCheckedGradientMiddle, ct.ButtonCheckedGradientEnd); internal Brush ButtonCheckedBorder => buttonCheckedBorder ??= GetBrush(ct.ButtonSelectedHighlightBorder); internal Brush ButtonArrowBackground => buttonArrowBackground ??= GetBrush(ct.Foreground); internal Brush ComboBoxStaticBackground => comboBoxStaticBackground ??= GetBrush(ct.ComboBoxBackground); internal Brush ComboBoxStaticBorder => comboBoxStaticBorder ??= GetBrush(ct.ComboBoxStaticBorder); internal Brush ComboBoxStaticGlyph => comboBoxStaticGlyph ??= GetBrush(ct.Foreground); internal Brush ComboBoxMouseOverBackground => comboBoxMouseOverBackground ??= GetBrush(ct.ComboBoxButtonSelectedGradientBegin, ct.ComboBoxButtonSelectedGradientEnd); internal Brush ComboBoxMouseOverBorder => comboBoxMouseOverBorder ??= GetBrush(ct.ComboBoxBorder); internal Brush ComboBoxMouseOverGlyph => comboBoxMouseOverGlyph ??= GetBrush(ct.Foreground); internal Brush ComboBoxDisabledBackground => comboBoxDisabledBackground ??= GetBrush(ct.ComboBoxDisabledBackground); internal Brush ComboBoxDisabledBorder => comboBoxDisabledBorder ??= GetBrush(ct.ComboBoxStaticBorder); internal Brush ComboBoxDisabledGlyph => comboBoxDisabledGlyph ??= GetBrush(ct.DisabledForeground); internal Brush TextBoxStaticBackground => textBoxStaticBackground ??= GetBrush(ct.ComboBoxBackground); internal Brush SeparatorDark => separatorDark ??= GetBrush(ct.SeparatorDark); internal Brush SeparatorLight => separatorLight ??= GetBrush(ct.SeparatorLight); internal Brush MenuStripStaticBackground => menuStripStaticBackground ??= GetBrush(ct.MenuStripGradientBegin, ct.MenuStripGradientEnd, 0); internal Brush MenuStaticBackground => menuStaticBackground ??= GetBrush(ct.ToolStripDropDownBackground); internal Brush MenuStaticBorder => menuStaticBorder ??= GetBrush(ct.MenuBorder); internal Brush MenuMarginBackground => menuMarginBackground ??= GetBrush(ct.ImageMarginGradientBegin, ct.ImageMarginGradientMiddle, ct.ImageMarginGradientEnd, 0); internal Brush MenuQATBackground => menuQATBackground ??= GetBrush(ct.MenuQATGradientBegin, ct.MenuQATGradientMiddle, ct.MenuQATGradientEnd, 90); internal Brush MenuItemCheckBackground => menuItemCheckBackground ??= GetBrush(ct.MenuItemSelectedGradientBegin, ct.MenuItemSelectedGradientEnd); internal Brush MenuItemCheckBorder => menuItemCheckBorder ??= GetBrush(ct.MenuItemBorder); internal Brush MenuItemHighlightBackground => menuItemHighlightBackground ??= GetBrush(ct.MenuItemSelectedGradientBegin, ct.MenuItemSelectedGradientEnd, 90, ct.MenuItemGradientGlass); internal Brush MenuItemHighlightBorder => menuItemHighlightBorder ??= GetBrush(ct.MenuItemBorder); internal Brush TopLevelMenuItemForeground => topLevelMenuItemForeground ??= GetBrush(ct.TopLevelMenuItemForeground); internal Brush TopLevelMenuItemDisabledForeground => topLevelMenuItemDisabledForeground ??= GetBrush(ct.TopLevelMenuItemDisabledForeground); } }