From 22504112762f06c5b027a165a3b1e552478b1bf2 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 23 Jul 2024 15:13:53 +0200 Subject: [PATCH] Fixed console scrolling --- BeefTools/BeefCon/src/Program.bf | 8 ++++++-- IDE/src/ui/ConsolePanel.bf | 11 ++++++----- IDE/src/util/ConsoleProvider.bf | 30 ++++++++++++++++++++++++++---- 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/BeefTools/BeefCon/src/Program.bf b/BeefTools/BeefCon/src/Program.bf index 23b7a2a7..3f69de14 100644 --- a/BeefTools/BeefCon/src/Program.bf +++ b/BeefTools/BeefCon/src/Program.bf @@ -99,6 +99,12 @@ class Program int32 row = GET!(ptr); int32 dy = GET!(ptr); mProvider.MouseWheel(col, row, dy); + case .ScrollTo: + int32 row = GET!(ptr); + mProvider.ScrollTo(row); + case .Update: + bool paused = GET!(ptr); + mProvider.Update(paused); default: } case .Err(let err): @@ -126,8 +132,6 @@ class Program while (true) { - mProvider.Update(); - var process = Platform.BfpProcess_GetById(null, mPid, null); if (process == null) { diff --git a/IDE/src/ui/ConsolePanel.bf b/IDE/src/ui/ConsolePanel.bf index ca3675c4..884f1f0d 100644 --- a/IDE/src/ui/ConsolePanel.bf +++ b/IDE/src/ui/ConsolePanel.bf @@ -406,6 +406,10 @@ class ConsolePanel : Panel } } + float wantViewSize = Math.Max(mConsoleProvider.BufferHeight * mCellHeight, mHeight); + if (mView.mHeight != wantViewSize) + ResizeComponents(); + if (mScrollableWidget.mVertScrollbar.mThumb.mMouseDown) { Paused = true; @@ -425,11 +429,8 @@ class ConsolePanel : Panel else mPauseCB.Label = "Paused"; - if (!Paused) - { - if (mConsoleProvider.Update() case .Dirty) - MarkDirty(); - } + if (mConsoleProvider.Update(Paused) case .Dirty) + MarkDirty(); /*if (mScreenInfo != null) { diff --git a/IDE/src/util/ConsoleProvider.bf b/IDE/src/util/ConsoleProvider.bf index 08cf3dc8..4fa429c1 100644 --- a/IDE/src/util/ConsoleProvider.bf +++ b/IDE/src/util/ConsoleProvider.bf @@ -112,7 +112,7 @@ class ConsoleProvider } - public virtual UpdateState Update() => .None; + public virtual UpdateState Update(bool paused) => .None; public virtual uint32 GetColor(int i) => 0xFF000000; } @@ -752,8 +752,11 @@ class WinNativeConsoleProvider : ConsoleProvider } } - public override UpdateState Update() + public override UpdateState Update(bool paused) { + if (paused) + return .None; + ScreenInfo newScreenInfo = new .(); if (GetScreenInfo(newScreenInfo)) { @@ -802,7 +805,9 @@ class BeefConConsoleProvider : ConsoleProvider MouseDown, MouseMove, MouseUp, - MouseWheel + MouseWheel, + ScrollTo, + Update } public class Pipe @@ -1070,7 +1075,7 @@ class BeefConConsoleProvider : ConsoleProvider *((T*)(ptr += sizeof(T)) - 1) } - public override UpdateState Update() + public override UpdateState Update(bool paused) { if (!mAttached) return .None; @@ -1100,6 +1105,13 @@ class BeefConConsoleProvider : ConsoleProvider Resize(mResizedWidth, mResizedHeight, false); } + if (!paused) + { + mPipe.StartMessage(.Update); + mPipe.Stream.Write(paused); + mPipe.EndMessage(); + } + mPipe.StartMessage(.GetData); mPipe.EndMessage(); @@ -1171,6 +1183,16 @@ class BeefConConsoleProvider : ConsoleProvider mPipe.EndMessage(); } + public override void ScrollTo(int row) + { + if (row == mScrollTop) + return; + mScrollTop = (.)row; + mPipe.StartMessage(.ScrollTo); + mPipe.Stream.Write((int32)row); + mPipe.EndMessage(); + } + public override void KeyDown(KeyCode keyCode, KeyFlags keyFlags) { mPipe.StartMessage(.KeyDown);