ux: use a new resource Brush.Diff.BlockBorderHighlight to highlight current block in text diff view (#2113)

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo
2026-02-10 11:43:46 +08:00
parent 1d38c9d89c
commit 6f7b284f56
3 changed files with 24 additions and 10 deletions

View File

@@ -27,6 +27,7 @@
<Color x:Key="Color.Diff.DeletedBG">#80FF9797</Color>
<Color x:Key="Color.Diff.AddedHighlight">#A7E1A7</Color>
<Color x:Key="Color.Diff.DeletedHighlight">#F19B9D</Color>
<Color x:Key="Color.Diff.BlockBorderHighlight">DarkCyan</Color>
<Color x:Key="Color.Link">#0000EE</Color>
<Color x:Key="Color.InlineCode">#FFE4E4E4</Color>
<Color x:Key="Color.InlineCodeFG">Black</Color>
@@ -59,6 +60,7 @@
<Color x:Key="Color.Diff.DeletedBG">#C0633F3E</Color>
<Color x:Key="Color.Diff.AddedHighlight">#A0308D3C</Color>
<Color x:Key="Color.Diff.DeletedHighlight">#A09F4247</Color>
<Color x:Key="Color.Diff.BlockBorderHighlight">DarkCyan</Color>
<Color x:Key="Color.Link">#4DAAFC</Color>
<Color x:Key="Color.InlineCode">#FF383838</Color>
<Color x:Key="Color.InlineCodeFG">#FFF0F0F0</Color>
@@ -93,6 +95,7 @@
<SolidColorBrush x:Key="Brush.Diff.DeletedBG" Color="{DynamicResource Color.Diff.DeletedBG}"/>
<SolidColorBrush x:Key="Brush.Diff.AddedHighlight" Color="{DynamicResource Color.Diff.AddedHighlight}"/>
<SolidColorBrush x:Key="Brush.Diff.DeletedHighlight" Color="{DynamicResource Color.Diff.DeletedHighlight}"/>
<SolidColorBrush x:Key="Brush.Diff.BlockBorderHighlight" Color="{DynamicResource Color.Diff.BlockBorderHighlight}"/>
<SolidColorBrush x:Key="Brush.Link" Color="{DynamicResource Color.Link}"/>
<SolidColorBrush x:Key="Brush.InlineCode" Color="{DynamicResource Color.InlineCode}"/>
<SolidColorBrush x:Key="Brush.InlineCodeFG" Color="{DynamicResource Color.InlineCodeFG}"/>

View File

@@ -23,6 +23,7 @@
AddedHighlightBrush="{DynamicResource Brush.Diff.AddedHighlight}"
DeletedHighlightBrush="{DynamicResource Brush.Diff.DeletedHighlight}"
IndicatorForeground="{DynamicResource Brush.FG2}"
BlockBorderHighlightBrush="{DynamicResource Brush.Diff.BlockBorderHighlight}"
FontFamily="{DynamicResource Fonts.Monospace}"
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=EditorFontSize}"
TabWidth="{Binding Source={x:Static vm:Preferences.Instance}, Path=EditorTabWidth}"
@@ -54,6 +55,7 @@
AddedHighlightBrush="{DynamicResource Brush.Diff.AddedHighlight}"
DeletedHighlightBrush="{DynamicResource Brush.Diff.DeletedHighlight}"
IndicatorForeground="{DynamicResource Brush.FG2}"
BlockBorderHighlightBrush="{DynamicResource Brush.Diff.BlockBorderHighlight}"
FontFamily="{DynamicResource Fonts.Monospace}"
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=EditorFontSize}"
TabWidth="{Binding Source={x:Static vm:Preferences.Instance}, Path=EditorTabWidth}"
@@ -76,6 +78,7 @@
AddedHighlightBrush="{DynamicResource Brush.Diff.AddedHighlight}"
DeletedHighlightBrush="{DynamicResource Brush.Diff.DeletedHighlight}"
IndicatorForeground="{DynamicResource Brush.FG2}"
BlockBorderHighlightBrush="{DynamicResource Brush.Diff.BlockBorderHighlight}"
FontFamily="{DynamicResource Fonts.Monospace}"
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=EditorFontSize}"
TabWidth="{Binding Source={x:Static vm:Preferences.Instance}, Path=EditorTabWidth}"

View File

@@ -216,8 +216,7 @@ namespace SourceGit.Views
return;
var changeBlock = _presenter.BlockNavigation.GetCurrentBlock();
var changeBlockBG = new SolidColorBrush(Colors.Gray, 0.25);
var changeBlockFG = new Pen(Brushes.Gray);
var changeBlockBorder = new Pen(_presenter.BlockBorderHighlightBrush);
var lines = _presenter.GetLines();
var width = textView.Bounds.Width;
@@ -279,14 +278,14 @@ namespace SourceGit.Views
}
}
if (changeBlock != null && changeBlock.Contains(index))
{
drawingContext.DrawRectangle(changeBlockBG, null, new Rect(0, startY, width, endY - startY));
if (index == changeBlock.Start)
drawingContext.DrawLine(changeBlockFG, new Point(0, startY), new Point(width, startY));
if (index == changeBlock.End)
drawingContext.DrawLine(changeBlockFG, new Point(0, endY), new Point(width, endY));
}
if (changeBlock == null)
continue;
if (index == changeBlock.Start)
drawingContext.DrawLine(changeBlockBorder, new Point(0, startY), new Point(width, startY));
if (index == changeBlock.End)
drawingContext.DrawLine(changeBlockBorder, new Point(0, endY), new Point(width, endY));
}
}
@@ -406,6 +405,15 @@ namespace SourceGit.Views
set => SetValue(IndicatorForegroundProperty, value);
}
public static readonly StyledProperty<IBrush> BlockBorderHighlightBrushProperty =
AvaloniaProperty.Register<ThemedTextDiffPresenter, IBrush>(nameof(BlockBorderHighlightBrush), Brushes.Gray);
public IBrush BlockBorderHighlightBrush
{
get => GetValue(BlockBorderHighlightBrushProperty);
set => SetValue(BlockBorderHighlightBrushProperty, value);
}
public static readonly StyledProperty<bool> UseSyntaxHighlightingProperty =
AvaloniaProperty.Register<ThemedTextDiffPresenter, bool>(nameof(UseSyntaxHighlighting));