Skip to content

Commit 2a15e49

Browse files
committed
enhance: auto hide scrollbar in hex-viewer
Signed-off-by: leo <longshuang@msn.cn>
1 parent 38d58f5 commit 2a15e49

4 files changed

Lines changed: 37 additions & 23 deletions

File tree

‎src/Views/BinaryFileViewer.axaml‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,10 @@
7474
<ContentControl x:Name="ContentPanel" Margin="8,4,0,4" Content="{Binding Content, Mode=OneWay}">
7575
<ContentControl.DataTemplates>
7676
<DataTemplate DataType="m:BinaryFile">
77-
<Grid ColumnDefinitions="*,Auto" Background="Transparent" PointerWheelChanged="OnContentPointerWheelChanged">
77+
<Grid ColumnDefinitions="*,Auto"
78+
Background="Transparent"
79+
PointerWheelChanged="OnContentPointerWheelChanged"
80+
SizeChanged="OnContentSizeChanged">
7881
<v:HexViewer Grid.Column="0"
7982
Foreground="{DynamicResource Brush.FG1}"
8083
HeaderForeground="{DynamicResource Brush.Accent}"
@@ -85,8 +88,7 @@
8588
Orientation="Vertical"
8689
AllowAutoHide="False"
8790
SmallChange="18"
88-
ValueChanged="OnScrollBarValueChanged"
89-
SizeChanged="OnScrollBarSizeChanged"/>
91+
ValueChanged="OnScrollBarValueChanged"/>
9092
</Grid>
9193
</DataTemplate>
9294
</ContentControl.DataTemplates>

‎src/Views/BinaryFileViewer.axaml.cs‎

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -332,31 +332,43 @@ private void OnContentPointerWheelChanged(object sender, PointerWheelEventArgs e
332332
return;
333333

334334
var scroller = grid.FindDescendantOfType<ScrollBar>();
335-
if (scroller == null)
335+
if (scroller == null || !scroller.IsVisible)
336336
return;
337337

338338
scroller.Value -= e.Delta.Y * HexViewer.LINE_HEIGHT;
339339
}
340340

341-
private void OnScrollBarValueChanged(object sender, RangeBaseValueChangedEventArgs e)
341+
private void OnContentSizeChanged(object sender, SizeChangedEventArgs e)
342342
{
343-
if (sender is ScrollBar scroller)
343+
if (sender is not Grid { DataContext: Models.BinaryFile file } grid)
344+
return;
345+
346+
var scroller = grid.FindDescendantOfType<ScrollBar>();
347+
if (scroller == null)
348+
return;
349+
350+
var viewport = grid.Bounds.Height - HexViewer.HEADER_HEIGHT;
351+
var max = Math.Ceiling(file.Size * 1.0 / HexViewer.BYTES_PER_LINE) * HexViewer.LINE_HEIGHT - viewport;
352+
353+
if (max <= 0)
344354
{
345-
var viewer = this.FindDescendantOfType<HexViewer>();
346-
if (viewer != null)
347-
viewer.Offset = (long)(Math.Ceiling(scroller.Value / HexViewer.LINE_HEIGHT) * HexViewer.BYTES_PER_LINE);
355+
scroller.IsVisible = false;
356+
}
357+
else
358+
{
359+
scroller.IsVisible = true;
360+
scroller.ViewportSize = viewport;
361+
scroller.Maximum = max;
348362
}
349363
}
350364

351-
private void OnScrollBarSizeChanged(object sender, SizeChangedEventArgs e)
365+
private void OnScrollBarValueChanged(object sender, RangeBaseValueChangedEventArgs e)
352366
{
353-
if (sender is ScrollBar { DataContext: Models.BinaryFile file } scroller)
367+
if (sender is ScrollBar scroller)
354368
{
355-
var viewport = scroller.Bounds.Height;
356-
var max = Math.Ceiling(file.Size / (double)HexViewer.BYTES_PER_LINE) * HexViewer.LINE_HEIGHT - viewport;
357-
358-
scroller.ViewportSize = viewport;
359-
scroller.Maximum = Math.Max(viewport, max);
369+
var viewer = this.FindDescendantOfType<HexViewer>();
370+
if (viewer != null)
371+
viewer.Offset = (long)(Math.Ceiling(scroller.Value / HexViewer.LINE_HEIGHT) * HexViewer.BYTES_PER_LINE);
360372
}
361373
}
362374

@@ -383,11 +395,11 @@ private void OnGotoAddressTextChanged(object sender, TextChangedEventArgs e)
383395
return;
384396

385397
var scroller = ContentPanel.FindDescendantOfType<ScrollBar>();
386-
if (scroller == null)
387-
return;
388-
389-
var offset = Math.Floor(idx / (double)HexViewer.BYTES_PER_LINE) * HexViewer.LINE_HEIGHT - (scroller.ViewportSize * 0.5);
390-
scroller.Value = Math.Max(0, offset);
398+
if (scroller is { IsVisible: true })
399+
{
400+
var offset = Math.Floor(idx * 1.0 / HexViewer.BYTES_PER_LINE) * HexViewer.LINE_HEIGHT - (scroller.ViewportSize * 0.5);
401+
scroller.Value = Math.Max(0, offset);
402+
}
391403

392404
var viewer = this.FindDescendantOfType<HexViewer>(false);
393405
viewer?.SetHighlightedIndex(idx);

‎src/Views/DiffView.axaml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@
252252
HorizontalAlignment="Center"
253253
Content="{DynamicResource Text.Diff.Binary.ViewContentOfNew}"
254254
IsVisible="{Binding NewSize, Mode=OneWay, Converter={x:Static c:LongConverters.IsGreaterThanZero}}"
255-
Click="OnOpenStandaloneHexEditor"/>
255+
Click="OnOpenBinaryFileViewer"/>
256256
</StackPanel>
257257
</DataTemplate>
258258

‎src/Views/DiffView.axaml.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ private void OnOpenSubmoduleRevisionCompare(object sender, RoutedEventArgs e)
8585
}
8686
}
8787

88-
private async void OnOpenStandaloneHexEditor(object sender, RoutedEventArgs e)
88+
private async void OnOpenBinaryFileViewer(object sender, RoutedEventArgs e)
8989
{
9090
if (sender is Button { DataContext: Models.BinaryDiff diff } && diff.NewSize > 0)
9191
{

0 commit comments

Comments
 (0)