From 882878dbe5383cc65acd3050af1c4ff955621e1d Mon Sep 17 00:00:00 2001 From: leo Date: Sat, 16 Nov 2024 18:24:37 +0800 Subject: [PATCH] refactor: text diff view go to next/prev change Signed-off-by: leo --- src/Views/TextDiffView.axaml.cs | 42 ++++++++++++++++----------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/src/Views/TextDiffView.axaml.cs b/src/Views/TextDiffView.axaml.cs index fb2693a8..bf4ffe60 100644 --- a/src/Views/TextDiffView.axaml.cs +++ b/src/Views/TextDiffView.axaml.cs @@ -516,11 +516,16 @@ namespace SourceGit.Views firstLineIdx = index; } + if (firstLineIdx <= 1) + return; + var firstLineType = lines[firstLineIdx].Type; + var prevLineType = lines[firstLineIdx - 1].Type; var isChangeFirstLine = firstLineType != Models.TextDiffLineType.Normal && firstLineType != Models.TextDiffLineType.Indicator; - if (isChangeFirstLine) + var isChangePrevLine = prevLineType != Models.TextDiffLineType.Normal && prevLineType != Models.TextDiffLineType.Indicator; + if (isChangeFirstLine && isChangePrevLine) { - for (var i = firstLineIdx - 1; i >= 0; i--) + for (var i = firstLineIdx - 2; i >= 0; i--) { var prevType = lines[i].Type; if (prevType == Models.TextDiffLineType.Normal || prevType == Models.TextDiffLineType.Indicator) @@ -530,33 +535,23 @@ namespace SourceGit.Views } } } - else + + var findChange = false; + for (var i = firstLineIdx - 1; i >= 0; i--) { - var prevChangeEnd = -1; - for (var i = firstLineIdx - 1; i >= 0; i--) + var prevType = lines[i].Type; + if (prevType == Models.TextDiffLineType.Normal || prevType == Models.TextDiffLineType.Indicator) { - var prevType = lines[i].Type; - if (prevType == Models.TextDiffLineType.None || - prevType == Models.TextDiffLineType.Added || - prevType == Models.TextDiffLineType.Deleted) - { - prevChangeEnd = i; - break; - } - } - - if (prevChangeEnd <= 0) - return; - - for (var i = prevChangeEnd - 1; i >= 0; i--) - { - var prevType = lines[i].Type; - if (prevType == Models.TextDiffLineType.Normal || prevType == Models.TextDiffLineType.Indicator) + if (findChange) { ScrollToLine(i + 2); return; } } + else if (!findChange) + { + findChange = true; + } } } @@ -578,6 +573,9 @@ namespace SourceGit.Views lastLineIdx = index; } + if (lastLineIdx >= lines.Count - 1) + return; + var lastLineType = lines[lastLineIdx].Type; var findNormalLine = lastLineType == Models.TextDiffLineType.Normal || lastLineType == Models.TextDiffLineType.Indicator; for (var idx = lastLineIdx + 1; idx < lines.Count; idx++)