Skip to content

Commit 1cb6d9c

Browse files
authored
feat: themeable HighlightingManager (#46)
* The default environment is set as static, so it can be updated by GitExtensions with theme colors. Any overrides in the actual themes would still be overriding the default environment colors (the theme overrides were recently removed though). * Make it possible to set colors as adaptable, to control if they should be adapted for the themes or not. Highlight colors hardcoded in the interface or in .xshd files (unless they are system colors) should generally be adapted, but colors in themes are likely to be set to the intended color.
1 parent a23e8d6 commit 1cb6d9c

File tree

5 files changed

+33
-17
lines changed

5 files changed

+33
-17
lines changed

Project/Src/Document/HighlightingStrategy/DefaultHighlightingStrategy.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,32 @@ public class DefaultHighlightingStrategy : IHighlightingStrategyUsingRuleSets
3434
// Span state variables
3535
protected bool inSpan;
3636

37-
public DefaultHighlightingStrategy() : this("Default")
38-
{
39-
}
37+
// Default environment, can be overridden
38+
public static readonly DefaultHighlightingStrategy Default = new();
4039

4140
public DefaultHighlightingStrategy(string name)
4241
{
4342
Name = name;
4443

45-
DigitColor = new HighlightColor(SystemColors.WindowText, bold: false, italic: false);
46-
DefaultTextColor = new HighlightColor(SystemColors.WindowText, bold: false, italic: false);
44+
environmentColors = Default.environmentColors;
45+
DigitColor = Default.DigitColor;
46+
DefaultTextColor = Default.DefaultTextColor;
47+
}
48+
49+
private DefaultHighlightingStrategy() {}
50+
51+
static DefaultHighlightingStrategy()
52+
{
53+
Default.Name = "Default";
54+
Default.DigitColor = new HighlightColor(nameof(SystemColors.WindowText), bold: false, italic: false);
55+
Default.DefaultTextColor = new HighlightColor(nameof(SystemColors.WindowText), bold: false, italic: false);
4756

4857
// set small 'default color environment'
49-
environmentColors = new Dictionary<string, HighlightColor>
58+
// colors that are not system colors will be adapted to the theme
59+
Default.environmentColors = new Dictionary<string, HighlightColor>
5060
{
5161
["Default"] = new HighlightBackground(nameof(SystemColors.WindowText), nameof(SystemColors.Window), bold: false, italic: false),
52-
["Selection"] = new HighlightColor(SystemColors.WindowText, Color.FromArgb(0xc3, 0xc3, 0xff), bold: false, italic: false),
62+
["Selection"] = new HighlightColor(SystemColors.WindowText, Color.FromArgb(0xc3, 0xc3, 0xff), bold: false, italic: false, adaptable: true),
5363
["VRuler"] = new HighlightColor(nameof(SystemColors.ControlLight), nameof(SystemColors.Window), bold: false, italic: false),
5464
["InvalidLines"] = new HighlightColor(Color.FromArgb(0xB6, 0xB6, 0xC0), bold: false, italic: false),
5565
["CaretMarker"] = new HighlightColor(nameof(SystemColors.MenuBar), bold: false, italic: false),
@@ -284,7 +294,7 @@ private void ResolveExternalReferences()
284294
public void SetColorFor(string name, HighlightColor color)
285295
{
286296
if (name == "Default")
287-
DefaultTextColor = new HighlightColor(color.Color, color.Bold, color.Italic);
297+
DefaultTextColor = new HighlightColor(color.Color, color.Bold, color.Italic, adaptable: color.Adaptable);
288298
environmentColors[name] = color;
289299
}
290300

Project/Src/Document/HighlightingStrategy/HighlightBackground.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,6 @@ public HighlightBackground(XmlElement el) : base(el)
2727
/// <summary>
2828
/// Creates a new instance of <see cref="HighlightBackground" />
2929
/// </summary>
30-
public HighlightBackground(Color color, Color backgroundcolor, bool bold, bool italic) : base(color, backgroundcolor, bold, italic)
31-
{
32-
}
33-
3430
public HighlightBackground(string systemColor, string systemBackgroundColor, bool bold, bool italic) : base(systemColor, systemBackgroundColor, bold, italic)
3531
{
3632
}

Project/Src/Document/HighlightingStrategy/HighlightColor.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,32 +117,35 @@ public HighlightColor(HighlightColor original, Color color, Color backColor)
117117
Italic = original.Italic;
118118
HasForeground = original.HasForeground;
119119
HasBackground = original.HasBackground;
120+
Adaptable = original.Adaptable;
120121
Color = color;
121122
BackgroundColor = backColor;
122123
}
123124

124125
/// <summary>
125126
/// Creates a new instance of <see cref="HighlightColor" />
126127
/// </summary>
127-
public HighlightColor(Color color, bool bold, bool italic)
128+
public HighlightColor(Color color, bool bold, bool italic, bool adaptable = true)
128129
{
129130
HasForeground = true;
130131
Color = color;
131132
Bold = bold;
132133
Italic = italic;
134+
Adaptable = adaptable;
133135
}
134136

135137
/// <summary>
136138
/// Creates a new instance of <see cref="HighlightColor" />
137139
/// </summary>
138-
public HighlightColor(Color color, Color backgroundcolor, bool bold, bool italic)
140+
public HighlightColor(Color color, Color backgroundcolor, bool bold, bool italic, bool adaptable = true)
139141
{
140142
HasForeground = true;
141143
HasBackground = true;
142144
Color = color;
143145
BackgroundColor = backgroundcolor;
144146
Bold = bold;
145147
Italic = italic;
148+
Adaptable = adaptable;
146149
}
147150

148151
/// <summary>
@@ -158,6 +161,7 @@ public HighlightColor(string systemColor, string systemBackgroundColor, bool bol
158161

159162
Bold = bold;
160163
Italic = italic;
164+
Adaptable = false;
161165
}
162166

163167
/// <summary>
@@ -171,6 +175,7 @@ public HighlightColor(string systemColor, bool bold, bool italic)
171175

172176
Bold = bold;
173177
Italic = italic;
178+
Adaptable = false;
174179
}
175180

176181
public bool HasForeground { get; }
@@ -197,6 +202,11 @@ public HighlightColor(string systemColor, bool bold, bool italic)
197202
/// </value>
198203
public Color Color { get; }
199204

205+
/// <value>
206+
/// If the color should be adpted to the theme or if it is absolute
207+
/// </value>
208+
public bool Adaptable { get; } = true;
209+
200210
/// <value>
201211
/// The font used
202212
/// </value>

Project/Src/Document/HighlightingStrategy/HighlightingManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public void ReloadSyntaxModes()
7474

7575
private void CreateDefaultHighlightingStrategy()
7676
{
77-
var defaultHighlightingStrategy = new DefaultHighlightingStrategy();
77+
var defaultHighlightingStrategy = DefaultHighlightingStrategy.Default;
7878
defaultHighlightingStrategy.Extensions = new string[] { };
7979
defaultHighlightingStrategy.Rules.Add(new HighlightRuleSet());
8080
HighlightingDefinitions["Default"] = defaultHighlightingStrategy;
@@ -144,4 +144,4 @@ protected virtual void OnReloadSyntaxHighlighting(EventArgs e)
144144

145145
public event EventHandler ReloadSyntaxHighlighting;
146146
}
147-
}
147+
}

Project/Src/Document/LineManager/LineSegment.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public HighlightColor GetColorForPosition(int x)
7474
}
7575
}
7676

77-
return new HighlightColor(SystemColors.WindowText, bold: false, italic: false);
77+
return new HighlightColor(nameof(SystemColors.WindowText), bold: false, italic: false);
7878
}
7979

8080
/// <summary>

0 commit comments

Comments
 (0)