protected override void OnRender(DrawingContext drawingContext) { Size renderSize = this.RenderSize; TextView textView = this.TextView; if (textView != null && textView.VisualLinesValid) { var zeroLineInfo = changeWatcher.GetChange(0); foreach (VisualLine line in textView.VisualLines) { Rect rect = new Rect(0, line.VisualTop - textView.ScrollOffset.Y - 1, 5, line.Height + 2); LineChangeInfo info = changeWatcher.GetChange(line.FirstDocumentLine.LineNumber); if (zeroLineInfo.Change == ChangeType.Deleted && line.FirstDocumentLine.LineNumber == 1 && info.Change != ChangeType.Unsaved) { info.Change = ChangeType.Modified; } switch (info.Change) { case ChangeType.None: break; case ChangeType.Added: drawingContext.DrawRectangle(AddedLineBrush, null, rect); break; case ChangeType.Deleted: case ChangeType.Modified: drawingContext.DrawRectangle(ChangedLineBrush, null, rect); break; case ChangeType.Unsaved: drawingContext.DrawRectangle(UnsavedLineBrush, null, rect); break; default: throw new Exception("Invalid value for ChangeType"); } } } }
protected override void OnRender(DrawingContext drawingContext) { Size renderSize = this.RenderSize; TextView textView = this.TextView; if (textView != null && textView.VisualLinesValid) { foreach (VisualLine line in textView.VisualLines) { Rect rect = new Rect(0, line.VisualTop - textView.ScrollOffset.Y, 5, line.Height); LineChangeInfo info = changeWatcher.GetChange(line.FirstDocumentLine.LineNumber); switch (info.Change) { case ChangeType.None: break; case ChangeType.Added: drawingContext.DrawRectangle(Brushes.LightGreen, null, rect); break; case ChangeType.Deleted: case ChangeType.Modified: drawingContext.DrawRectangle(Brushes.LightBlue, null, rect); break; case ChangeType.Unsaved: drawingContext.DrawRectangle(Brushes.Yellow, null, rect); break; default: throw new Exception("Invalid value for ChangeType"); } } } }