/// <summary> /// Constructor for the OverviewChangeTrackingMargin. /// </summary> private OverviewMarkMargin( IWpfTextViewHost textViewHost, IVerticalScrollBar scrollBar, OverviewMarkMarginProvider provider) { _markMarginElement = new MarkMarginElement(textViewHost.TextView, scrollBar, provider); }
/// <summary> /// Factory for the OverviewMarkMargin. /// </summary> public static OverviewMarkMargin Create( IWpfTextViewHost textViewHost, IVerticalScrollBar scrollBar, OverviewMarkMarginProvider provider) { // Validate if (textViewHost == null) throw new ArgumentNullException("textViewHost"); return new OverviewMarkMargin(textViewHost, scrollBar, provider); }
/// <summary> /// Factory for the OverviewMarkMargin. /// </summary> public static OverviewMarkMargin Create( IWpfTextViewHost textViewHost, IVerticalScrollBar scrollBar, OverviewMarkMarginProvider provider) { // Validate if (textViewHost == null) { throw new ArgumentNullException("textViewHost"); } return(new OverviewMarkMargin(textViewHost, scrollBar, provider)); }
public MarkMarginElement(IWpfTextView textView, IVerticalScrollBar scrollbar, OverviewMarkMarginProvider provider) { provider.LoadOption(textView.Options, DefaultOverviewMarginOptions.MarkMarginId.Name); provider.LoadOption(textView.Options, MarkMarginWidthId.Name); _markPen = new Pen(Brushes.DimGray, 1.0); _markPen.Freeze(); _textView = textView; _scrollBar = scrollbar; _editorFormatMap = provider.EditorFormatMapService.GetEditorFormatMap(_textView); _factories = new List <IOverviewMarkFactory>(); foreach (var markProvider in provider.MarkProviders) { IEnumerable <string> providerRoles = markProvider.Metadata.TextViewRoles; if (_textView.Roles.ContainsAny(providerRoles)) { IOverviewMarkFactory factory = markProvider.Value.GetOverviewMarkFactory(textView); if (factory != null) { _factories.Add(factory); factory.MarksChanged += delegate { this.AsynchInvalidateVisual(); }; } } } //Make our width big enough to see, but not so big that it consumes a lot of //real-estate. this.Width = textView.Options.GetOptionValue(MarkMarginWidthId); this.OnOptionsChanged(null, null); textView.Options.OptionChanged += this.OnOptionsChanged; this.IsVisibleChanged += delegate(object sender, DependencyPropertyChangedEventArgs e) { if ((bool)e.NewValue) { //Hook up to the various events we need to keep the caret margin current. _scrollBar.TrackSpanChanged += OnTrackSpanChanged; //Force the margin to be rerendered since things might have changed while the margin was hidden. this.AsynchInvalidateVisual(); } else { _scrollBar.TrackSpanChanged -= OnTrackSpanChanged; } }; }