File: System\Windows\Forms\Controls\ToolStrips\ProfessionalColors.cs
Web Access
Project: src\src\System.Windows.Forms\src\System.Windows.Forms.csproj (System.Windows.Forms)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Windows.Forms.VisualStyles;
using Microsoft.Win32;
 
namespace System.Windows.Forms;
 
public static class ProfessionalColors
{
    [ThreadStatic]
    private static ProfessionalColorTable? t_professionalColorTable;
 
    [ThreadStatic]
    private static string? t_colorScheme;
 
    [ThreadStatic]
    private static object? t_colorFreshnessKey;
 
    internal static ProfessionalColorTable ColorTable => t_professionalColorTable ??= new ProfessionalColorTable();
 
    static ProfessionalColors()
    {
        SystemEvents.UserPreferenceChanged += OnUserPreferenceChanged;
        SetScheme();
    }
 
    internal static string? ColorScheme => t_colorScheme;
 
    // internal object used between professional color tables
    // to identify when a userpreferencechanged has occurred
    internal static object? ColorFreshnessKey => t_colorFreshnessKey;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonSelectedHighlightDescr))]
    public static Color ButtonSelectedHighlight => ColorTable.ButtonSelectedHighlight;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonSelectedHighlightBorderDescr))]
    public static Color ButtonSelectedHighlightBorder => ColorTable.ButtonSelectedHighlightBorder;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonPressedHighlightDescr))]
    public static Color ButtonPressedHighlight => ColorTable.ButtonPressedHighlight;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonPressedHighlightBorderDescr))]
    public static Color ButtonPressedHighlightBorder => ColorTable.ButtonPressedHighlightBorder;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonCheckedHighlightDescr))]
    public static Color ButtonCheckedHighlight => ColorTable.ButtonCheckedHighlight;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonCheckedHighlightBorderDescr))]
    public static Color ButtonCheckedHighlightBorder => ColorTable.ButtonCheckedHighlightBorder;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonPressedBorderDescr))]
    public static Color ButtonPressedBorder => ColorTable.ButtonPressedBorder;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonSelectedBorderDescr))]
    public static Color ButtonSelectedBorder => ColorTable.ButtonSelectedBorder;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonCheckedGradientBeginDescr))]
    public static Color ButtonCheckedGradientBegin => ColorTable.ButtonCheckedGradientBegin;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonCheckedGradientMiddleDescr))]
    public static Color ButtonCheckedGradientMiddle => ColorTable.ButtonCheckedGradientMiddle;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonCheckedGradientEndDescr))]
    public static Color ButtonCheckedGradientEnd => ColorTable.ButtonCheckedGradientEnd;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonSelectedGradientBeginDescr))]
    public static Color ButtonSelectedGradientBegin => ColorTable.ButtonSelectedGradientBegin;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonSelectedGradientMiddleDescr))]
    public static Color ButtonSelectedGradientMiddle => ColorTable.ButtonSelectedGradientMiddle;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonSelectedGradientEndDescr))]
    public static Color ButtonSelectedGradientEnd => ColorTable.ButtonSelectedGradientEnd;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonPressedGradientBeginDescr))]
    public static Color ButtonPressedGradientBegin => ColorTable.ButtonPressedGradientBegin;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonPressedGradientMiddleDescr))]
    public static Color ButtonPressedGradientMiddle => ColorTable.ButtonPressedGradientMiddle;
 
    [SRDescription(nameof(SR.ProfessionalColorsButtonPressedGradientEndDescr))]
    public static Color ButtonPressedGradientEnd => ColorTable.ButtonPressedGradientEnd;
 
    [SRDescription(nameof(SR.ProfessionalColorsCheckBackgroundDescr))]
    public static Color CheckBackground => ColorTable.CheckBackground;
 
    [SRDescription(nameof(SR.ProfessionalColorsCheckSelectedBackgroundDescr))]
    public static Color CheckSelectedBackground => ColorTable.CheckSelectedBackground;
 
    [SRDescription(nameof(SR.ProfessionalColorsCheckPressedBackgroundDescr))]
    public static Color CheckPressedBackground => ColorTable.CheckPressedBackground;
 
    [SRDescription(nameof(SR.ProfessionalColorsGripDarkDescr))]
    public static Color GripDark => ColorTable.GripDark;
 
    [SRDescription(nameof(SR.ProfessionalColorsGripLightDescr))]
    public static Color GripLight => ColorTable.GripLight;
 
    [SRDescription(nameof(SR.ProfessionalColorsImageMarginGradientBeginDescr))]
    public static Color ImageMarginGradientBegin => ColorTable.ImageMarginGradientBegin;
 
    [SRDescription(nameof(SR.ProfessionalColorsImageMarginGradientMiddleDescr))]
    public static Color ImageMarginGradientMiddle => ColorTable.ImageMarginGradientMiddle;
 
    [SRDescription(nameof(SR.ProfessionalColorsImageMarginGradientEndDescr))]
    public static Color ImageMarginGradientEnd => ColorTable.ImageMarginGradientEnd;
 
    [SRDescription(nameof(SR.ProfessionalColorsImageMarginRevealedGradientBeginDescr))]
    public static Color ImageMarginRevealedGradientBegin => ColorTable.ImageMarginRevealedGradientBegin;
 
    [SRDescription(nameof(SR.ProfessionalColorsImageMarginRevealedGradientMiddleDescr))]
    public static Color ImageMarginRevealedGradientMiddle => ColorTable.ImageMarginRevealedGradientMiddle;
 
    [SRDescription(nameof(SR.ProfessionalColorsImageMarginRevealedGradientEndDescr))]
    public static Color ImageMarginRevealedGradientEnd => ColorTable.ImageMarginRevealedGradientEnd;
 
    [SRDescription(nameof(SR.ProfessionalColorsMenuStripGradientBeginDescr))]
    public static Color MenuStripGradientBegin => ColorTable.MenuStripGradientBegin;
 
    [SRDescription(nameof(SR.ProfessionalColorsMenuStripGradientEndDescr))]
    public static Color MenuStripGradientEnd => ColorTable.MenuStripGradientEnd;
 
    [SRDescription(nameof(SR.ProfessionalColorsMenuBorderDescr))]
    public static Color MenuBorder => ColorTable.MenuBorder;
 
    [SRDescription(nameof(SR.ProfessionalColorsMenuItemSelectedDescr))]
    public static Color MenuItemSelected => ColorTable.MenuItemSelected;
 
    [SRDescription(nameof(SR.ProfessionalColorsMenuItemBorderDescr))]
    public static Color MenuItemBorder => ColorTable.MenuItemBorder;
 
    [SRDescription(nameof(SR.ProfessionalColorsMenuItemSelectedGradientBeginDescr))]
    public static Color MenuItemSelectedGradientBegin => ColorTable.MenuItemSelectedGradientBegin;
 
    [SRDescription(nameof(SR.ProfessionalColorsMenuItemSelectedGradientEndDescr))]
    public static Color MenuItemSelectedGradientEnd => ColorTable.MenuItemSelectedGradientEnd;
 
    [SRDescription(nameof(SR.ProfessionalColorsMenuItemPressedGradientBeginDescr))]
    public static Color MenuItemPressedGradientBegin => ColorTable.MenuItemPressedGradientBegin;
 
    [SRDescription(nameof(SR.ProfessionalColorsMenuItemPressedGradientMiddleDescr))]
    public static Color MenuItemPressedGradientMiddle => ColorTable.MenuItemPressedGradientMiddle;
 
    [SRDescription(nameof(SR.ProfessionalColorsMenuItemPressedGradientEndDescr))]
    public static Color MenuItemPressedGradientEnd => ColorTable.MenuItemPressedGradientEnd;
 
    [SRDescription(nameof(SR.ProfessionalColorsRaftingContainerGradientBeginDescr))]
    public static Color RaftingContainerGradientBegin => ColorTable.RaftingContainerGradientBegin;
 
    [SRDescription(nameof(SR.ProfessionalColorsRaftingContainerGradientEndDescr))]
    public static Color RaftingContainerGradientEnd => ColorTable.RaftingContainerGradientEnd;
 
    [SRDescription(nameof(SR.ProfessionalColorsSeparatorDarkDescr))]
    public static Color SeparatorDark => ColorTable.SeparatorDark;
 
    [SRDescription(nameof(SR.ProfessionalColorsSeparatorLightDescr))]
    public static Color SeparatorLight => ColorTable.SeparatorLight;
 
    [SRDescription(nameof(SR.ProfessionalColorsStatusStripBorderDescr))]
    public static Color StatusStripBorder => ColorTable.StatusStripBorder;
 
    [SRDescription(nameof(SR.ProfessionalColorsStatusStripGradientBeginDescr))]
    public static Color StatusStripGradientBegin => ColorTable.StatusStripGradientBegin;
 
    [SRDescription(nameof(SR.ProfessionalColorsStatusStripGradientEndDescr))]
    public static Color StatusStripGradientEnd => ColorTable.StatusStripGradientEnd;
 
    [SRDescription(nameof(SR.ProfessionalColorsToolStripBorderDescr))]
    public static Color ToolStripBorder => ColorTable.ToolStripBorder;
 
    [SRDescription(nameof(SR.ProfessionalColorsToolStripDropDownBackgroundDescr))]
    public static Color ToolStripDropDownBackground => ColorTable.ToolStripDropDownBackground;
 
    [SRDescription(nameof(SR.ProfessionalColorsToolStripGradientBeginDescr))]
    public static Color ToolStripGradientBegin => ColorTable.ToolStripGradientBegin;
 
    [SRDescription(nameof(SR.ProfessionalColorsToolStripGradientMiddleDescr))]
    public static Color ToolStripGradientMiddle => ColorTable.ToolStripGradientMiddle;
 
    [SRDescription(nameof(SR.ProfessionalColorsToolStripGradientEndDescr))]
    public static Color ToolStripGradientEnd => ColorTable.ToolStripGradientEnd;
 
    [SRDescription(nameof(SR.ProfessionalColorsToolStripContentPanelGradientBeginDescr))]
    public static Color ToolStripContentPanelGradientBegin => ColorTable.ToolStripContentPanelGradientBegin;
 
    [SRDescription(nameof(SR.ProfessionalColorsToolStripContentPanelGradientEndDescr))]
    public static Color ToolStripContentPanelGradientEnd => ColorTable.ToolStripContentPanelGradientEnd;
 
    [SRDescription(nameof(SR.ProfessionalColorsToolStripPanelGradientBeginDescr))]
    public static Color ToolStripPanelGradientBegin => ColorTable.ToolStripPanelGradientBegin;
 
    [SRDescription(nameof(SR.ProfessionalColorsToolStripPanelGradientEndDescr))]
    public static Color ToolStripPanelGradientEnd => ColorTable.ToolStripPanelGradientEnd;
 
    [SRDescription(nameof(SR.ProfessionalColorsOverflowButtonGradientBeginDescr))]
    public static Color OverflowButtonGradientBegin => ColorTable.OverflowButtonGradientBegin;
 
    [SRDescription(nameof(SR.ProfessionalColorsOverflowButtonGradientMiddleDescr))]
    public static Color OverflowButtonGradientMiddle => ColorTable.OverflowButtonGradientMiddle;
 
    [SRDescription(nameof(SR.ProfessionalColorsOverflowButtonGradientEndDescr))]
    public static Color OverflowButtonGradientEnd => ColorTable.OverflowButtonGradientEnd;
 
    private static void OnUserPreferenceChanged(object? sender, UserPreferenceChangedEventArgs e)
    {
        SetScheme();
        if (e.Category == UserPreferenceCategory.Color)
        {
            t_colorFreshnessKey = new object();
        }
    }
 
    private static void SetScheme()
    {
        if (VisualStyleRenderer.IsSupported)
        {
            t_colorScheme = VisualStyleInformation.ColorScheme;
        }
        else
        {
            t_colorScheme = null;
        }
    }
}