1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-12 13:28:33 +00:00

Fixed text selection in the debug logs view

This commit is contained in:
Diogo Trindade 2023-07-14 17:02:41 +01:00
parent 329eeb8a5c
commit a991917ea9
3 changed files with 15 additions and 37 deletions

View File

@ -2,13 +2,16 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:aedit="https://github.com/avaloniaui/avaloniaedit"
xmlns:controls="clr-namespace:Artemis.UI.Controls"
xmlns:logs="clr-namespace:Artemis.UI.Screens.Debugger.Logs"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Artemis.UI.Screens.Debugger.Logs.LogsDebugView"
x:DataType="logs:LogsDebugViewModel">
<ScrollViewer Name="LogsScrollViewer" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<SelectableTextBlock Inlines="{CompiledBinding Lines}" FontFamily="Consolas" SizeChanged="Control_OnSizeChanged"></SelectableTextBlock>
<SelectableTextBlock
Inlines="{CompiledBinding Lines}"
FontFamily="Consolas"
SizeChanged="Control_OnSizeChanged"
SelectionBrush="{StaticResource TextControlSelectionHighlightColor}"
/>
</ScrollViewer>
</UserControl>

View File

@ -10,50 +10,17 @@ namespace Artemis.UI.Screens.Debugger.Logs;
public partial class LogsDebugView : ReactiveUserControl<LogsDebugViewModel>
{
private int _lineCount;
public LogsDebugView()
{
_lineCount = 0;
InitializeComponent();
}
protected override void OnInitialized()
{
base.OnInitialized();
Dispatcher.UIThread.Post(() => LogsScrollViewer.ScrollToEnd(), DispatcherPriority.ApplicationIdle);
}
// private void OnTextChanged(object? sender, EventArgs e)
// {
// if (LogTextEditor.ExtentHeight == 0)
// return;
//
// int linesAdded = LogTextEditor.LineCount - _lineCount;
// double lineHeight = LogTextEditor.ExtentHeight / LogTextEditor.LineCount;
// double outOfScreenTextHeight = LogTextEditor.ExtentHeight - LogTextEditor.VerticalOffset - LogTextEditor.ViewportHeight;
// double outOfScreenLines = outOfScreenTextHeight / lineHeight;
//
// //we need this help distance because of rounding.
// //if we scroll slightly above the end, we still want it
// //to scroll down to the new lines.
// const double GRACE_DISTANCE = 1d;
//
// //if we were at the bottom of the log and
// //if the last log event was 5 lines long
// //we will be 5 lines out sync.
// //if this is the case, scroll down.
//
// //if we are more than that out of sync,
// //the user scrolled up and we should not
// //mess with anything.
// if (_lineCount == 0 || linesAdded + GRACE_DISTANCE > outOfScreenLines)
// {
// Dispatcher.UIThread.Post(() => LogTextEditor.ScrollToEnd(), DispatcherPriority.ApplicationIdle);
// _lineCount = LogTextEditor.LineCount;
// }
// }
private void Control_OnSizeChanged(object? sender, SizeChangedEventArgs e)
{
if (!(LogsScrollViewer.Extent.Height - LogsScrollViewer.Offset.Y - LogsScrollViewer.Bounds.Bottom <= 60))

View File

@ -7,7 +7,9 @@ using ReactiveUI;
using Serilog.Events;
using Serilog.Formatting.Display;
using System.IO;
using System.Linq;
using System.Reactive.Disposables;
using System.Text;
using Avalonia.Controls.Documents;
using Avalonia.Media;
@ -54,8 +56,14 @@ public class LogsDebugViewModel : ActivatableViewModelBase
_formatter.Format(logEvent, writer);
string line = writer.ToString();
StringBuilder builder = new();
Lines.Add(new Run(line.TrimEnd('\r', '\n') + '\n')
//hack: https://github.com/AvaloniaUI/Avalonia/issues/10913
string paddedLine2 = line.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries)
.Aggregate(builder, (sb, s) => sb.Append(s).Append(' ', 400 - s.Length).AppendLine())
.ToString();
Lines.Add(new Run(paddedLine2)
{
Foreground = logEvent.Level switch
{