diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2017-08-04 12:56:14 +0300 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2017-08-04 12:56:14 +0300 |
commit | 5434d6236a4c7c72144dfe999a5f096a5128a4cc (patch) | |
tree | 9ca66bbd9c28d3624a4b6dd04d9bd3aadaff2bec /main | |
parent | 46435b071bfdb30ef4829ac2120f9047fd03fb2b (diff) |
Fixed 'Bug 53583 - Using IExtendingLineMarker causes redraw issues'
This was caused by some old code trying to manage the addition/removal
of line markers. Was a left over of times where line markers weren't
stored in segment trees. I removed the old handling code it was mostly
unused anyways.
Diffstat (limited to 'main')
3 files changed, 21 insertions, 63 deletions
diff --git a/main/src/addins/MonoDevelop.SourceEditor2/Mono.TextEditor/Gui/TextViewMargin.cs b/main/src/addins/MonoDevelop.SourceEditor2/Mono.TextEditor/Gui/TextViewMargin.cs index 7d74e4ae60..2161a00299 100644 --- a/main/src/addins/MonoDevelop.SourceEditor2/Mono.TextEditor/Gui/TextViewMargin.cs +++ b/main/src/addins/MonoDevelop.SourceEditor2/Mono.TextEditor/Gui/TextViewMargin.cs @@ -2560,9 +2560,6 @@ namespace Mono.TextEditor if (line != null) { newMarkers.Clear (); newMarkers.AddRange (textEditor.Document.GetMarkers (line).OfType<IActionTextLineMarker> ()); - var extraMarker = Document.GetExtendingTextMarker (loc.Line) as IActionTextLineMarker; - if (extraMarker != null && !oldMarkers.Contains (extraMarker)) - newMarkers.Add (extraMarker); foreach (var marker in newMarkers) { if (oldMarkers.Contains (marker)) continue; @@ -2989,10 +2986,6 @@ namespace Mono.TextEditor // Check if line is beyond the document length if (line == null) { DrawScrollShadow (cr, x, y, _lineHeight); - - var marker = Document.GetExtendingTextMarker (lineNr); - if (marker != null) - marker.Draw (textEditor, cr, lineNr, lineArea); return; } diff --git a/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorView.cs b/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorView.cs index e4eb626b98..91db517e37 100644 --- a/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorView.cs +++ b/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorView.cs @@ -856,13 +856,23 @@ namespace MonoDevelop.SourceEditor } } - public void Draw (MonoTextEditor editor, Cairo.Context cr, int lineNr, Cairo.Rectangle lineArea) + public void Draw (MonoTextEditor editor, Cairo.Context g, int lineNr, Cairo.Rectangle lineArea) { + using (var layout = new Pango.Layout (editor.PangoContext)) { + g.Save (); + editor.EditorTheme.TryGetColor (EditorThemeColors.Foreground, out HslColor color); + g.SetSourceColor (color); + g.Translate (lineArea.X, lineArea.Y - editor.LineHeight * 2); + layout.SetText ("Line " + lineNr); + g.ShowLayout (layout); + g.Restore (); + } + } public double GetLineHeight (MonoTextEditor editor) { - return editor.LineHeight * 3 / 2; + return editor.LineHeight * 3; } }
@@ -931,6 +941,10 @@ namespace MonoDevelop.SourceEditor } document.TextChanged += OnTextReplaced; + //document.AddMarker (5, new MyExtendingLineMarker ()); + //document.AddMarker (7, new MyExtendingLineMarker ()); + //document.AddMarker (10, new MyExtendingLineMarker ()); + return TaskUtil.Default<object>();
}
diff --git a/main/src/core/Mono.TextEditor.Shared/Mono.TextEditor/Document/TextDocument.cs b/main/src/core/Mono.TextEditor.Shared/Mono.TextEditor/Document/TextDocument.cs index 895e248343..d9e440a2e2 100644 --- a/main/src/core/Mono.TextEditor.Shared/Mono.TextEditor/Document/TextDocument.cs +++ b/main/src/core/Mono.TextEditor.Shared/Mono.TextEditor/Document/TextDocument.cs @@ -217,7 +217,6 @@ namespace Mono.TextEditor this.VsTextDocument.FileActionOccurred += this.OnTextDocumentFileActionOccured;
- TextChanging += HandleSplitterLineSegmentTreeLineRemoved;
foldSegmentTree.tree.NodeRemoved += HandleFoldSegmentTreetreeNodeRemoved;
this.diffTracker.SetTrackDocument(this); }
@@ -1548,7 +1547,11 @@ namespace Mono.TextEditor List<TextLineMarker> extendingTextMarkers = new List<TextLineMarker> (); public IEnumerable<DocumentLine> LinesWithExtendingTextMarkers { get { - return from marker in extendingTextMarkers where marker.LineSegment != null select marker.LineSegment; + foreach (var marker in extendingTextMarkers) { + var line = marker.LineSegment; + if (line != null) + yield return line; + } } } @@ -1794,31 +1797,6 @@ namespace Mono.TextEditor #endregion - void HandleSplitterLineSegmentTreeLineRemoved (object sender, TextChangeEventArgs e) - { - for (int i = 0; i < e.TextChanges.Count; ++i) { - var change = e.TextChanges[i]; - var line = GetLineByOffset (change.Offset); - if (line == null) - continue; - var endOffset = change.Offset + change.RemovalLength; - var offset = line.Offset; - do { - foreach (TextLineMarker marker in GetMarkers (line)) { - if (marker is IExtendingTextLineMarker) { - UnRegisterVirtualTextMarker ((IExtendingTextLineMarker)marker); - lock (extendingTextMarkers) { - extendingTextMarkers.Remove (marker); - OnHeightChanged (EventArgs.Empty); - } - } - } - offset += line.LengthIncludingDelimiter; - line = line.NextLine; - } while (line != null && offset < endOffset); - } - } - public bool Contains (int offset) { return new TextSegment (0, Length).Contains (offset); @@ -1976,33 +1954,6 @@ namespace Mono.TextEditor } } - Dictionary<int, IExtendingTextLineMarker> virtualTextMarkers = new Dictionary<int, IExtendingTextLineMarker> (); - public void RegisterVirtualTextMarker (int lineNumber, IExtendingTextLineMarker marker) - { - virtualTextMarkers[lineNumber] = marker; - } - - public IExtendingTextLineMarker GetExtendingTextMarker (int lineNumber) - { - IExtendingTextLineMarker result; - if (virtualTextMarkers.TryGetValue (lineNumber, out result)) - return result; - return null; - } - - /// <summary> - /// un register virtual text marker. - /// </summary> - /// <param name='marker'> - /// marker. - /// </param> - public void UnRegisterVirtualTextMarker (IExtendingTextLineMarker marker) - { - var keys = new List<int> (from pair in virtualTextMarkers where pair.Value == marker select pair.Key); - keys.ForEach (key => { virtualTextMarkers.Remove (key); CommitLineUpdate (key); }); - } - - #region Diff |