Skip to content

Commit 18ee961

Browse files
Update line colors based on the theme.
1 parent 405396a commit 18ee961

File tree

4 files changed

+108
-10
lines changed

4 files changed

+108
-10
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,7 @@ VSPackage/OpenCppCoverage-x64
1515
VSPackage/OpenCppCoverage-x86
1616

1717
# ProtBuff file
18-
VSPackage/CoverageData/CoverageData.cs
18+
VSPackage/CoverageData/CoverageData.cs
19+
20+
# Generated files
21+
Themes.pkgdef

VSPackage/CoverageTree/CoverageViewManager.cs

Lines changed: 53 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
// You should have received a copy of the GNU General Public License
1515
// along with this program. If not, see <http://www.gnu.org/licenses/>.
1616

17+
using Microsoft.VisualStudio.PlatformUI;
18+
using Microsoft.VisualStudio.Shell;
1719
using Microsoft.VisualStudio.Text;
1820
using Microsoft.VisualStudio.Text.Editor;
1921
using Microsoft.VisualStudio.Text.Formatting;
@@ -35,18 +37,45 @@ namespace OpenCppCoverage.VSPackage.CoverageTree
3537
sealed class CoverageViewManager : IWpfTextViewCreationListener, ICoverageViewManager
3638
{
3739
//---------------------------------------------------------------------
40+
static CoverageViewManager()
41+
{
42+
LoadBrushes();
43+
}
44+
45+
//---------------------------------------------------------------------
46+
static void LoadBrushes()
47+
{
48+
CoveredBrush = LoadBrush("CoveredLineColor");
49+
UncoveredBrush = LoadBrush("UnCoveredLineColor");
50+
}
51+
52+
//---------------------------------------------------------------------
53+
static SolidColorBrush LoadBrush(string keyName)
54+
{
55+
var key = new ThemeResourceKey(openCppCoverageCategory, keyName, ThemeResourceKeyType.BackgroundBrush);
56+
var color = VSColorTheme.GetThemedColor(key);
57+
return new SolidColorBrush(Color.FromArgb(color.A, color.R, color.G, color.B));
58+
}
59+
60+
//---------------------------------------------------------------------
61+
static Guid openCppCoverageCategory = new Guid("F50C7A34-815C-4FCB-BE28-7EDBB3185A04");
3862
public const string HighlightLinesAdornment = "HighlightLines";
3963
public static object CoverageTag = new object();
40-
public static Brush CoveredBrush = Brushes.PaleGreen;
41-
public static Brush UncoveredBrush = Brushes.LightCoral;
64+
public static Brush CoveredBrush;
65+
public static Brush UncoveredBrush;
4266

4367
//---------------------------------------------------------------------
4468
readonly List<IWpfTextView> views = new List<IWpfTextView>();
4569
readonly FileCoverageAggregator fileCoverageAggregator = new FileCoverageAggregator();
4670

4771
Dictionary<string, FileCoverage> coverageByFile = new Dictionary<string, FileCoverage>();
48-
Dictionary<IWpfTextView, EventHandler<TextContentChangedEventArgs>>
49-
onTextChangedHanlders = new Dictionary<IWpfTextView, EventHandler<TextContentChangedEventArgs>>();
72+
class Handler
73+
{
74+
public EventHandler<TextContentChangedEventArgs> OnTextChanged { get; set; }
75+
public ThemeChangedEventHandler OnThemeChanged { get; set; }
76+
}
77+
78+
Dictionary<IWpfTextView, Handler> handlers = new Dictionary<IWpfTextView, Handler>();
5079
bool showCoverage;
5180

5281
//---------------------------------------------------------------------
@@ -58,8 +87,14 @@ public void TextViewCreated(IWpfTextView textView)
5887

5988
EventHandler<TextContentChangedEventArgs> onTextChanged =
6089
(sender, e) => OnTextChanged(textView, e);
61-
onTextChangedHanlders.Add(textView, onTextChanged);
90+
ThemeChangedEventHandler onThemeChanged = e => OnThemeChangedEvent(textView, e);
91+
handlers.Add(textView, new Handler
92+
{
93+
OnTextChanged = onTextChanged,
94+
OnThemeChanged = onThemeChanged
95+
});
6296
textView.TextBuffer.Changed += onTextChanged;
97+
VSColorTheme.ThemeChanged += onThemeChanged;
6398
}
6499

65100
//---------------------------------------------------------------------
@@ -137,10 +172,11 @@ void OnTextViewClosed(object sender, EventArgs e)
137172
textView.Closed -= OnTextViewClosed;
138173
textView.LayoutChanged -= OnLayoutChanged;
139174

140-
var onTextChangedHandler = this.onTextChangedHanlders[textView];
141-
this.onTextChangedHanlders.Remove(textView);
175+
var handler = this.handlers[textView];
176+
this.handlers.Remove(textView);
142177

143-
textView.TextBuffer.Changed -= onTextChangedHandler;
178+
textView.TextBuffer.Changed -= handler.OnTextChanged;
179+
VSColorTheme.ThemeChanged -= handler.OnThemeChanged;
144180
}
145181
}
146182

@@ -225,5 +261,14 @@ void OnTextChanged(IWpfTextView textView, TextContentChangedEventArgs e)
225261
RemoveHighlight(textView);
226262
}
227263
}
264+
265+
//---------------------------------------------------------------------
266+
void OnThemeChangedEvent(IWpfTextView textView, ThemeChangedEventArgs e)
267+
{
268+
LoadBrushes();
269+
RemoveHighlight(textView);
270+
if (this.showCoverage)
271+
AddNewHighlightCoverage(textView, textView.TextViewLines);
272+
}
228273
}
229274
}

VSPackage/Themes.xml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<Themes>
3+
<Theme Name="Light" GUID="{de3dbbcd-f642-433c-8353-8f1df4370aba}">
4+
<Category Name="OpenCppCoverage" GUID="{F50C7A34-815C-4FCB-BE28-7EDBB3185A04}">
5+
<Color Name="CoveredLineColor">
6+
<Background Type="CT_RAW" Source="FFE0FFE0" />
7+
</Color>
8+
<Color Name="UnCoveredLineColor">
9+
<Background Type="CT_RAW" Source="FFFFE0E0" />
10+
</Color>
11+
</Category>
12+
</Theme>
13+
<Theme Name="Dark" GUID="{1ded0138-47ce-435e-84ef-9ec1f439b749}">
14+
<Category Name="OpenCppCoverage" GUID="{F50C7A34-815C-4FCB-BE28-7EDBB3185A04}">
15+
<Color Name="CoveredLineColor">
16+
<Background Type="CT_RAW" Source="FF003700" />
17+
</Color>
18+
<Color Name="UnCoveredLineColor">
19+
<Background Type="CT_RAW" Source="FF370000" />
20+
</Color>
21+
</Category>
22+
</Theme>
23+
<Theme Name="Blue" GUID="{a4d6a176-b948-4b29-8c66-53c97a1ed7d0}">
24+
<Category Name="OpenCppCoverage" GUID="{F50C7A34-815C-4FCB-BE28-7EDBB3185A04}">
25+
<Color Name="CoveredLineColor">
26+
<Background Type="CT_RAW" Source="FFE0FFE0" />
27+
</Color>
28+
<Color Name="UnCoveredLineColor">
29+
<Background Type="CT_RAW" Source="FFFFE0E0" />
30+
</Color>
31+
</Category>
32+
</Theme>
33+
<Theme Name="High Contrast" GUID="{a5c004b4-2d4b-494e-bf01-45fc492522c7}">
34+
<Category Name="OpenCppCoverage" GUID="{F50C7A34-815C-4FCB-BE28-7EDBB3185A04}">
35+
<Color Name="CoveredLineColor">
36+
<Background Type="CT_RAW" Source="FFE0FFE0" />
37+
</Color>
38+
<Color Name="UnCoveredLineColor">
39+
<Background Type="CT_RAW" Source="FFFFE0E0" />
40+
</Color>
41+
</Category>
42+
</Theme>
43+
</Themes>

VSPackage/VSPackage.csproj

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,12 @@
485485
<Content Include="OpenCppCoverage-x86\Tools.dll">
486486
<IncludeInVSIX>true</IncludeInVSIX>
487487
</Content>
488+
<Content Include="Themes.pkgdef">
489+
<IncludeInVSIX>true</IncludeInVSIX>
490+
</Content>
491+
<Resource Include="Themes.xml">
492+
<SubType>Designer</SubType>
493+
</Resource>
488494
</ItemGroup>
489495
<ItemGroup>
490496
<Page Include="CoverageTree\CoverageTreeControl.xaml">
@@ -529,7 +535,8 @@
529535
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
530536
<Import Project="$(VSToolsPath)\VSSDK\Microsoft.VsSDK.targets" Condition="'$(VSToolsPath)' != ''" />
531537
<PropertyGroup>
532-
<PreBuildEvent>$(SolutionDir)packages\Google.ProtocolBuffers.2.4.1.555\tools\ProtoGen.exe --proto_path=$(SolutionDir)VSPackage\CoverageData -namespace=OpenCppCoverage.VSPackage.CoverageData.ProtoBuff -output_directory=$(ProjectDir)CoverageData CoverageData.proto</PreBuildEvent>
538+
<PreBuildEvent>"$(SolutionDir)packages\Google.ProtocolBuffers.2.4.1.555\tools\ProtoGen.exe" --proto_path=$(SolutionDir)VSPackage\CoverageData -namespace=OpenCppCoverage.VSPackage.CoverageData.ProtoBuff -output_directory=$(ProjectDir)CoverageData CoverageData.proto
539+
"$(DevEnvDir)..\..\VSSDK\VisualStudioIntegration\Tools\Bin\VsixColorCompiler.exe" "$(ProjectDir)\Themes.xml" "$(ProjectDir)\Themes.pkgdef" /noLogo</PreBuildEvent>
533540
</PropertyGroup>
534541
<PropertyGroup>
535542
<PostBuildEvent>

0 commit comments

Comments
 (0)