Tan color table

The following sample provides a Tan alternative to the stock ToolStrip ColorTable.

You can use it via:
ToolStrip.Renderer = new ToolStripProfessionalRenderer(new TanColorTable());
Or
ToolStripManager.Renderer = new ToolStripProfessionalRenderer(new TanColorTable());

---

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Drawing;
using Microsoft.Win32;
using System.Runtime.InteropServices;
using System.Windows.Forms.VisualStyles;
using System.IO;

namespace Microsoft.Samples {
internal class TanColorTable : ProfessionalColorTable {
// Methods
public TanColorTable() {
}

internal Color FromKnownColor(TanColorTable.KnownColors color) {
return (Color)this.ColorTable[color];
}

internal static void InitTanLunaColors(ref Dictionary<TanColorTable.KnownColors, Color> rgbTable) {
rgbTable[TanColorTable.KnownColors.GripDark] = Color.FromArgb(0xc1, 190, 0xb3);
rgbTable[TanColorTable.KnownColors.SeparatorDark] = Color.FromArgb(0xc5, 0xc2, 0xb8);
rgbTable[TanColorTable.KnownColors.MenuItemSelected] = Color.FromArgb(0xc1, 210, 0xee);
rgbTable[TanColorTable.KnownColors.ButtonPressedBorder] = Color.FromArgb(0x31, 0x6a, 0xc5);
rgbTable[TanColorTable.KnownColors.CheckBackground] = Color.FromArgb(0xe1, 230, 0xe8);
rgbTable[TanColorTable.KnownColors.MenuItemBorder] = Color.FromArgb(0x31, 0x6a, 0xc5);
rgbTable[TanColorTable.KnownColors.CheckBackgroundMouseOver] = Color.FromArgb(0x31, 0x6a, 0xc5);
rgbTable[TanColorTable.KnownColors.MenuItemBorderMouseOver] = Color.FromArgb(0x4b, 0x4b, 0x6f);
rgbTable[TanColorTable.KnownColors.ToolStripDropDownBackground] = Color.FromArgb(0xfc, 0xfc, 0xf9);
rgbTable[TanColorTable.KnownColors.MenuBorder] = Color.FromArgb(0x8a, 0x86, 0x7a);
rgbTable[TanColorTable.KnownColors.SeparatorLight] = Color.FromArgb(0xff, 0xff, 0xff);
rgbTable[TanColorTable.KnownColors.ToolStripBorder] = Color.FromArgb(0xa3, 0xa3, 0x7c);
rgbTable[TanColorTable.KnownColors.MenuStripGradientBegin] = Color.FromArgb(0xe5, 0xe5, 0xd7);
rgbTable[TanColorTable.KnownColors.MenuStripGradientEnd] = Color.FromArgb(0xf4, 0xf2, 0xe8);
rgbTable[TanColorTable.KnownColors.ImageMarginGradientBegin] = Color.FromArgb(0xfe, 0xfe, 0xfb);
rgbTable[TanColorTable.KnownColors.ImageMarginGradientMiddle] = Color.FromArgb(0xec, 0xe7, 0xe0);
rgbTable[TanColorTable.KnownColors.ImageMarginGradientEnd] = Color.FromArgb(0xbd, 0xbd, 0xa3);
rgbTable[TanColorTable.KnownColors.OverflowButtonGradientBegin] = Color.FromArgb(0xf3, 0xf2, 240);
rgbTable[TanColorTable.KnownColors.OverflowButtonGradientMiddle] = Color.FromArgb(0xe2, 0xe1, 0xdb);
rgbTable[TanColorTable.KnownColors.OverflowButtonGradientEnd] = Color.FromArgb(0x92, 0x92, 0x76);
rgbTable[TanColorTable.KnownColors.MenuItemPressedGradientBegin] = Color.FromArgb(0xfc, 0xfc, 0xf9);
rgbTable[TanColorTable.KnownColors.MenuItemPressedGradientEnd] = Color.FromArgb(0xf6, 0xf4, 0xec);
rgbTable[TanColorTable.KnownColors.ImageMarginRevealedGradientBegin] = Color.FromArgb(0xf7, 0xf6, 0xef);
rgbTable[TanColorTable.KnownColors.ImageMarginRevealedGradientMiddle] = Color.FromArgb(0xf2, 240, 0xe4);
rgbTable[TanColorTable.KnownColors.ImageMarginRevealedGradientEnd] = Color.FromArgb(230, 0xe3, 210);
rgbTable[TanColorTable.KnownColors.ButtonCheckedGradientBegin] = Color.FromArgb(0xe1, 230, 0xe8);
rgbTable[TanColorTable.KnownColors.ButtonCheckedGradientMiddle] = Color.FromArgb(0xe1, 230, 0xe8);
rgbTable[TanColorTable.KnownColors.ButtonCheckedGradientEnd] = Color.FromArgb(0xe1, 230, 0xe8);
rgbTable[TanColorTable.KnownColors.ButtonSelectedGradientBegin] = Color.FromArgb(0xc1, 210, 0xee);
rgbTable[TanColorTable.KnownColors.ButtonSelectedGradientMiddle] = Color.FromArgb(0xc1, 210, 0xee);
rgbTable[TanColorTable.KnownColors.ButtonSelectedGradientEnd] = Color.FromArgb(0xc1, 210, 0xee);
rgbTable[TanColorTable.KnownColors.ButtonPressedGradientBegin] = Color.FromArgb(0x98, 0xb5, 0xe2);
rgbTable[TanColorTable.KnownColors.ButtonPressedGradientMiddle] = Color.FromArgb(0x98, 0xb5, 0xe2);
rgbTable[TanColorTable.KnownColors.ButtonPressedGradientEnd] = Color.FromArgb(0x98, 0xb5, 0xe2);
rgbTable[TanColorTable.KnownColors.GripLight] = Color.FromArgb(0xff, 0xff, 0xff);
}

public override Color ButtonCheckedGradientBegin {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ButtonCheckedGradientBegin);
}
return base.ButtonCheckedGradientBegin;
}
}

public override Color ButtonCheckedGradientEnd {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ButtonCheckedGradientEnd);
}
return base.ButtonCheckedGradientEnd;
}
}

public override Color ButtonCheckedGradientMiddle {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ButtonCheckedGradientMiddle);
}
return base.ButtonCheckedGradientMiddle;
}
}

public override Color ButtonPressedBorder {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ButtonPressedBorder);
}
return base.ButtonPressedBorder;
}
}

public override Color ButtonPressedGradientBegin {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ButtonPressedGradientBegin);
}
return base.ButtonPressedGradientBegin;
}
}

public override Color ButtonPressedGradientEnd {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ButtonPressedGradientEnd);
}
return base.ButtonPressedGradientEnd;
}
}

public override Color ButtonPressedGradientMiddle {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ButtonPressedGradientMiddle);
}
return base.ButtonPressedGradientMiddle;
}
}

public override Color ButtonSelectedBorder {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ButtonPressedBorder);
}
return base.ButtonSelectedBorder;
}
}

public override Color ButtonSelectedGradientBegin {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ButtonSelectedGradientBegin);
}
return base.ButtonSelectedGradientBegin;
}
}
public override Color ButtonSelectedGradientEnd {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ButtonSelectedGradientEnd);
}
return base.ButtonSelectedGradientEnd;
}
}
public override Color ButtonSelectedGradientMiddle {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ButtonSelectedGradientMiddle);
}
return base.ButtonSelectedGradientMiddle;
}
}

public override Color CheckBackground {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.CheckBackground);
}
return base.CheckBackground;
}
}

public override Color CheckPressedBackground {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.CheckBackgroundMouseOver);
}
return base.CheckPressedBackground;
}
}

public override Color CheckSelectedBackground {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.CheckBackgroundMouseOver);
}
return base.CheckSelectedBackground;
}
}

internal static string ColorScheme {
get {
return TanColorTable.DisplayInformation.ColorScheme;
}
}

private Dictionary<KnownColors,Color> ColorTable {
get {
if (this.tanRGB == null) {
this.tanRGB = new Dictionary<KnownColors,Color>((int)KnownColors.LastKnownColor);
TanColorTable.InitTanLunaColors(ref this.tanRGB);
}
return this.tanRGB;
}
}

public override Color GripDark {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.GripDark);
}
return base.GripDark;
}
}

public override Color GripLight {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.GripLight);
}
return base.GripLight;
}
}
public override Color ImageMarginGradientBegin {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ImageMarginGradientBegin);
}
return base.ImageMarginGradientBegin;
}
}

public override Color ImageMarginGradientEnd {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ImageMarginGradientEnd);
}
return base.ImageMarginGradientEnd;
}
}

public override Color ImageMarginGradientMiddle {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ImageMarginGradientMiddle);
}
return base.ImageMarginGradientMiddle;
}
}

public override Color ImageMarginRevealedGradientBegin {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ImageMarginRevealedGradientBegin);
}
return base.ImageMarginRevealedGradientBegin;
}
}

public override Color ImageMarginRevealedGradientEnd {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ImageMarginRevealedGradientEnd);
}
return base.ImageMarginRevealedGradientEnd;
}
}

public override Color ImageMarginRevealedGradientMiddle {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ImageMarginRevealedGradientMiddle);
}
return base.ImageMarginRevealedGradientMiddle;
}
}

public override Color MenuBorder {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.MenuBorder);
}
return base.MenuItemBorder;
}
}

public override Color MenuItemBorder {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.MenuItemBorder);
}
return base.MenuItemBorder;
}
}

public override Color MenuItemPressedGradientBegin {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.MenuItemPressedGradientBegin);
}
return base.MenuItemPressedGradientBegin;
}
}

public override Color MenuItemPressedGradientEnd {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.MenuItemPressedGradientEnd);
}
return base.MenuItemPressedGradientEnd;
}
}

public override Color MenuItemPressedGradientMiddle {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ImageMarginRevealedGradientMiddle);
}
return base.MenuItemPressedGradientMiddle;
}
}

public override Color MenuItemSelected {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.MenuItemSelected);
}
return base.MenuItemSelected;
}
}

public override Color MenuItemSelectedGradientBegin {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ButtonSelectedGradientBegin);
}
return base.MenuItemSelectedGradientBegin;
}
}

public override Color MenuItemSelectedGradientEnd {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ButtonSelectedGradientEnd);
}
return base.MenuItemSelectedGradientEnd;
}
}

public override Color MenuStripGradientBegin {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.MenuStripGradientBegin);
}
return base.MenuStripGradientBegin;
}
}

public override Color MenuStripGradientEnd {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.MenuStripGradientEnd);
}
return base.MenuStripGradientEnd;
}
}

public override Color OverflowButtonGradientBegin {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.OverflowButtonGradientBegin);
}
return base.OverflowButtonGradientBegin;
}
}

public override Color OverflowButtonGradientEnd {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.OverflowButtonGradientEnd);
}
return base.OverflowButtonGradientEnd;
}
}

public override Color OverflowButtonGradientMiddle {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.OverflowButtonGradientMiddle);
}
return base.OverflowButtonGradientMiddle;
}
}

public override Color RaftingContainerGradientBegin {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.MenuStripGradientBegin);
}
return base.RaftingContainerGradientBegin;
}
}

public override Color RaftingContainerGradientEnd {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.MenuStripGradientEnd);
}
return base.RaftingContainerGradientEnd;
}
}

public override Color SeparatorDark {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.SeparatorDark);
}
return base.SeparatorDark;
}
}

public override Color SeparatorLight {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.SeparatorLight);
}
return base.SeparatorLight;
}
}

public override Color ToolStripBorder {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ToolStripBorder);
}
return base.ToolStripBorder;
}
}

public override Color ToolStripDropDownBackground {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ToolStripDropDownBackground);
}
return base.ToolStripDropDownBackground;
}
}

public override Color ToolStripGradientBegin {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ImageMarginGradientBegin);
}
return base.ToolStripGradientBegin;
}
}

public override Color ToolStripGradientEnd {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ImageMarginGradientEnd);
}
return base.ToolStripGradientEnd;
}
}

public override Color ToolStripGradientMiddle {
get {
if (!this.UseBaseColorTable) {
return this.FromKnownColor(TanColorTable.KnownColors.ImageMarginGradientMiddle);
}
return base.ToolStripGradientMiddle;
}
}

private bool UseBaseColorTable {
get {
bool flag1 = !TanColorTable.DisplayInformation.IsLunaTheme || ((TanColorTable.ColorScheme != "HomeStead") && (TanColorTable.ColorScheme != "NormalColor"));
if (flag1 && (this.tanRGB != null)) {
this.tanRGB.Clear();
this.tanRGB = null;
}
return flag1;
}
}

// Fields
private const string blueColorScheme = "NormalColor";
private const string oliveColorScheme = "HomeStead";
private const string silverColorScheme = "Metallic";
private Dictionary<TanColorTable.KnownColors, Color> tanRGB;

// Nested Types
private static class DisplayInformation {
// Methods
static DisplayInformation() {
SystemEvents.UserPreferenceChanged += new UserPreferenceChangedEventHandler(TanColorTable.DisplayInformation.OnUserPreferenceChanged);
TanColorTable.DisplayInformation.SetScheme();
}

private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) {
TanColorTable.DisplayInformation.SetScheme();
}

private static void SetScheme() {
TanColorTable.DisplayInformation.isLunaTheme = false;
if (VisualStyleRenderer.IsSupported) {
DisplayInformation.colorScheme = VisualStyleInformation.ColorScheme;

if (!VisualStyleInformation.IsEnabledByUser) {
return;
}
StringBuilder builder1 = new StringBuilder(0x200);
GetCurrentThemeName(builder1, builder1.Capacity, null, 0, null, 0);
string text1 = builder1.ToString();
TanColorTable.DisplayInformation.isLunaTheme = string.Equals("luna.msstyles", Path.GetFileName(text1), StringComparison.InvariantCultureIgnoreCase);
}
else {
TanColorTable.DisplayInformation.colorScheme = null;
}
}

// Properties

public static string ColorScheme {
get {
return colorScheme;
}
}

internal static bool IsLunaTheme {
get {
return isLunaTheme;
}
}

// Fields
[ThreadStatic]
private static string colorScheme;
[ThreadStatic]
private static bool isLunaTheme;
private const string lunaFileName = "luna.msstyles";

[DllImport("uxtheme.dll", CharSet = CharSet.Auto)]
public static extern int GetCurrentThemeName(StringBuilder pszThemeFileName, int dwMaxNameChars, StringBuilder pszColorBuff, int dwMaxColorChars, StringBuilder pszSizeBuff, int cchMaxSizeChars);

}

internal enum KnownColors {
ButtonPressedBorder,
MenuItemBorder,
MenuItemBorderMouseOver,
MenuItemSelected,
CheckBackground,
CheckBackgroundMouseOver,
GripDark,
GripLight,
MenuStripGradientBegin,
MenuStripGradientEnd,
ImageMarginRevealedGradientBegin,
ImageMarginRevealedGradientEnd,
ImageMarginRevealedGradientMiddle,
MenuItemPressedGradientBegin,
MenuItemPressedGradientEnd,
ButtonPressedGradientBegin,
ButtonPressedGradientEnd,
ButtonPressedGradientMiddle,
ButtonSelectedGradientBegin,
ButtonSelectedGradientEnd,
ButtonSelectedGradientMiddle,
OverflowButtonGradientBegin,
OverflowButtonGradientEnd,
OverflowButtonGradientMiddle,
ButtonCheckedGradientBegin,
ButtonCheckedGradientEnd,
ButtonCheckedGradientMiddle,
ImageMarginGradientBegin,
ImageMarginGradientEnd,
ImageMarginGradientMiddle,
MenuBorder,
ToolStripDropDownBackground,
ToolStripBorder,
SeparatorDark,
SeparatorLight,
LastKnownColor = SeparatorLight,

}
}

}