@@ -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