55using Microsoft . VisualStudio ;
66using Microsoft . VisualStudio . Shell ;
77using Microsoft . VisualStudio . Shell . Interop ;
8+ using Task = System . Threading . Tasks . Task ;
89
910namespace FineCodeCoverage . Impl
1011{
@@ -18,47 +19,13 @@ internal class CoverageColorProvider : ICoverageColoursProvider, ICoverageColour
1819 private System . Windows . Media . Color defaultCoverageTouchedArea = System . Windows . Media . Colors . Green ;
1920 private System . Windows . Media . Color defaultCoverageNotTouchedArea = System . Windows . Media . Colors . Red ;
2021 private System . Windows . Media . Color defaultCoveragePartiallyTouchedArea = System . Windows . Media . Color . FromRgb ( 255 , 165 , 0 ) ;
21- private System . Windows . Media . Color coverageTouchedArea ;
22- private System . Windows . Media . Color coverageNotTouchedArea ;
23- private System . Windows . Media . Color coveragePartiallyTouchedArea ;
24- public System . Windows . Media . Color CoverageTouchedArea {
25- get {
26- UpdateFromFontsAndColorsIfNecessary ( ) ;
27- return coverageTouchedArea ;
28- }
29- private set
30- {
31- coverageTouchedArea = value ;
32- }
33- }
22+ public System . Windows . Media . Color CoverageTouchedArea { get ; set ; }
3423
35- public System . Windows . Media . Color CoverageNotTouchedArea {
36- get
37- {
38- UpdateFromFontsAndColorsIfNecessary ( ) ;
39- return coverageNotTouchedArea ;
40- }
41- private set
42- {
43- coverageNotTouchedArea = value ;
44- }
45- }
24+ public System . Windows . Media . Color CoverageNotTouchedArea { get ; set ; }
4625
47- public System . Windows . Media . Color CoveragePartiallyTouchedArea {
48- get
49- {
50- UpdateFromFontsAndColorsIfNecessary ( ) ;
51- return coveragePartiallyTouchedArea ;
52- }
53- private set
54- {
55- coveragePartiallyTouchedArea = value ;
56- }
57-
58- }
26+ public System . Windows . Media . Color CoveragePartiallyTouchedArea { get ; set ; }
5927
6028 private bool coverageColoursFromFontsAndColours ;
61- private bool requiresFromFontsAndColours ;
6229
6330 [ ImportingConstructor ]
6431 public CoverageColorProvider ( [ Import ( typeof ( SVsServiceProvider ) ) ] IServiceProvider serviceProvider , IAppOptionsProvider appOptionsProvider )
@@ -87,48 +54,41 @@ private void UseDefaultColoursIfNotFontsAndColours()
8754 }
8855 }
8956
90- public void UpdateRequired ( )
91- {
92- requiresFromFontsAndColours = true ;
93- }
94-
95- private void UpdateFromFontsAndColorsIfNecessary ( )
57+ public async Task PrepareAsync ( )
9658 {
97- if ( coverageColoursFromFontsAndColours && requiresFromFontsAndColours )
59+ if ( coverageColoursFromFontsAndColours )
9860 {
99- UpdateColoursFromFontsAndColors ( ) ;
61+ await UpdateColoursFromFontsAndColorsAsync ( ) ;
10062 }
10163 }
10264
103- private void UpdateColoursFromFontsAndColors ( )
65+ private async Task UpdateColoursFromFontsAndColorsAsync ( )
10466 {
105- ThreadHelper . JoinableTaskFactory . Run ( async ( ) =>
67+ await ThreadHelper . JoinableTaskFactory . SwitchToMainThreadAsync ( ) ;
68+ var success = fontAndColorStorage . OpenCategory ( ref categoryWithCoverage , storeFlags ) ;
69+ if ( success == VSConstants . S_OK )
10670 {
107- await ThreadHelper . JoinableTaskFactory . SwitchToMainThreadAsync ( ) ;
108- var success = fontAndColorStorage . OpenCategory ( ref categoryWithCoverage , storeFlags ) ;
109- if ( success == VSConstants . S_OK )
71+ // https://github.com/microsoft/vs-threading/issues/993
72+ System . Windows . Media . Color GetColor ( string displayName )
11073 {
111- // https://github.com/microsoft/vs-threading/issues/993
112- System . Windows . Media . Color GetColor ( string displayName )
74+ var touchAreaInfo = new ColorableItemInfo [ 1 ] ;
75+ var getItemSuccess = fontAndColorStorage . GetItem ( displayName , touchAreaInfo ) ;
76+ if ( getItemSuccess == VSConstants . S_OK )
11377 {
114- var touchAreaInfo = new ColorableItemInfo [ 1 ] ;
115- var getItemSuccess = fontAndColorStorage . GetItem ( displayName , touchAreaInfo ) ;
116- if ( getItemSuccess == VSConstants . S_OK )
117- {
118- return ParseColor ( touchAreaInfo [ 0 ] . crBackground ) ;
119- }
120- throw new Exception ( "Failed to get color" ) ;
78+ return ParseColor ( touchAreaInfo [ 0 ] . crBackground ) ;
12179 }
122-
123- CoverageTouchedArea = GetColor ( "Coverage Touched Area" ) ;
124- CoverageNotTouchedArea = GetColor ( "Coverage Not Touched Area" ) ;
125- CoveragePartiallyTouchedArea = GetColor ( "Coverage Partially Touched Area" ) ;
80+ throw new Exception ( "Failed to get color" ) ;
12681 }
127- fontAndColorStorage . CloseCategory ( ) ;
82+
83+ CoverageTouchedArea = GetColor ( "Coverage Touched Area" ) ;
84+ CoverageNotTouchedArea = GetColor ( "Coverage Not Touched Area" ) ;
85+ CoveragePartiallyTouchedArea = GetColor ( "Coverage Partially Touched Area" ) ;
86+ }
87+ else
88+ {
12889 //throw ?
129- requiresFromFontsAndColours = false ;
130- } ) ;
131-
90+ }
91+ fontAndColorStorage . CloseCategory ( ) ; // only for success ?
13292 }
13393
13494 private System . Windows . Media . Color ParseColor ( uint color )
0 commit comments