LineSeparatorElement TryCreateLineSeparatorElement(SnapshotSpan span, ILineSeparatorTag tag) { if (tag == null) { return(null); } var line = wpfTextView.TextViewLines.GetTextViewLineContainingBufferPosition(span.Start.TranslateTo(wpfTextView.TextSnapshot, PointTrackingMode.Negative)); if (line == null) { return(null); } if (tag.IsPhysicalLine) { while (!line.IsLastTextViewLineForSnapshotLine) { line = wpfTextView.TextViewLines.GetTextViewLineContainingBufferPosition(line.GetPointAfterLineBreak()); if (line == null) { return(null); } } } // Only one line separator per line var lineIdentityTag = line.IdentityTag; if (usedLines.Contains(lineIdentityTag)) { return(null); } double yBottom = line.TextBottom + 1; var elem = new LineSeparatorElement(new SnapshotSpan(line.Extent.Start, 0), yBottom, wpfTextView.ViewportWidth, lineSeparatorBrush, lineIdentityTag); Canvas.SetTop(elem, elem.Y); return(elem); }
LineSeparatorElement TryCreateLineSeparatorElement(SnapshotSpan span, ILineSeparatorTag tag) { if (tag == null) return null; var line = wpfTextView.TextViewLines.GetTextViewLineContainingBufferPosition(span.Start.TranslateTo(wpfTextView.TextSnapshot, PointTrackingMode.Negative)); if (line == null) return null; if (tag.IsPhysicalLine) { while (!line.IsLastTextViewLineForSnapshotLine) { line = wpfTextView.TextViewLines.GetTextViewLineContainingBufferPosition(line.GetPointAfterLineBreak()); if (line == null) return null; } } // Only one line separator per line var lineIdentityTag = line.IdentityTag; if (usedLines.Contains(lineIdentityTag)) return null; double yBottom = line.TextBottom + 1; var elem = new LineSeparatorElement(new SnapshotSpan(line.Extent.Start, 0), yBottom, wpfTextView.ViewportWidth, lineSeparatorBrush, lineIdentityTag); Canvas.SetTop(elem, elem.Y); return elem; }