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 ;
1719using Microsoft . VisualStudio . Text ;
1820using Microsoft . VisualStudio . Text . Editor ;
1921using 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}
0 commit comments