Skip to content

Commit c8c0f9b

Browse files
committed
fallback colours when settings not available in Fonts and Colors
1 parent 08baba4 commit c8c0f9b

File tree

1 file changed

+38
-21
lines changed

1 file changed

+38
-21
lines changed

SharedProject/Impl/CoverageColorProvider.cs

Lines changed: 38 additions & 21 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 Guid categoryWithCoverage = Guid.Parse("ff349800-ea43-46c1-8c98-878e78f46501");
17+
private readonly ILogger logger;
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
}
@@ -80,18 +93,22 @@ System.Windows.Media.Color GetColor(string displayName)
8093
{
8194
return ParseColor(touchAreaInfo[0].crBackground);
8295
}
83-
throw new Exception($"Failed to get color - error {getItemSuccess}");
96+
throw new NotSupportedException($"{getItemSuccess}");
97+
}
98+
try
99+
{
100+
// https://developercommunity.visualstudio.com/t/fonts-and-colors-coverage-settings-available-in-vs/1683898
101+
CoverageTouchedArea = GetColor("Coverage Touched Area");
102+
CoverageNotTouchedArea = GetColor("Coverage Not Touched Area");
103+
CoveragePartiallyTouchedArea = GetColor("Coverage Partially Touched Area");
104+
}catch(NotSupportedException)
105+
{
106+
logger.Log("No coverage settings available from Fonts and Colors");
84107
}
85-
86-
CoverageTouchedArea = GetColor("Coverage Touched Area");
87-
CoverageNotTouchedArea = GetColor("Coverage Not Touched Area");
88-
CoveragePartiallyTouchedArea = GetColor("Coverage Partially Touched Area");
89-
}
90-
else
91-
{
92-
//throw ?
93108
}
94-
fontAndColorStorage.CloseCategory(); // only for success ?
109+
canUseFontsAndColours = false;
110+
UseDefaultColours();
111+
fontAndColorStorage.CloseCategory();
95112
}
96113

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

0 commit comments

Comments
 (0)