private static void DrawContentDiff(DiffTextEditorHelper.PerLineDrawArgs args) { if (args.DiffLine.ContentDiffs == null) return; var brush = args.DiffLine.LineType == DiffLine.LineTypes.Add ? Constants.HighlightAddBackground : Constants.HighlightRemoveBackground; args.DiffLine.ContentDiffs.SelectMany(d => BackgroundGeometryBuilder.GetRectsFromVisualSegment( args.TextView, args.VisualLine, d.StartIndex, d.EndIndex) ) .ForEach(r => { using(new GuidelineSetBlock(args.DrawingContext, r)) args.DrawingContext.DrawRectangle(brush, null, r); }); }
private static void DrawForegroundLeft(DiffTextEditorHelper.PerLineDrawArgs args) { if (args.Index == 0) DrawIndex(args.DrawingContext, args.Rect, args.DiffLine); }
private static void DrawForeground(DiffTextEditorHelper.PerLineDrawArgs args) { if (_gridPen == null) { var presentationSource = PresentationSource.FromVisual(args.TextView); if (presentationSource?.CompositionTarget != null) { var m = presentationSource.CompositionTarget.TransformToDevice; _gridPen = new Pen(Constants.FrameBrush, 1 / m.M11); // 物理ピクセルで1 _gridPen.Freeze(); } Debug.Assert(_gridPen != null); } var halfPenWidth = _gridPen.Thickness * 0.5; using (new GuidelineSetBlock( args.DrawingContext, xGuides: new[] { NewIndexOffset + halfPenWidth, LineTypeIndexOffset + halfPenWidth })) { args.DrawingContext.DrawLine( _gridPen, new Point(NewIndexOffset, args.Rect.Top - 1), new Point(NewIndexOffset, args.Rect.Bottom + 1)); args.DrawingContext.DrawLine( _gridPen, new Point(LineTypeIndexOffset, args.Rect.Top - 1), new Point(LineTypeIndexOffset, args.Rect.Bottom + 1)); } if (args.Index == 0) DrawFileTypeMark(args.DrawingContext, args.Rect, args.DiffLine); }