diff --git a/Project/Src/Document/HighlightingStrategy/DefaultHighlightingStrategy.cs b/Project/Src/Document/HighlightingStrategy/DefaultHighlightingStrategy.cs index 6fc6a86..f625ea8 100644 --- a/Project/Src/Document/HighlightingStrategy/DefaultHighlightingStrategy.cs +++ b/Project/Src/Document/HighlightingStrategy/DefaultHighlightingStrategy.cs @@ -34,22 +34,32 @@ public class DefaultHighlightingStrategy : IHighlightingStrategyUsingRuleSets // Span state variables protected bool inSpan; - public DefaultHighlightingStrategy() : this("Default") - { - } + // Default environment, can be overridden + public static readonly DefaultHighlightingStrategy Default = new(); public DefaultHighlightingStrategy(string name) { Name = name; - DigitColor = new HighlightColor(SystemColors.WindowText, bold: false, italic: false); - DefaultTextColor = new HighlightColor(SystemColors.WindowText, bold: false, italic: false); + environmentColors = Default.environmentColors; + DigitColor = Default.DigitColor; + DefaultTextColor = Default.DefaultTextColor; + } + + private DefaultHighlightingStrategy() {} + + static DefaultHighlightingStrategy() + { + Default.Name = "Default"; + Default.DigitColor = new HighlightColor(nameof(SystemColors.WindowText), bold: false, italic: false); + Default.DefaultTextColor = new HighlightColor(nameof(SystemColors.WindowText), bold: false, italic: false); // set small 'default color environment' - environmentColors = new Dictionary + // colors that are not system colors will be adapted to the theme + Default.environmentColors = new Dictionary { ["Default"] = new HighlightBackground(nameof(SystemColors.WindowText), nameof(SystemColors.Window), bold: false, italic: false), - ["Selection"] = new HighlightColor(SystemColors.WindowText, Color.FromArgb(0xc3, 0xc3, 0xff), bold: false, italic: false), + ["Selection"] = new HighlightColor(SystemColors.WindowText, Color.FromArgb(0xc3, 0xc3, 0xff), bold: false, italic: false, adaptable: true), ["VRuler"] = new HighlightColor(nameof(SystemColors.ControlLight), nameof(SystemColors.Window), bold: false, italic: false), ["InvalidLines"] = new HighlightColor(Color.FromArgb(0xB6, 0xB6, 0xC0), bold: false, italic: false), ["CaretMarker"] = new HighlightColor(nameof(SystemColors.MenuBar), bold: false, italic: false), @@ -284,7 +294,7 @@ private void ResolveExternalReferences() public void SetColorFor(string name, HighlightColor color) { if (name == "Default") - DefaultTextColor = new HighlightColor(color.Color, color.Bold, color.Italic); + DefaultTextColor = new HighlightColor(color.Color, color.Bold, color.Italic, adaptable: color.Adaptable); environmentColors[name] = color; } diff --git a/Project/Src/Document/HighlightingStrategy/HighlightBackground.cs b/Project/Src/Document/HighlightingStrategy/HighlightBackground.cs index 3d4b624..0826a5d 100644 --- a/Project/Src/Document/HighlightingStrategy/HighlightBackground.cs +++ b/Project/Src/Document/HighlightingStrategy/HighlightBackground.cs @@ -27,10 +27,6 @@ public HighlightBackground(XmlElement el) : base(el) /// /// Creates a new instance of /// - public HighlightBackground(Color color, Color backgroundcolor, bool bold, bool italic) : base(color, backgroundcolor, bold, italic) - { - } - public HighlightBackground(string systemColor, string systemBackgroundColor, bool bold, bool italic) : base(systemColor, systemBackgroundColor, bold, italic) { } diff --git a/Project/Src/Document/HighlightingStrategy/HighlightColor.cs b/Project/Src/Document/HighlightingStrategy/HighlightColor.cs index 22e5fa0..c1f0e3c 100644 --- a/Project/Src/Document/HighlightingStrategy/HighlightColor.cs +++ b/Project/Src/Document/HighlightingStrategy/HighlightColor.cs @@ -117,6 +117,7 @@ public HighlightColor(HighlightColor original, Color color, Color backColor) Italic = original.Italic; HasForeground = original.HasForeground; HasBackground = original.HasBackground; + Adaptable = original.Adaptable; Color = color; BackgroundColor = backColor; } @@ -124,18 +125,19 @@ public HighlightColor(HighlightColor original, Color color, Color backColor) /// /// Creates a new instance of /// - public HighlightColor(Color color, bool bold, bool italic) + public HighlightColor(Color color, bool bold, bool italic, bool adaptable = true) { HasForeground = true; Color = color; Bold = bold; Italic = italic; + Adaptable = adaptable; } /// /// Creates a new instance of /// - public HighlightColor(Color color, Color backgroundcolor, bool bold, bool italic) + public HighlightColor(Color color, Color backgroundcolor, bool bold, bool italic, bool adaptable = true) { HasForeground = true; HasBackground = true; @@ -143,6 +145,7 @@ public HighlightColor(Color color, Color backgroundcolor, bool bold, bool italic BackgroundColor = backgroundcolor; Bold = bold; Italic = italic; + Adaptable = adaptable; } /// @@ -158,6 +161,7 @@ public HighlightColor(string systemColor, string systemBackgroundColor, bool bol Bold = bold; Italic = italic; + Adaptable = false; } /// @@ -171,6 +175,7 @@ public HighlightColor(string systemColor, bool bold, bool italic) Bold = bold; Italic = italic; + Adaptable = false; } public bool HasForeground { get; } @@ -197,6 +202,11 @@ public HighlightColor(string systemColor, bool bold, bool italic) /// public Color Color { get; } + /// + /// If the color should be adpted to the theme or if it is absolute + /// + public bool Adaptable { get; } = true; + /// /// The font used /// diff --git a/Project/Src/Document/HighlightingStrategy/HighlightingManager.cs b/Project/Src/Document/HighlightingStrategy/HighlightingManager.cs index 370c8dd..08ab8cc 100644 --- a/Project/Src/Document/HighlightingStrategy/HighlightingManager.cs +++ b/Project/Src/Document/HighlightingStrategy/HighlightingManager.cs @@ -74,7 +74,7 @@ public void ReloadSyntaxModes() private void CreateDefaultHighlightingStrategy() { - var defaultHighlightingStrategy = new DefaultHighlightingStrategy(); + var defaultHighlightingStrategy = DefaultHighlightingStrategy.Default; defaultHighlightingStrategy.Extensions = new string[] { }; defaultHighlightingStrategy.Rules.Add(new HighlightRuleSet()); HighlightingDefinitions["Default"] = defaultHighlightingStrategy; @@ -144,4 +144,4 @@ protected virtual void OnReloadSyntaxHighlighting(EventArgs e) public event EventHandler ReloadSyntaxHighlighting; } -} \ No newline at end of file +} diff --git a/Project/Src/Document/LineManager/LineSegment.cs b/Project/Src/Document/LineManager/LineSegment.cs index 284d41b..ab13d68 100644 --- a/Project/Src/Document/LineManager/LineSegment.cs +++ b/Project/Src/Document/LineManager/LineSegment.cs @@ -74,7 +74,7 @@ public HighlightColor GetColorForPosition(int x) } } - return new HighlightColor(SystemColors.WindowText, bold: false, italic: false); + return new HighlightColor(nameof(SystemColors.WindowText), bold: false, italic: false); } ///