Browse Source

Fixed line paste indent issues

Brian Fiete 4 years ago
parent
commit
2a57d9d447
2 changed files with 36 additions and 24 deletions
  1. 3 1
      BeefLibs/Beefy2D/src/widgets/EditWidget.bf
  2. 33 23
      IDE/src/ui/SourceEditWidgetContent.bf

+ 3 - 1
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

+ 33 - 23
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);