using System.Drawing; using System.Windows.Forms; namespace FastReport.Utils { /// /// The style of FastReport user interface. /// public enum UIStyle { /// /// Specifies the Microsoft Visual Studio 2005 style. /// VisualStudio2005, /// /// Specifies the Microsoft Office 2003 style (blue). /// Office2003, } public class TabStripColors { public Color GradientBegin; public Color GradientEnd; public Color Border; public int BorderWidth = 1; public Color ActiveTabForeground = SystemColors.WindowText; public Color ActiveTabBackground = SystemColors.Window; public Color InactiveTabForeground; } public class ToolWindowColors { public class CaptionColors { public Color GradientBegin; public Color GradientEnd; public Color ForeColor = SystemColors.WindowText; public Color HighlightButton; } public CaptionColors Caption { get; } = new CaptionColors(); public TabStripColors TabStrip { get; } = new TabStripColors(); public Color ControlBackColor; } public class ZoomControlColors { public Color GradientBegin; public Color GradientEnd; public Color Foreground; } public class WorkspaceColors : ToolWindowColors { public Color ForeColor; public Color WorkspaceBackColor; public Color GrayColor; public Color SplitterBackColor; public ZoomControlColors ZoomControl { get; } = new ZoomControlColors(); } internal class FRColorTable : ProfessionalColorTable { public WorkspaceColors Workspace { get; } = new WorkspaceColors(); public ToolWindowColors ToolWindow { get; set; } public FRColorTable() { ToolWindow = Workspace; } } internal class FRVS2005ColorTable : FRColorTable { public override Color ToolStripBorder { get { return SeparatorDark; } } public FRVS2005ColorTable() { UseSystemColors = true; Workspace.ForeColor = Color.FromArgb(60, 60, 60); Workspace.ControlBackColor = SystemColors.Control; Workspace.WorkspaceBackColor = Color.FromArgb(220, 220, 220); Workspace.GrayColor = Color.FromArgb(232, 232, 232); Workspace.SplitterBackColor = SystemColors.Control; Workspace.TabStrip.GradientBegin = Workspace.TabStrip.GradientEnd = SystemColors.Control; Workspace.TabStrip.Border = ToolStripBorder; Workspace.TabStrip.ActiveTabForeground = SystemColors.WindowText; Workspace.TabStrip.InactiveTabForeground = SystemColors.ControlDarkDark; Workspace.ZoomControl.GradientBegin = StatusStripGradientBegin; Workspace.ZoomControl.GradientEnd = StatusStripGradientEnd; Workspace.ZoomControl.Foreground = SystemColors.WindowText; ToolWindow.Caption.GradientBegin = ToolStripGradientMiddle; ToolWindow.Caption.GradientEnd = ToolStripGradientEnd; ToolWindow.Caption.HighlightButton = ButtonSelectedHighlight; } } internal class FROffice2003ColorTable : FRColorTable { private static Color _toolStripDropDownBackground = Color.FromArgb(250, 250, 250); private static Color _buttonPressedGradientBegin = Color.FromArgb(248, 181, 106); private static Color _buttonPressedGradientEnd = Color.FromArgb(255, 208, 134); private static Color _buttonPressedGradientMiddle = Color.FromArgb(251, 140, 60); private static Color _buttonSelectedGradientBegin = Color.FromArgb(255, 255, 222); private static Color _buttonSelectedGradientEnd = Color.FromArgb(255, 203, 136); private static Color _buttonSelectedGradientMiddle = Color.FromArgb(255, 225, 172); private static Color _menuItemSelectedGradientBegin = Color.FromArgb(255, 213, 103); private static Color _menuItemSelectedGradientEnd = Color.FromArgb(255, 228, 145); private static Color _checkBackground = Color.FromArgb(255, 227, 149); private static Color _gripDark = Color.FromArgb(111, 157, 217); private static Color _gripLight = Color.FromArgb(255, 255, 255); private static Color _imageMarginGradientBegin = Color.FromArgb(233, 238, 238); private static Color _menuBorder = Color.FromArgb(134, 134, 134); private static Color _overflowButtonGradientBegin = Color.FromArgb(167, 204, 251); private static Color _overflowButtonGradientEnd = Color.FromArgb(101, 147, 207); private static Color _overflowButtonGradientMiddle = Color.FromArgb(167, 204, 251); private static Color _menuToolBack = Color.FromArgb(191, 219, 255); private static Color _separatorDark = Color.FromArgb(154, 198, 255); private static Color _separatorLight = Color.FromArgb(255, 255, 255); private static Color _statusStripGradientBegin = Color.FromArgb(215, 229, 247); private static Color _statusStripGradientEnd = Color.FromArgb(172, 201, 238); private static Color _toolStripBorder = Color.FromArgb(111, 157, 217); private static Color _toolStripContentPanelGradientBegin = Color.FromArgb(164, 195, 235); private static Color _toolStripGradientBegin = Color.FromArgb(227, 239, 255); private static Color _toolStripGradientEnd = Color.FromArgb(152, 186, 230); private static Color _toolStripGradientMiddle = Color.FromArgb(222, 236, 255); private static Color _buttonSelectedHighlightBorder = Color.FromArgb(121, 153, 194); public override Color ButtonCheckedGradientBegin => _buttonPressedGradientBegin; public override Color ButtonCheckedGradientEnd => _buttonPressedGradientEnd; public override Color ButtonCheckedGradientMiddle => _buttonPressedGradientMiddle; public override Color ButtonPressedGradientBegin => _buttonPressedGradientBegin; public override Color ButtonPressedGradientEnd => _buttonPressedGradientEnd; public override Color ButtonPressedGradientMiddle => _buttonPressedGradientMiddle; public override Color ButtonSelectedGradientBegin => _buttonSelectedGradientBegin; public override Color ButtonSelectedGradientEnd => _buttonSelectedGradientEnd; public override Color ButtonSelectedGradientMiddle => _buttonSelectedGradientMiddle; public override Color ButtonSelectedHighlightBorder => _buttonSelectedHighlightBorder; public override Color CheckBackground => _checkBackground; public override Color GripDark => _gripDark; public override Color GripLight => _gripLight; public override Color ImageMarginGradientBegin => _imageMarginGradientBegin; public override Color MenuBorder => _menuBorder; public override Color MenuItemPressedGradientBegin => _toolStripGradientBegin; public override Color MenuItemPressedGradientEnd => _toolStripGradientEnd; public override Color MenuItemPressedGradientMiddle => _toolStripGradientMiddle; public override Color MenuItemSelectedGradientBegin => _menuItemSelectedGradientBegin; public override Color MenuItemSelectedGradientEnd => _menuItemSelectedGradientEnd; public override Color MenuStripGradientBegin => _menuToolBack; public override Color MenuStripGradientEnd => _menuToolBack; public override Color OverflowButtonGradientBegin => _overflowButtonGradientBegin; public override Color OverflowButtonGradientEnd => _overflowButtonGradientEnd; public override Color OverflowButtonGradientMiddle => _overflowButtonGradientMiddle; public override Color RaftingContainerGradientBegin => _menuToolBack; public override Color RaftingContainerGradientEnd => _menuToolBack; public override Color SeparatorDark => _separatorDark; public override Color SeparatorLight => _separatorLight; public override Color StatusStripGradientBegin => _statusStripGradientBegin; public override Color StatusStripGradientEnd => _statusStripGradientEnd; public override Color ToolStripBorder => _toolStripBorder; public override Color ToolStripContentPanelGradientBegin => _toolStripContentPanelGradientBegin; public override Color ToolStripContentPanelGradientEnd => _menuToolBack; public override Color ToolStripDropDownBackground => _toolStripDropDownBackground; public override Color ToolStripGradientBegin => _toolStripGradientBegin; public override Color ToolStripGradientEnd => _toolStripGradientEnd; public override Color ToolStripGradientMiddle => _toolStripGradientMiddle; public override Color ToolStripPanelGradientBegin => _menuToolBack; public override Color ToolStripPanelGradientEnd => _menuToolBack; public FROffice2003ColorTable() { Workspace.ForeColor = Color.FromArgb(60, 60, 60); Workspace.ControlBackColor = Color.FromArgb(182, 208, 248); Workspace.WorkspaceBackColor = Color.FromArgb(144, 153, 174); Workspace.GrayColor = Color.FromArgb(145, 180, 230); Workspace.SplitterBackColor = Workspace.ControlBackColor; Workspace.TabStrip.GradientBegin = ToolStripGradientBegin; Workspace.TabStrip.GradientEnd = ToolStripGradientEnd; Workspace.TabStrip.Border = ToolStripBorder; Workspace.TabStrip.ActiveTabForeground = SystemColors.WindowText; Workspace.TabStrip.InactiveTabForeground = SystemColors.ControlDarkDark; Workspace.ZoomControl.GradientBegin = StatusStripGradientBegin; Workspace.ZoomControl.GradientEnd = StatusStripGradientEnd; Workspace.ZoomControl.Foreground = Workspace.ForeColor; ToolWindow.Caption.GradientBegin = Color.FromArgb(154, 188, 234); ToolWindow.Caption.GradientEnd = Color.FromArgb(154, 188, 234); ToolWindow.Caption.HighlightButton = ButtonSelectedHighlight; } } /// /// Contains conversion methods between FastReport's UIStyle to various enums. /// public static class UIStyleUtils { private static ToolStripProfessionalRenderer FVS2005ToolStripRenderer; private static ToolStripProfessionalRenderer FOffice2003ToolStripRenderer; private static FRColorTable FVS2005ColorTable; private static FRColorTable FOffice2003ColorTable; internal const UIStyle DefaultStyle = UIStyle.Office2003; /// /// Gets UI style names. /// public static readonly string[] UIStyleNames = new string[] { "VisualStudio 2005", "Office 2003", }; /// /// Returns toolstrip renderer for the given style. /// /// UI style. /// The renderer. public static ToolStripProfessionalRenderer GetToolStripRenderer(UIStyle style) { if (FVS2005ToolStripRenderer == null) { FVS2005ToolStripRenderer = new ToolStripProfessionalRenderer(GetColorTable(UIStyle.VisualStudio2005)); // FVS2005ToolStripRenderer.RoundedEdges = false; } if (FOffice2003ToolStripRenderer == null) { FOffice2003ToolStripRenderer = new ToolStripProfessionalRenderer(GetColorTable(UIStyle.Office2003)); // FOffice2003ToolStripRenderer.RoundedEdges = false; } switch (style) { case UIStyle.Office2003: return FOffice2003ToolStripRenderer; default: return FVS2005ToolStripRenderer; } } internal static FRColorTable GetColorTable(UIStyle style) { if (FVS2005ColorTable == null) FVS2005ColorTable = new FRVS2005ColorTable(); if (FOffice2003ColorTable == null) FOffice2003ColorTable = new FROffice2003ColorTable(); switch (style) { case UIStyle.Office2003: return FOffice2003ColorTable; default: return FVS2005ColorTable; } } internal static Color GetControlColor(UIStyle style) => GetColorTable(style).Workspace.ControlBackColor; internal static Color GetGrayColor(UIStyle style) => GetColorTable(style).Workspace.GrayColor; } }