From 562b565f49c8f48e16c32c64667e8b67feca93d6 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Mon, 4 May 2020 11:44:43 -0700 Subject: [PATCH] Made Free Cursor Movement a setting (default false) --- BeefLibs/Beefy2D/src/widgets/EditWidget.bf | 40 ++++++++++------------ IDE/src/Settings.bf | 3 ++ IDE/src/ui/SettingsDialog.bf | 1 + IDE/src/ui/SourceEditWidgetContent.bf | 23 +++++++++++++ 4 files changed, 45 insertions(+), 22 deletions(-) diff --git a/BeefLibs/Beefy2D/src/widgets/EditWidget.bf b/BeefLibs/Beefy2D/src/widgets/EditWidget.bf index 050da2fc..32be402d 100644 --- a/BeefLibs/Beefy2D/src/widgets/EditWidget.bf +++ b/BeefLibs/Beefy2D/src/widgets/EditWidget.bf @@ -739,6 +739,7 @@ namespace Beefy.widgets StartSelection(); MoveCursorToCoord(x, y); + ClampCursor(); //PrintF("~TestStruct() %d\n", mInner.mVal1); @@ -808,6 +809,7 @@ namespace Beefy.widgets if ((mMouseDown) && (mMouseFlags == .Left)) { MoveCursorToCoord(x, y); + ClampCursor(); SelectToCursor(); } } @@ -2151,7 +2153,10 @@ namespace Beefy.widgets CursorLineAndColumn = LineAndColumn(lineAndColumn.mLine, lineAndColumn.mColumn + 1); EnsureCursorVisible(true, false, false); CursorMoved(); - break; + + ClampCursor(); + if (lineAndColumn != CursorLineAndColumn) + break; } } @@ -2223,8 +2228,6 @@ namespace Beefy.widgets if (mWidgetWindow.IsKeyDown(KeyCode.Control)) { - //mEditWidget.Resize(mEditWidget.mX, mEditWidget.mY, mEditWidget.mWidth, mEditWidget.mHeight + aDir); - mEditWidget.VertScrollTo(mEditWidget.mVertPos.mDest + aDir * mEditWidget.mScrollContentContainer.mHeight * 0.25f); EnsureCursorVisible(false); return; @@ -2238,30 +2241,23 @@ namespace Beefy.widgets float cursorX; float cursorY; GetTextCoordAtCursor(out cursorX, out cursorY); - mCursorWantX = cursorX; + //mCursorWantX = cursorX; } - //if (!mAllowVirtualCursor) - { - lineIdx += aDir; + lineIdx += aDir; - float wantedX = mCursorWantX; + float wantedX = mCursorWantX; - float aX; - float aY; - GetTextCoordAtLineChar(lineIdx, 0, out aX, out aY); - MoveCursorToCoord(mCursorWantX, aY); + float aX; + float aY; + GetTextCoordAtLineChar(lineIdx, 0, out aX, out aY); + MoveCursorToCoord(mCursorWantX, aY); - // Restore old desired X - mCursorWantX = wantedX; - } - /*else - { - mCursorBlinkTicks = 0; - var prevLineAndColumn = CursorLineAndColumn; - CursorLineAndColumn = LineAndColumn(Math.Max(0, prevLineAndColumn.mLine + aDir), prevLineAndColumn.mColumn); - CursorMoved(); - }*/ + ClampCursor(); + + // Restore old desired X + mCursorWantX = wantedX; + } if (didSelectionMove) diff --git a/IDE/src/Settings.bf b/IDE/src/Settings.bf index 1e0095e2..0a6c88c4 100644 --- a/IDE/src/Settings.bf +++ b/IDE/src/Settings.bf @@ -318,6 +318,7 @@ namespace IDE public bool mPerforceAutoCheckout = true; public bool mSpellCheckEnabled = true; public bool mShowLineNumbers = true; + public bool mFreeCursorMovement; public void Serialize(StructuredData sd) { @@ -338,6 +339,7 @@ namespace IDE sd.Add("PerforceAutoCheckout", mPerforceAutoCheckout); sd.Add("SpellCheckEnabled", mSpellCheckEnabled); sd.Add("ShowLineNumbers", mShowLineNumbers); + sd.Add("FreeCursorMovement", mFreeCursorMovement); using (sd.CreateObject("Colors")) mColors.Serialize(sd); @@ -364,6 +366,7 @@ namespace IDE sd.Get("PerforceAutoCheckout", ref mPerforceAutoCheckout); sd.Get("SpellCheckEnabled", ref mSpellCheckEnabled); sd.Get("ShowLineNumbers", ref mShowLineNumbers); + sd.Get("FreeCursorMovement", ref mFreeCursorMovement); using (sd.Open("Colors")) mColors.Deserialize(sd); diff --git a/IDE/src/ui/SettingsDialog.bf b/IDE/src/ui/SettingsDialog.bf index f4f9b646..6dbb80e9 100644 --- a/IDE/src/ui/SettingsDialog.bf +++ b/IDE/src/ui/SettingsDialog.bf @@ -103,6 +103,7 @@ namespace IDE.ui }); AddPropertiesItem(category, "Show Line Numbers", "mShowLineNumbers"); + AddPropertiesItem(category, "Free Cursor Movement", "mFreeCursorMovement"); category.Open(true, true); diff --git a/IDE/src/ui/SourceEditWidgetContent.bf b/IDE/src/ui/SourceEditWidgetContent.bf index 916427f5..5c2ffb45 100644 --- a/IDE/src/ui/SourceEditWidgetContent.bf +++ b/IDE/src/ui/SourceEditWidgetContent.bf @@ -3409,6 +3409,29 @@ namespace IDE.ui IDEApp.sApp.mSymbolReferenceHelper.SourceUpdateText(this, index); } + public override void ClampCursor() + { + base.ClampCursor(); + + if (mVirtualCursorPos == null) + return; + if (gApp.mSettings.mEditorSettings.mFreeCursorMovement) + return; + + int line; + int lineChar; + GetCursorLineChar(out line, out lineChar); + + float wantWidth = 0; + int virtualEnd = GetLineEndColumn(line, false, false, false, false, &wantWidth); + + String curLineStr = scope String(); + GetLineText(line, curLineStr); + int32 lineEnd = (int32)curLineStr.Length; + + mVirtualCursorPos.ValueRef.mColumn = (.)Math.Min(mVirtualCursorPos.Value.mColumn, Math.Max(virtualEnd, lineEnd)); + } + public override void PhysCursorMoved() { //Debug.WriteLine("Cursor moved {0} {1}", CursorLineAndColumn.mLine, CursorLineAndColumn.mColumn);