From d32c8212a9726690e8647826124c0ee8a749627c Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Thu, 25 Jul 2024 11:12:43 +0200 Subject: [PATCH] Console fixes --- BeefLibs/Beefy2D/src/widgets/KeyCode.bf | 3 ++- IDE/src/ui/ConsolePanel.bf | 11 +++++++---- IDE/src/util/ConsoleProvider.bf | 24 +++++++++++++++--------- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/BeefLibs/Beefy2D/src/widgets/KeyCode.bf b/BeefLibs/Beefy2D/src/widgets/KeyCode.bf index fb1ff746..42d2fe62 100644 --- a/BeefLibs/Beefy2D/src/widgets/KeyCode.bf +++ b/BeefLibs/Beefy2D/src/widgets/KeyCode.bf @@ -126,7 +126,8 @@ namespace Beefy.widgets .RWin, .Alt, .Control, - .Command: + .Command, + .Shift: return true; default: return false; diff --git a/IDE/src/ui/ConsolePanel.bf b/IDE/src/ui/ConsolePanel.bf index 022179fe..b82dc7d0 100644 --- a/IDE/src/ui/ConsolePanel.bf +++ b/IDE/src/ui/ConsolePanel.bf @@ -740,11 +740,14 @@ class ConsolePanel : Panel public void SysKeyDown(KeyDownEvent keyEvent) { - if (Paused) + if (!keyEvent.mKeyCode.IsModifier) { - mSelection = null; - Paused = false; - return; + if (Paused) + { + mSelection = null; + Paused = false; + return; + } } if (mView.mHasFocus) diff --git a/IDE/src/util/ConsoleProvider.bf b/IDE/src/util/ConsoleProvider.bf index 9e485ab7..9cb2719e 100644 --- a/IDE/src/util/ConsoleProvider.bf +++ b/IDE/src/util/ConsoleProvider.bf @@ -340,13 +340,16 @@ class WinNativeConsoleProvider : ConsoleProvider { get { +#if BF_PLATFORM_WINDOWS var outHandle = Console.[Friend]GetStdHandle(Console.STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFOEX info = default; info.mSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX); -#if BF_PLATFORM_WINDOWS - GetConsoleScreenBufferInfoEx(outHandle, ref info); + if (GetConsoleScreenBufferInfoEx(outHandle, ref info)) + return info.mHeight; #endif - return info.mHeight; + if (mScreenInfo != null) + return mScreenInfo.mInfo.mHeight; + return 0; } } public override bool Attached => mHasConsole; @@ -386,16 +389,19 @@ class WinNativeConsoleProvider : ConsoleProvider if (mScreenInfo.mFullCharInfo != null) { int bufRow = row + mScreenInfo.mScrollTop; - if (col >= mScreenInfo.mInfo.mWidth) + int idx = bufRow * mScreenInfo.mInfo.mWidth + col; + int maxIdx = (int)mScreenInfo.mInfo.mWidth * mScreenInfo.mInfo.mHeight; + if ((idx < 0) || (idx >= maxIdx)) return default; - if (bufRow >= mScreenInfo.mInfo.mHeight) - return default; - - var info = mScreenInfo.mFullCharInfo[bufRow * mScreenInfo.mInfo.mWidth + col]; + var info = mScreenInfo.mFullCharInfo[idx]; return .() { mChar = info.mChar, mAttributes = info.mAttributes }; } - var info = mScreenInfo.mCharInfo[row * mScreenInfo.mInfo.mWindowRect.Width + col]; + int idx = row * mScreenInfo.mInfo.mWindowRect.Width + col; + int maxIdx = (int)mScreenInfo.mInfo.mWindowRect.Width * mScreenInfo.mInfo.mWindowRect.Height; + if ((idx < 0) || (idx >= maxIdx)) + return default; + var info = mScreenInfo.mCharInfo[idx]; return .() { mChar = info.mChar, mAttributes = info.mAttributes }; }