refactor: sync scroll implement

This commit is contained in:
leo 2024-06-05 20:33:33 +08:00
parent ce35a0365d
commit 0c618998b2
No known key found for this signature in database
GPG key ID: B528468E49CD0E58
3 changed files with 33 additions and 13 deletions

View file

@ -840,6 +840,15 @@ namespace SourceGit.Views
set => SetValue(UseSideBySideDiffProperty, value);
}
public static readonly StyledProperty<Vector> SyncScrollOffsetProperty =
AvaloniaProperty.Register<TextDiffView, Vector>(nameof(SyncScrollOffset));
public Vector SyncScrollOffset
{
get => GetValue(SyncScrollOffsetProperty);
set => SetValue(SyncScrollOffsetProperty, value);
}
public TextDiffView()
{
InitializeComponent();
@ -1081,7 +1090,7 @@ namespace SourceGit.Views
{
base.OnPropertyChanged(change);
if (change.Property == TextDiffProperty || change.Property == UseSideBySideDiffProperty)
if (change.Property == TextDiffProperty)
{
if (TextDiff == null)
{
@ -1090,12 +1099,30 @@ namespace SourceGit.Views
else if (UseSideBySideDiff)
{
Content = new ViewModels.TwoSideTextDiff(TextDiff);
SyncScrollOffset = TextDiff.SyncScrollOffset;
}
else
{
Content = TextDiff;
SyncScrollOffset = TextDiff.SyncScrollOffset;
}
}
else if (change.Property == UseSideBySideDiffProperty)
{
SyncScrollOffset = Vector.Zero;
if (TextDiff == null)
Content = null;
else if (UseSideBySideDiff)
Content = new ViewModels.TwoSideTextDiff(TextDiff);
else
Content = TextDiff;
}
else if (change.Property == SyncScrollOffsetProperty)
{
if (TextDiff != null)
TextDiff.SyncScrollOffset = SyncScrollOffset;
}
}
private Models.TextDiffSelection GetUnifiedSelection(int startLine, int endLine, bool isOldSide)