From 9a6ecda591970fc7292336c1af9ab73088d27e87 Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Thu, 10 Aug 2023 09:48:53 +0300 Subject: [PATCH] [Editor Log] Clear rich print tags only after the last line. --- editor/editor_log.cpp | 13 ++++++++----- editor/editor_log.h | 8 +++++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/editor/editor_log.cpp b/editor/editor_log.cpp index 1bc9f00f08b..4c2f6b31763 100644 --- a/editor/editor_log.cpp +++ b/editor/editor_log.cpp @@ -212,7 +212,7 @@ void EditorLog::clear() { _clear_request(); } -void EditorLog::_process_message(const String &p_msg, MessageType p_type) { +void EditorLog::_process_message(const String &p_msg, MessageType p_type, bool p_clear) { if (messages.size() > 0 && messages[messages.size() - 1].text == p_msg && messages[messages.size() - 1].type == p_type) { // If previous message is the same as the new one, increase previous count rather than adding another // instance to the messages list. @@ -222,7 +222,7 @@ void EditorLog::_process_message(const String &p_msg, MessageType p_type) { _add_log_line(previous, collapse); } else { // Different message to the previous one received. - LogMessage message(p_msg, p_type); + LogMessage message(p_msg, p_type, p_clear); _add_log_line(message); messages.push_back(message); } @@ -237,9 +237,10 @@ void EditorLog::add_message(const String &p_msg, MessageType p_type) { // search functionality (see the comments on the PR above for more details). This behavior // also matches that of other IDE's. Vector lines = p_msg.split("\n", true); + int line_count = lines.size(); - for (int i = 0; i < lines.size(); i++) { - _process_message(lines[i], p_type); + for (int i = 0; i < line_count; i++) { + _process_message(lines[i], p_type, i == line_count - 1); } } @@ -338,7 +339,9 @@ void EditorLog::_add_log_line(LogMessage &p_message, bool p_replace_previous) { } else { log->add_text(p_message.text); } - log->pop_all(); // Pop all unclosed tags. + if (p_message.clear || p_message.type != MSG_TYPE_STD_RICH) { + log->pop_all(); // Pop all unclosed tags. + } log->add_newline(); if (p_replace_previous) { diff --git a/editor/editor_log.h b/editor/editor_log.h index b875066afa2..07f3a25c3e3 100644 --- a/editor/editor_log.h +++ b/editor/editor_log.h @@ -60,12 +60,14 @@ private: String text; MessageType type; int count = 1; + bool clear = true; LogMessage() {} - LogMessage(const String p_text, MessageType p_type) : + LogMessage(const String p_text, MessageType p_type, bool p_clear) : text(p_text), - type(p_type) { + type(p_type), + clear(p_clear) { } }; @@ -166,7 +168,7 @@ private: void _set_search_visible(bool p_visible); void _search_changed(const String &p_text); - void _process_message(const String &p_msg, MessageType p_type); + void _process_message(const String &p_msg, MessageType p_type, bool p_clear); void _reset_message_counts(); void _set_collapse(bool p_collapse);