Fix selection being deleted and indentation not being accounted for

This commit is contained in:
Preslavb 2021-12-12 22:07:46 +00:00
parent 81c28dd706
commit 6f1089af86
3 changed files with 55 additions and 1 deletions

View file

@ -937,8 +937,10 @@ void CodeEdit::_new_line(bool p_split_current_line, bool p_above) {
return;
}
const int cc = get_caret_column();
/* When not splitting the line, we need to factor in indentation from the end of the current line. */
const int cc = p_split_current_line ? get_caret_column() : get_line(get_caret_line()).length();
const int cl = get_caret_line();
const String line = get_line(cl);
String ins = "\n";
@ -1012,6 +1014,8 @@ void CodeEdit::_new_line(bool p_split_current_line, bool p_above) {
bool first_line = false;
if (!p_split_current_line) {
deselect();
if (p_above) {
if (cl > 0) {
set_caret_line(cl - 1, false);

View file

@ -2047,6 +2047,7 @@ void TextEdit::_new_line(bool p_split_current_line, bool p_above) {
bool first_line = false;
if (!p_split_current_line) {
deselect();
if (p_above) {
if (caret.line > 0) {
set_caret_line(caret.line - 1, false);

View file

@ -3248,6 +3248,55 @@ TEST_CASE("[SceneTree][CodeEdit] Backspace delete") {
memdelete(code_edit);
}
TEST_CASE("[SceneTree][CodeEdit] New Line") {
CodeEdit *code_edit = memnew(CodeEdit);
SceneTree::get_singleton()->get_root()->add_child(code_edit);
/* Add a new line. */
code_edit->set_text("");
code_edit->insert_text_at_caret("test new line");
code_edit->set_caret_line(0);
code_edit->set_caret_column(13);
SEND_GUI_ACTION(code_edit, "ui_text_newline");
CHECK(code_edit->get_line(0) == "test new line");
CHECK(code_edit->get_line(1) == "");
/* Split line with new line. */
code_edit->set_text("");
code_edit->insert_text_at_caret("test new line");
code_edit->set_caret_line(0);
code_edit->set_caret_column(5);
SEND_GUI_ACTION(code_edit, "ui_text_newline");
CHECK(code_edit->get_line(0) == "test ");
CHECK(code_edit->get_line(1) == "new line");
/* Delete selection and split with new line. */
code_edit->set_text("");
code_edit->insert_text_at_caret("test new line");
code_edit->select(0, 0, 0, 5);
SEND_GUI_ACTION(code_edit, "ui_text_newline");
CHECK(code_edit->get_line(0) == "");
CHECK(code_edit->get_line(1) == "new line");
/* Blank new line below with selection should not split. */
code_edit->set_text("");
code_edit->insert_text_at_caret("test new line");
code_edit->select(0, 0, 0, 5);
SEND_GUI_ACTION(code_edit, "ui_text_newline_blank");
CHECK(code_edit->get_line(0) == "test new line");
CHECK(code_edit->get_line(1) == "");
/* Blank new line above with selection should not split. */
code_edit->set_text("");
code_edit->insert_text_at_caret("test new line");
code_edit->select(0, 0, 0, 5);
SEND_GUI_ACTION(code_edit, "ui_text_newline_above");
CHECK(code_edit->get_line(0) == "");
CHECK(code_edit->get_line(1) == "test new line");
memdelete(code_edit);
}
} // namespace TestCodeEdit
#endif // TEST_CODE_EDIT_H