ToolStripProfessionalRenderer.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using System.Windows.Media;
  2. namespace System.Windows.Forms
  3. {
  4. public class ToolStripProfessionalRenderer : ToolStripRenderer
  5. {
  6. public ProfessionalColorTable ColorTable { get; }
  7. public ToolStripProfessionalRenderer(ProfessionalColorTable table)
  8. {
  9. ColorTable = table;
  10. }
  11. internal Brush GetBrush(Drawing.Color start, Drawing.Color middle, Drawing.Color end, int angle = 90)
  12. {
  13. if (start == end && start == middle)
  14. return Helper.GetBrush(start);
  15. var gradientStops = new GradientStopCollection();
  16. gradientStops.Add(new GradientStop(Helper.GetColor(start), 0));
  17. gradientStops.Add(new GradientStop(Helper.GetColor(middle), 0.5));
  18. gradientStops.Add(new GradientStop(Helper.GetColor(end), 1));
  19. return new LinearGradientBrush(gradientStops, angle);
  20. }
  21. internal Brush GetBrush(Drawing.Color color) => Helper.GetBrush(color);
  22. internal Brush GetBrush(Drawing.Color start, Drawing.Color end, int angle = 90, bool glassEffect = false)
  23. {
  24. if (start == end)
  25. return Helper.GetBrush(start);
  26. if (glassEffect)
  27. {
  28. var gradientStops = new GradientStopCollection();
  29. gradientStops.Add(new GradientStop(Helper.GetColor(start), 0));
  30. gradientStops.Add(new GradientStop(Helper.GetColor(start), 0.3));
  31. gradientStops.Add(new GradientStop(Helper.GetColor(end), 0.5));
  32. gradientStops.Add(new GradientStop(Helper.GetColor(end), 1));
  33. return new LinearGradientBrush(gradientStops, angle);
  34. }
  35. return new LinearGradientBrush(Helper.GetColor(start), Helper.GetColor(end), angle);
  36. }
  37. private ProfessionalColorTable ct => ColorTable;
  38. private Brush foreground;
  39. private Brush disabledForeground;
  40. private Brush toolBarBorder;
  41. private Brush toolBarHorizontalBackground;
  42. private Brush toolBarVerticalBackground;
  43. private Brush toolBarGripDark;
  44. private Brush toolBarGripLight;
  45. private Brush statusBarBackground;
  46. private Brush statusBarForeground;
  47. private Brush buttonStaticBackground;
  48. private Brush buttonStaticBorder;
  49. private Brush buttonMouseOverBackground;
  50. private Brush buttonMouseOverBorder;
  51. private Brush buttonCheckedBackground;
  52. private Brush buttonCheckedBorder;
  53. private Brush buttonArrowBackground;
  54. private Brush comboBoxStaticBackground;
  55. private Brush comboBoxStaticBorder;
  56. private Brush comboBoxStaticGlyph;
  57. private Brush comboBoxMouseOverBackground;
  58. private Brush comboBoxMouseOverBorder;
  59. private Brush comboBoxMouseOverGlyph;
  60. private Brush comboBoxDisabledBackground;
  61. private Brush comboBoxDisabledBorder;
  62. private Brush comboBoxDisabledGlyph;
  63. private Brush textBoxStaticBackground;
  64. private Brush separatorDark;
  65. private Brush separatorLight;
  66. private Brush menuStripStaticBackground;
  67. private Brush menuStaticBackground;
  68. private Brush menuStaticBorder;
  69. private Brush menuMarginBackground;
  70. private Brush menuQATBackground;
  71. private Brush menuItemCheckBackground;
  72. private Brush menuItemCheckBorder;
  73. private Brush menuItemHighlightBackground;
  74. private Brush menuItemHighlightBorder;
  75. private Brush topLevelMenuItemForeground;
  76. private Brush topLevelMenuItemDisabledForeground;
  77. internal Brush Foreground => foreground ??= GetBrush(ct.Foreground);
  78. internal Brush DisabledForeground => disabledForeground ??= GetBrush(ct.DisabledForeground);
  79. internal Brush ToolBarBorder => toolBarBorder ??= GetBrush(ct.ToolStripBorder);
  80. internal Brush ToolBarHorizontalBackground => toolBarHorizontalBackground ??= GetBrush(ct.ToolStripGradientBegin, ct.ToolStripGradientMiddle, ct.ToolStripGradientEnd);
  81. internal Brush ToolBarVerticalBackground => toolBarVerticalBackground ??= GetBrush(ct.ToolStripGradientBegin, ct.ToolStripGradientMiddle, ct.ToolStripGradientEnd, 0);
  82. internal Brush ToolBarGripDark => toolBarGripDark ??= GetBrush(ct.GripDark);
  83. internal Brush ToolBarGripLight => toolBarGripLight ??= GetBrush(ct.GripLight);
  84. internal Brush StatusBarBackground => statusBarBackground ??= GetBrush(ct.StatusStripGradientBegin, ct.StatusStripGradientEnd, ct.StatusStripGradientAngle, ct.StatusStripGradientGlass);
  85. internal Brush StatusBarForeground => statusBarForeground ??= GetBrush(ct.StatusStripForeground);
  86. internal Brush ButtonStaticBackground => buttonStaticBackground ??= GetBrush(Drawing.Color.Transparent);
  87. internal Brush ButtonStaticBorder => buttonStaticBorder ??= GetBrush(Drawing.Color.Transparent);
  88. internal Brush ButtonMouseOverBackground => buttonMouseOverBackground ??= GetBrush(ct.ButtonSelectedGradientBegin, ct.ButtonSelectedGradientMiddle, ct.ButtonSelectedGradientEnd);
  89. internal Brush ButtonMouseOverBorder => buttonMouseOverBorder ??= GetBrush(ct.ButtonSelectedHighlightBorder);
  90. internal Brush ButtonCheckedBackground => buttonCheckedBackground ??= GetBrush(ct.ButtonCheckedGradientBegin, ct.ButtonCheckedGradientMiddle, ct.ButtonCheckedGradientEnd);
  91. internal Brush ButtonCheckedBorder => buttonCheckedBorder ??= GetBrush(ct.ButtonSelectedHighlightBorder);
  92. internal Brush ButtonArrowBackground => buttonArrowBackground ??= GetBrush(ct.Foreground);
  93. internal Brush ComboBoxStaticBackground => comboBoxStaticBackground ??= GetBrush(ct.ComboBoxBackground);
  94. internal Brush ComboBoxStaticBorder => comboBoxStaticBorder ??= GetBrush(ct.ComboBoxStaticBorder);
  95. internal Brush ComboBoxStaticGlyph => comboBoxStaticGlyph ??= GetBrush(ct.Foreground);
  96. internal Brush ComboBoxMouseOverBackground => comboBoxMouseOverBackground ??= GetBrush(ct.ComboBoxButtonSelectedGradientBegin, ct.ComboBoxButtonSelectedGradientEnd);
  97. internal Brush ComboBoxMouseOverBorder => comboBoxMouseOverBorder ??= GetBrush(ct.ComboBoxBorder);
  98. internal Brush ComboBoxMouseOverGlyph => comboBoxMouseOverGlyph ??= GetBrush(ct.Foreground);
  99. internal Brush ComboBoxDisabledBackground => comboBoxDisabledBackground ??= GetBrush(ct.ComboBoxDisabledBackground);
  100. internal Brush ComboBoxDisabledBorder => comboBoxDisabledBorder ??= GetBrush(ct.ComboBoxStaticBorder);
  101. internal Brush ComboBoxDisabledGlyph => comboBoxDisabledGlyph ??= GetBrush(ct.DisabledForeground);
  102. internal Brush TextBoxStaticBackground => textBoxStaticBackground ??= GetBrush(ct.ComboBoxBackground);
  103. internal Brush SeparatorDark => separatorDark ??= GetBrush(ct.SeparatorDark);
  104. internal Brush SeparatorLight => separatorLight ??= GetBrush(ct.SeparatorLight);
  105. internal Brush MenuStripStaticBackground => menuStripStaticBackground ??= GetBrush(ct.MenuStripGradientBegin, ct.MenuStripGradientEnd, 0);
  106. internal Brush MenuStaticBackground => menuStaticBackground ??= GetBrush(ct.ToolStripDropDownBackground);
  107. internal Brush MenuStaticBorder => menuStaticBorder ??= GetBrush(ct.MenuBorder);
  108. internal Brush MenuMarginBackground => menuMarginBackground ??= GetBrush(ct.ImageMarginGradientBegin, ct.ImageMarginGradientMiddle, ct.ImageMarginGradientEnd, 0);
  109. internal Brush MenuQATBackground => menuQATBackground ??= GetBrush(ct.MenuQATGradientBegin, ct.MenuQATGradientMiddle, ct.MenuQATGradientEnd, 90);
  110. internal Brush MenuItemCheckBackground => menuItemCheckBackground ??= GetBrush(ct.MenuItemSelectedGradientBegin, ct.MenuItemSelectedGradientEnd);
  111. internal Brush MenuItemCheckBorder => menuItemCheckBorder ??= GetBrush(ct.MenuItemBorder);
  112. internal Brush MenuItemHighlightBackground => menuItemHighlightBackground ??= GetBrush(ct.MenuItemSelectedGradientBegin, ct.MenuItemSelectedGradientEnd, 90, ct.MenuItemGradientGlass);
  113. internal Brush MenuItemHighlightBorder => menuItemHighlightBorder ??= GetBrush(ct.MenuItemBorder);
  114. internal Brush TopLevelMenuItemForeground => topLevelMenuItemForeground ??= GetBrush(ct.TopLevelMenuItemForeground);
  115. internal Brush TopLevelMenuItemDisabledForeground => topLevelMenuItemDisabledForeground ??= GetBrush(ct.TopLevelMenuItemDisabledForeground);
  116. }
  117. }