diff --git a/BeefLibs/Beefy2D/src/widgets/EditWidget.bf b/BeefLibs/Beefy2D/src/widgets/EditWidget.bf index abaad689..1f8ea403 100644 --- a/BeefLibs/Beefy2D/src/widgets/EditWidget.bf +++ b/BeefLibs/Beefy2D/src/widgets/EditWidget.bf @@ -2054,6 +2054,8 @@ namespace Beefy.widgets CursorLineAndColumn = .(origPosition.mLine, 0); var lineStartPosition = CursorLineAndColumn; InsertAtCursor("\n"); + if (var insertTextAction = mData.mUndoManager.GetLastUndoAction() as InsertTextAction) + insertTextAction.mVirtualCursorPos = origPosition; CursorLineAndColumn = lineStartPosition; CursorToLineStart(false); @@ -2071,7 +2073,7 @@ namespace Beefy.widgets } PasteText(text); - CursorLineAndColumn = origPosition; + CursorLineAndColumn = .(origPosition.mLine + 1, origPosition.mColumn); mData.mUndoManager.Add(undoBatchStart.mBatchEnd); } else diff --git a/IDE/src/ui/SourceEditWidgetContent.bf b/IDE/src/ui/SourceEditWidgetContent.bf index f4b678f4..2e5f2931 100644 --- a/IDE/src/ui/SourceEditWidgetContent.bf +++ b/IDE/src/ui/SourceEditWidgetContent.bf @@ -1230,30 +1230,7 @@ namespace IDE.ui var lineAndColumn = CursorLineAndColumn; var lineText = scope String(); - if (HasSelection()) - { - int startPos; - int endPos; - mSelection.Value.GetAsForwardSelect(out startPos, out endPos); - int line; - int lineChar; - GetLineCharAtIdx(startPos, out line, out lineChar); - lineAndColumn.mLine = (int32)line; - int column; - GetColumnAtLineChar(line, lineChar, out column); - lineAndColumn.mColumn = (int32)column; - int lineStart; - int lineEnd; - GetLinePosition(line, out lineStart, out lineEnd); - - ExtractString(lineStart, startPos - lineStart, lineText); - } - else - { - GetLineText(lineAndColumn.mLine, lineText); - } - bool startsWithNewline = (forceMatchIndent) && (str.StartsWith("\n")); bool isMultiline = str.Contains("\n"); @@ -1264,6 +1241,39 @@ namespace IDE.ui defer(stack) mData.mUndoManager.Add(undoBatchStart.mBatchEnd); } + if (HasSelection()) + { + if (isMultiline) + { + DeleteSelection(); + lineAndColumn = CursorLineAndColumn; + } + else + { + int startPos; + int endPos; + mSelection.Value.GetAsForwardSelect(out startPos, out endPos); + int line; + int lineChar; + GetLineCharAtIdx(startPos, out line, out lineChar); + lineAndColumn.mLine = (int32)line; + int column; + GetColumnAtLineChar(line, lineChar, out column); + lineAndColumn.mColumn = (int32)column; + + int lineStart; + int lineEnd; + GetLinePosition(line, out lineStart, out lineEnd); + + ExtractString(lineStart, startPos - lineStart, lineText); + } + } + + if (lineText.IsEmpty) + { + GetLineText(lineAndColumn.mLine, lineText); + } + if (startsWithNewline) { CursorLineAndColumn = LineAndColumn(lineAndColumn.mLine, 0);