protected override void OnPointerReleased(PointerReleasedEventArgs e) { previewPointVisible = true; var textView = TextView; var offset = _editor.GetOffsetFromPoint(e.GetPosition(this)); if (offset != -1) { var lineClicked = -1; lineClicked = textView.Document.GetLineByOffset(offset).LineNumber; // convert from text line to visual line. var currentBreakPoint = _manager.OfType <Breakpoint>().FirstOrDefault(bp => bp.FileName == _editor.Editor.SourceFile.FilePath && bp.Line == lineClicked) as BreakEvent; if (currentBreakPoint != null) { _manager.Remove(currentBreakPoint); } else { if (!string.IsNullOrEmpty(_editor.Editor.SourceFile.FilePath)) { _manager.Add(_editor.Editor.SourceFile.FilePath, lineClicked); } } } InvalidateVisual(); }
public override void Render(DrawingContext context) { if (TextView.VisualLinesValid) { context.FillRectangle(ColorTheme.CurrentTheme.EditorBackground, Bounds); context.DrawLine(new Pen(ColorTheme.CurrentTheme.ControlHigh, 0.5), Bounds.TopRight, Bounds.BottomRight); if (TextView.VisualLines.Count > 0) { var firstLine = TextView.VisualLines.FirstOrDefault(); var height = firstLine.Height; Width = height; var textView = TextView; foreach (var breakPoint in _manager?.OfType <Breakpoint>().Where(bp => bp.FileName.IsSamePathAs(_editor.Editor.SourceFile.FilePath))) { var visualLine = TextView.VisualLines.FirstOrDefault(vl => vl.FirstDocumentLine.LineNumber == breakPoint.Line); if (visualLine != null) { context.FillRectangle(Brush.Parse("#FF3737"), new Rect((Bounds.Size.Width / 4) - 1, visualLine.GetTextLineVisualYPosition(visualLine.TextLines[0], AvaloniaEdit.Rendering.VisualYPosition.LineTop) + (Bounds.Size.Width / 4) - TextView.VerticalOffset, Bounds.Size.Width / 1.5, height / 1.5), (float)height); } } if (previewPointVisible) { var visualLine = TextView.VisualLines.FirstOrDefault(vl => vl.FirstDocumentLine.LineNumber == previewLine); if (visualLine != null) { context.FillRectangle(Brush.Parse("#E67466"), new Rect((Bounds.Size.Width / 4) - 1, visualLine.GetTextLineVisualYPosition(visualLine.TextLines[0], AvaloniaEdit.Rendering.VisualYPosition.LineTop) + (Bounds.Size.Width / 4) - TextView.VerticalOffset, Bounds.Size.Width / 1.5, height / 1.5), (float)height); } } } } }