public BlameControl() { InitializeComponent(); InitializeComplete(); BlameAuthor.IsReadOnly = true; BlameAuthor.EnableScrollBars(false); UpdateShowLineNumbers(); BlameAuthor.HScrollPositionChanged += BlameAuthor_HScrollPositionChanged; BlameAuthor.VScrollPositionChanged += BlameAuthor_VScrollPositionChanged; BlameAuthor.MouseMove += BlameAuthor_MouseMove; BlameAuthor.MouseLeave += BlameAuthor_MouseLeave; BlameAuthor.SelectedLineChanged += SelectedLineChanged; BlameAuthor.RequestDiffView += ActiveTextAreaControlDoubleClick; BlameAuthor.EscapePressed += () => EscapePressed?.Invoke(); BlameFile.IsReadOnly = true; BlameFile.VScrollPositionChanged += BlameFile_VScrollPositionChanged; BlameFile.SelectedLineChanged += SelectedLineChanged; BlameFile.RequestDiffView += ActiveTextAreaControlDoubleClick; BlameFile.MouseMove += BlameFile_MouseMove; BlameFile.EscapePressed += () => EscapePressed?.Invoke(); CommitInfo.CommandClicked += commitInfo_CommandClicked; }
private void ProcessBlame(string filename, GitRevision revision, IReadOnlyList <ObjectId> children, Control controlToMask, int lineNumber, int scrollpos) { var avatarSize = BlameAuthor.Font.Height + 1; var(gutter, body, avatars) = BuildBlameContents(filename, avatarSize); BlameAuthor.SetGitBlameGutter(avatars); ThreadHelper.JoinableTaskFactory.RunAsync( () => BlameAuthor.ViewTextAsync("committer.txt", gutter)); ThreadHelper.JoinableTaskFactory.RunAsync( () => BlameFile.ViewTextAsync(_fileName, body)); if (lineNumber > 0) { BlameFile.GoToLine(lineNumber - 1); } else { BlameFile.VScrollPosition = scrollpos; } _clickedBlameLine = null; _blameId = revision.ObjectId; CommitInfo.SetRevisionWithChildren(revision, children); controlToMask?.UnMask(); }
private void HighlightLinesForCommit([CanBeNull] GitBlameCommit commit) { if (commit == _highlightedCommit) { return; } _highlightedCommit = commit; BlameAuthor.ClearHighlighting(); BlameFile.ClearHighlighting(); if (commit is null) { return; } int startLine = -1; int prevLine = -1; for (int i = 0; i < _blame.Lines.Count; i++) { if (ReferenceEquals(_blame.Lines[i].Commit, commit)) { if (prevLine != i - 1 && startLine != -1) { BlameAuthor.HighlightLines(startLine, prevLine, SystemColors.ControlLight); BlameFile.HighlightLines(startLine, prevLine, SystemColors.ControlLight); startLine = -1; } prevLine = i; if (startLine == -1) { startLine = i; } } } if (startLine != -1) { BlameAuthor.HighlightLines(startLine, prevLine, SystemColors.ControlLight); BlameFile.HighlightLines(startLine, prevLine, SystemColors.ControlLight); } BlameAuthor.Refresh(); BlameFile.Refresh(); }
private int GetBlameLine() { if (_blame is null) { return(-1); } Point position = BlameAuthor.PointToClient(MousePosition); int line = BlameAuthor.GetLineFromVisualPosY(position.Y); if (line >= _blame.Lines.Count) { return(-1); } return(line); }
private void BlameAuthor_VScrollPositionChanged(object sender, EventArgs e) { if (!_changingScrollPosition) { _changingScrollPosition = true; BlameFile.VScrollPosition = BlameAuthor.VScrollPosition; _changingScrollPosition = false; } Rectangle rect = BlameAuthor.ClientRectangle; rect = BlameAuthor.RectangleToScreen(rect); if (rect.Contains(MousePosition)) { Point p = BlameAuthor.PointToClient(MousePosition); var me = new MouseEventArgs(0, 0, p.X, p.Y, 0); BlameAuthor_MouseMove(null, me); } }
private void BlameAuthor_MouseMove(object sender, MouseEventArgs e) { if (!BlameFile.Focused) { BlameFile.Focus(); } if (_blame is null) { return; } _lineIndex = BlameAuthor.GetLineFromVisualPosY(e.Y); var blameCommit = _lineIndex < _blame.Lines.Count ? _blame.Lines[_lineIndex].Commit : null; HighlightLinesForCommit(blameCommit); if (blameCommit is null) { return; } int newTooltipX = splitContainer2.SplitterDistance + 60; int newTooltipY = e.Y + splitContainer1.SplitterDistance + 20; if (_tooltipCommit != blameCommit || Math.Abs(_lastTooltipX - newTooltipX) > 5 || Math.Abs(_lastTooltipY - newTooltipY) > 5) { _tooltipCommit = blameCommit; _lastTooltipX = newTooltipX; _lastTooltipY = newTooltipY; blameTooltip.Show(blameCommit.ToString(), this, newTooltipX, newTooltipY); } }