Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 89ff040

Browse files
Merge pull request #244 from tonyhallett/fix-coverage-colours-from-vs
Fix coverage colours from vs
2 parents 0622814 + 3eea0fb commit 89ff040

File tree

2 files changed

+45
-20
lines changed

2 files changed

+45
-20
lines changed

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ If you are using option 1) then project and global options will only be used whe
114114

115115
#### Options
116116
```
117-
CoverageColoursFromFontsAndColours Specify true to use Environment / Fonts and Colors / Text Editor for editor Coverage colouring.
117+
CoverageColoursFromFontsAndColours Specify true to use Environment / Fonts and Colors / Text Editor for editor Coverage colouring ( if present).
118118
Coverage Touched Area / Coverage Not Touched Area / Coverage Partially Touched Area.
119119
When false colours used are Green, Red and Gold.
120120
Enabled Specifies whether or not coverage output is enabled

‎SharedProject/Impl/CoverageColorProvider.cs‎

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,37 @@ namespace FineCodeCoverage.Impl
1414
internal class CoverageColorProvider : ICoverageColoursProvider, ICoverageColours
1515
{
1616
private readonly IVsFontAndColorStorage fontAndColorStorage;
17-
private GuidcategoryWithCoverage=Guid.Parse("ff349800-ea43-46c1-8c98-878e78f46501");
17+
private readonlyILoggerlogger;
1818
private readonly uint storeFlags = (uint)(__FCSTORAGEFLAGS.FCSF_READONLY | __FCSTORAGEFLAGS.FCSF_LOADDEFAULTS | __FCSTORAGEFLAGS.FCSF_NOAUTOCOLORS | __FCSTORAGEFLAGS.FCSF_PROPAGATECHANGES);
19-
private System.Windows.Media.Color defaultCoverageTouchedArea = System.Windows.Media.Colors.Green;
20-
private System.Windows.Media.Color defaultCoverageNotTouchedArea = System.Windows.Media.Colors.Red;
21-
private System.Windows.Media.Color defaultCoveragePartiallyTouchedArea = System.Windows.Media.Color.FromRgb(255, 165, 0);
19+
private readonly System.Windows.Media.Color defaultCoverageTouchedArea = System.Windows.Media.Colors.Green;
20+
private readonly System.Windows.Media.Color defaultCoverageNotTouchedArea = System.Windows.Media.Colors.Red;
21+
private readonly System.Windows.Media.Color defaultCoveragePartiallyTouchedArea = System.Windows.Media.Color.FromRgb(255, 165, 0);
22+
private Guid categoryWithCoverage = Guid.Parse("ff349800-ea43-46c1-8c98-878e78f46501");
23+
private bool coverageColoursFromFontsAndColours;
24+
private bool dirty = true;
25+
private bool canUseFontsAndColours = true;
2226
public System.Windows.Media.Color CoverageTouchedArea { get; set; }
2327

2428
public System.Windows.Media.Color CoverageNotTouchedArea { get; set; }
2529

2630
public System.Windows.Media.Color CoveragePartiallyTouchedArea { get; set; }
2731

28-
private bool coverageColoursFromFontsAndColours;
29-
private bool dirty = true;
32+
3033

3134
[ImportingConstructor]
32-
public CoverageColorProvider([Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider, IAppOptionsProvider appOptionsProvider)
35+
public CoverageColorProvider(
36+
[Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider,
37+
IAppOptionsProvider appOptionsProvider,
38+
ILogger logger
39+
)
3340
{
3441
ThreadHelper.ThrowIfNotOnUIThread();
3542
fontAndColorStorage = (IVsFontAndColorStorage)serviceProvider.GetService(typeof(IVsFontAndColorStorage));
3643
Assumes.Present(fontAndColorStorage);
3744
coverageColoursFromFontsAndColours = appOptionsProvider.Get().CoverageColoursFromFontsAndColours;
3845
UseDefaultColoursIfNotFontsAndColours();
3946
appOptionsProvider.OptionsChanged += AppOptionsProvider_OptionsChanged;
47+
this.logger = logger;
4048
}
4149

4250
private void AppOptionsProvider_OptionsChanged(IAppOptions appOptions)
@@ -50,15 +58,20 @@ private void UseDefaultColoursIfNotFontsAndColours()
5058
{
5159
if (!coverageColoursFromFontsAndColours)
5260
{
53-
CoverageTouchedArea = defaultCoverageTouchedArea;
54-
CoverageNotTouchedArea = defaultCoverageNotTouchedArea;
55-
CoveragePartiallyTouchedArea = defaultCoveragePartiallyTouchedArea;
61+
UseDefaultColours();
5662
}
5763
}
5864

65+
private void UseDefaultColours()
66+
{
67+
CoverageTouchedArea = defaultCoverageTouchedArea;
68+
CoverageNotTouchedArea = defaultCoverageNotTouchedArea;
69+
CoveragePartiallyTouchedArea = defaultCoveragePartiallyTouchedArea;
70+
}
71+
5972
public async Task PrepareAsync()
6073
{
61-
if (coverageColoursFromFontsAndColours && dirty)
74+
if (coverageColoursFromFontsAndColours && canUseFontsAndColours&&dirty)
6275
{
6376
await UpdateColoursFromFontsAndColorsAsync();
6477
}
@@ -69,6 +82,7 @@ private async Task UpdateColoursFromFontsAndColorsAsync()
6982
{
7083
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
7184
var success = fontAndColorStorage.OpenCategory(ref categoryWithCoverage, storeFlags);
85+
var usedFontsAndColors = false;
7286
if (success == VSConstants.S_OK)
7387
{
7488
// https://github.com/microsoft/vs-threading/issues/993
@@ -80,18 +94,29 @@ System.Windows.Media.Color GetColor(string displayName)
8094
{
8195
return ParseColor(touchAreaInfo[0].crBackground);
8296
}
83-
throw new Exception("Failed to get color");
97+
throw new NotSupportedException($"{getItemSuccess}");
98+
}
99+
try
100+
{
101+
// https://developercommunity.visualstudio.com/t/fonts-and-colors-coverage-settings-available-in-vs/1683898
102+
CoverageTouchedArea = GetColor("Coverage Touched Area");
103+
CoverageNotTouchedArea = GetColor("Coverage Not Touched Area");
104+
CoveragePartiallyTouchedArea = GetColor("Coverage Partially Touched Area");
105+
usedFontsAndColors = true;
106+
107+
}catch(NotSupportedException)
108+
{
109+
logger.Log("No coverage settings available from Fonts and Colors");
84110
}
85-
86-
CoverageTouchedArea = GetColor("Coverage Touched Area");
87-
CoverageNotTouchedArea = GetColor("Coverage Not Touched Area");
88-
CoveragePartiallyTouchedArea = GetColor("Coverage Partially Touched Area");
89111
}
90-
else
112+
113+
fontAndColorStorage.CloseCategory();
114+
if (!usedFontsAndColors)
91115
{
92-
//throw ?
116+
canUseFontsAndColours = false;
117+
UseDefaultColours();
93118
}
94-
fontAndColorStorage.CloseCategory();// only for success ?
119+
95120
}
96121

97122
private System.Windows.Media.Color ParseColor(uint color)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /