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:
parent
329eeb8a5c
commit
a991917ea9
@ -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>
|
||||
@ -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))
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user