提交 321e236b 编写于 作者: A Andrew Casey

Merge pull request #5280 from amcasey/ReadonlyCleanup

Tracking span and readonly region cleanup
......@@ -17,10 +17,10 @@ internal sealed class CustomTrackingSpan : ITrackingSpan
private readonly ITrackingPoint _start;
private readonly ITrackingPoint _end;
public CustomTrackingSpan(ITextSnapshot snapshot, Span span, PointTrackingMode startTrackingMode, PointTrackingMode endTrackingMode)
public CustomTrackingSpan(ITextSnapshot snapshot, Span span, bool canAppend = false)
{
_start = snapshot.CreateTrackingPoint(span.Start, startTrackingMode);
_end = snapshot.CreateTrackingPoint(span.End, endTrackingMode);
_start = snapshot.CreateTrackingPoint(span.Start, PointTrackingMode.Negative);
_end = snapshot.CreateTrackingPoint(span.End, canAppend ? PointTrackingMode.Positive : PointTrackingMode.Negative);
}
#region ITrackingSpan Members
......
......@@ -427,7 +427,7 @@ private void MakeStandardInputReadonly()
// replace previous span w/ a span that won't grow...
var oldSpan = sourceSpans[index];
var newSpan = new CustomTrackingSpan(oldSpan.Snapshot, oldSpan.Span, PointTrackingMode.Negative, PointTrackingMode.Negative);
var newSpan = new CustomTrackingSpan(oldSpan.Snapshot, oldSpan.Span);
ReplaceProjectionSpan(index, newSpan);
ApplyProtection(StandardInputBuffer, _standardInputProtection, allowAppend: true);
......@@ -671,8 +671,7 @@ private void AppendInput(string text)
var replSpan = new CustomTrackingSpan(
buffer.CurrentSnapshot,
new Span(span.Start, span.Length + text.Length),
PointTrackingMode.Negative,
PointTrackingMode.Positive);
canAppend: true);
ReplaceProjectionSpan(spanCount - 1, replSpan);
TextView.Caret.EnsureVisible();
......@@ -884,9 +883,7 @@ private void NewOutputBuffer()
Debug.Assert(GetSpanKind(sourceSpan) == ReplSpanKind.Output);
var nonGrowingSpan = new CustomTrackingSpan(
sourceSpan.Snapshot,
sourceSpan.Span,
PointTrackingMode.Negative,
PointTrackingMode.Negative);
sourceSpan.Span);
ReplaceProjectionSpan(_currentOutputProjectionSpan, nonGrowingSpan);
AppendNewOutputProjectionBuffer();
......@@ -899,8 +896,7 @@ private void AppendNewOutputProjectionBuffer()
var trackingSpan = new CustomTrackingSpan(
currentSnapshot,
new Span(currentSnapshot.Length, 0),
PointTrackingMode.Negative,
PointTrackingMode.Positive);
canAppend: true);
_currentOutputProjectionSpan = AppendProjectionSpan(trackingSpan);
}
......@@ -1330,8 +1326,7 @@ private void AddLanguageBuffer()
var languageSpan = new CustomTrackingSpan(
CurrentLanguageBuffer.CurrentSnapshot,
new Span(0, 0),
PointTrackingMode.Negative,
PointTrackingMode.Positive);
canAppend: true);
// projection buffer update must be the last operation as it might trigger event that accesses prompt line mapping:
AppendProjectionSpans(promptSpan, languageSpan);
......@@ -1590,7 +1585,7 @@ private object CreateTrackingSpan(SnapshotSpan snapshotSpan)
{
return snapshotSpan.GetText();
}
return new CustomTrackingSpan(snapshot, snapshotSpan.Span, PointTrackingMode.Negative, PointTrackingMode.Negative);
return new CustomTrackingSpan(snapshot, snapshotSpan.Span);
}
private ITrackingSpan CreateLanguageSpanForLine(ITextSnapshotLine languageLine)
......@@ -1600,8 +1595,7 @@ private ITrackingSpan CreateLanguageSpanForLine(ITextSnapshotLine languageLine)
return new CustomTrackingSpan(
CurrentLanguageBuffer.CurrentSnapshot,
span,
PointTrackingMode.Negative,
lastLine ? PointTrackingMode.Positive : PointTrackingMode.Negative);
canAppend: lastLine);
}
private void ScrollToCaret()
......@@ -2562,8 +2556,7 @@ private void AddStandardInputSpan()
var inputSpan = new CustomTrackingSpan(
currentSnapshot,
new Span(currentSnapshot.Length, 0),
PointTrackingMode.Negative,
PointTrackingMode.Positive);
canAppend: true);
AppendProjectionSpans(promptSpan, inputSpan);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册